iSCSI Linux · 11 min read · Feb 07, 2026
Impostare un ambiente iSCSI su Linux
Impostare un ambiente iSCSI su Linux
Oggigiorno, la tecnologia iSCSI è abbastanza popolare nel mondo dello storage. Questo articolo mostra un ambiente dimostrativo iSCSI che consiste in un host Debian Linux e un Netapp Filer. Cerchiamo di mostrare le caratteristiche più importanti di questo protocollo.
1. Cos’è iSCSI?
È un protocollo di storage di rete sopra TCP/IP. Questo protocollo incapsula i dati SCSI in pacchetti TCP. iSCSI ci consente di collegare un host a un array di storage tramite una semplice connessione Ethernet (unità a nastro). Questa soluzione è più economica rispetto al Fibre Channel SAN (le schede e gli switch Fibre Channel sono costosi). Dal punto di vista dell’host, l’utente vede gli LUN dell’array di storage come dischi locali. I dispositivi iSCSI non devono essere confusi con i dispositivi NAS (ad esempio NFS). La differenza più importante è che i volumi NFS possono essere accessibili da più host, ma un volume iSCSI può essere accessibile da un solo host. È simile al protocollo SCSI: di solito solo un host ha accesso a un disco SCSI (la differenza è l’ambiente cluster). Il protocollo iSCSI è definito nel documento RFC3720 dall’IETF (Internet Engineering Task Force).
Alcuni critici hanno affermato che iSCSI ha prestazioni peggiori rispetto al Fibre Channel e causa un alto carico della CPU sulle macchine host. Penso che se utilizziamo Ethernet Gigabit, la velocità può essere sufficiente. Per superare l’alto carico della CPU, alcuni fornitori hanno sviluppato gli iSCSI TOE (TCP Offload Engine). Ciò significa che la scheda ha un chip di rete integrato, che crea e calcola i frame TCP. Il kernel Linux non supporta direttamente questo e i fornitori di schede scrivono i propri driver per il sistema operativo.
I termini iSCSI più importanti:
Iniziatore:
L’iniziatore è il nome del client iSCSI. Il client iSCSI ha accesso a livello blocco ai dispositivi iSCSI, che possono essere un disco, un’unità a nastro, un masterizzatore DVD/CD. Un client può utilizzare più dispositivi iSCSI.
Target:
Il target è il nome del server iSCSI. Il server iSCSI offre i suoi dispositivi (dischi, nastro, dvd/cd … ecc.) ai client. Un dispositivo può essere accessibile da un solo client.
Scoperta:
La scoperta è il processo che mostra i target per l’iniziatore.
Metodo di scoperta:
Descrive il modo in cui i target iSCSI possono essere trovati. I metodi attualmente disponibili sono:
- Internet Storage Name Service (iSNS) - I target potenziali vengono scoperti interagendo con uno o più server iSNS.
- SendTargets – I target potenziali vengono scoperti utilizzando un indirizzo di scoperta.
- SLP - Scopri i target tramite il protocollo di localizzazione del servizio (RFC 4018)
- Statico – Viene specificato un indirizzo target statico.
Nominazione iSCSI:
Il documento RFC tratta anche dei nomi iSCSI. Il nome iSCSI è composto da due parti: stringa di tipo e stringa di nome unico.
La stringa di tipo può essere la seguente:
- iqn. : nome qualificato iscsi
- eui. : identificatore eui-64 bit
La maggior parte delle implementazioni utilizza il formato iqn. Vediamo il nostro nome di iniziatore: iqn.1993-08.org.debian:01.35ef13adb6d
iqn: utilizziamo l’indirizzo del nome qualificato iSCSI.
1993-08: l’anno del mese in cui l’autorità di denominazione ha acquisito il nome di dominio utilizzato nel nome iSCSI.
org.debian: nome DNS invertito che definisce l’autorità di denominazione organizzativa.
01.35ef13adb6d: questa stringa è definita dall’autorità di denominazione.
Il nostro nome di target è simile (iqn.1992-08.com.netapp:sn.84211978). La differenza è che contiene il numero di serie del Netapp filer. Entrambi i nomi sono modificabili dall’utente (iniziatore, target). Abbiamo anche bisogno di due indirizzi IP per il target e per l’iniziatore.
La figura seguente mostra il nostro ambiente dimostrativo. Consiste in un host Debian che è l’iniziatore iSCSI e accede al
disco iSCSI tramite il dispositivo /dev/sdb. Il Netapp filer è il nostro dispositivo target iSCSI, che offre il disco /vol/iscsivol/tesztlun0 o lun per l’host Debian Linux. La sessione iSCSI consiste in una fase di login, quindi nella fase di scambio dati.

2. Supporto iSCSI su altre piattaforme Unix
Il driver iSCSI Cisco è una delle prime implementazioni software di iniziatore iSCSI. Questo driver supporta tutti i principali sistemi Unix commerciali e le loro versioni (HPUX:10.20,11,11i, AIX:4.3.3,5.1,5.2, Solaris: 2.6,7,8,9). La prima versione può essere datata al 2001. Attualmente, ogni fornitore Unix implementa il proprio driver e noi indaghiamo su questi driver.
Solaris:
Solaris 10 (dalla versione 1/06) supporta iSCSI. Il driver dell’iniziatore può fare quanto segue:
- Supporto di più sessioni a un target: questa funzione consente a un client di creare più sessioni iSCSI a un target secondo necessità, e aumenta le prestazioni.
- Multipathing: con l’aiuto della funzione Solaris Mpxio o IPMP possiamo creare percorsi ridondanti verso i target.
- Dischi da 2 Tb e autenticazione CHAP sono anch’essi supportati. Il driver Solaris può utilizzare i tre metodi di scoperta (SLP non può). I dischi iSCSI possono essere
accessibili tramite il programma di formato.
HPUX:
HP ha supportato l’iSCSI a partire dal sistema operativo HP11i v1. Questo driver può scoprire i target tramite SLP (Service Location Protocol) che è anch’esso definito dall’IETF (RFC 4018). Ciò significa che l’iniziatore iSCSI e i target si registrano presso l’agente di directory SLP. Dopo la registrazione, l’iniziatore iSCSI interroga solo l’agente di directory. Il driver HPUX implementa tutti i metodi di scoperta. L’autenticazione CHAP è anch’essa implementata e gli strumenti di multipath del sistema operativo (PVLinks) sono anch’essi supportati. Il driver HPUX fornisce anche statistiche di trasporto.
AIX:
A partire dalla versione 5.2, AIX supporta iSCSI. Il driver implementa solo la scoperta target statica. Possiamo utilizzare i dischi iSCSI con il multipathing AIX chiamato MPIO. L’autenticazione CHAP è anch’essa supportata.
Nessuno dei driver ci consente di avviare da iSCSI. Questo può essere un passo successivo nello sviluppo del driver.
3. Implementazioni iscsi Linux
Implementazioni dell’iniziatore:
Cisco ha anche rilasciato un driver Linux ma è piuttosto vecchio.
L’implementazione iSCSI di Intel contiene sia driver target che iniziatore e uno strumento utile per generare carichi di lavoro.
UNH-iSCSI è un’implementazione di iniziatore e target dell’Università del New Hampshire.
Il progetto Open-iSCSI è la più recente implementazione. Può essere utilizzato con i kernel 2.6.11 e superiori. Testeremo questo driver con l’host Debian. Contiene moduli del kernel e un demone iscsid.
Il demone iscsid può essere avviato con il seguente comando:
/etc/init.d/open-scsi startLe operazioni iSCSI possono essere controllate con il comando iscsiadm. Il comando può scoprire i target, effettuare login/logout al target e visualizzare le informazioni sulla sessione.
I file di configurazione si trovano nella directory /etc/iscsi:
- iscsid.conf: File di configurazione per il demone iscsi. Viene letto all’avvio.
- initiatorname.iscsi: Il nome dell’iniziatore, che il demone legge all’avvio.
- directory nodes: La directory contiene i nodi e i loro target.
- directory send_targets: La directory contiene i target scoperti.
Il processo di installazione è piuttosto semplice. Esegui:
apt-get install open-iscsiQuesto driver implementa attualmente il metodo di scoperta Sendtargets.
Implementazioni del target:
iSCSI enterprise target è l’implementazione target open source per Linux. È basata sull’implementazione Ardis iSCSI Linux e richiede il kernel 2.6.14.
Openfiler è un’implementazione NAS Linux piuttosto popolare e offre un software NAS basato su Linux con un’interfaccia GUI basata sul web.
Molte altre aziende offrono driver target iSCSI commerciali basati su software (Amgeon, Mayastor, Chelsio).
I produttori di array di storage offrono anche un supporto nativo per iSCSI (EMC, Netapp, ecc.).
Abbiamo scelto il Netapp FAS filer per il test, ma puoi testarlo con un software gratuito. C’è un link in fondo all’articolo che mostra come possiamo farlo con Openfiler.
4. Impostare l’ambiente dimostrativo iSCSI Linux
Il nostro ambiente dimostrativo contiene un host Debian Linux e un Netapp filer. L’host Debian è l’iniziatore e il Netapp filer è il target.
Il processo di configurazione è il seguente in breve:
- Dobbiamo impostare la connessione tcp/ip tra Debian e il Netapp filer. L’iniziatore e il target devono pingarsi a vicenda. Supponiamo che il pacchetto open-iscsi sia già installato su Debian.
- L’host Debian deve scoprire i target Netapp. Questo è chiamato processo di “scoperta”. Poi il target invia le liste dei target.
- Il target deve consentire all’iniziatore di accedere all’LUN. Dal lato Netapp, ciò significa che dobbiamo creare un gruppo di iniziatori, che è un legame logico tra gli host e gli LUN. Il gruppo di iniziatori contiene l’LUN e un host Debian che può accedere a questo LUN.
- Quando l’iniziatore ottiene le liste dei target, deve “effettuare il login” al target.
- Quando il processo di “login” si completa con successo e il Netapp filer consente l’accesso, l’iniziatore può utilizzare il disco iSCSI come un normale disco. Appare sotto i dispositivi /dev/sdx e puoi formattarlo, montarlo come un normale disco.
Ecco i passaggi dettagliati:
- Pinghiamo il Netapp filer dall’host Linux:
debian:~# ping nasaPING nasa (192.168.2.222) 56(84) byte di dati.
64 byte da nasa (192.168.2.222): icmp_seq=1 ttl=255 time=0.716 ms
64 byte da nasa (192.168.2.222): icmp_seq=2 ttl=255 time=0.620 ms
È andato a buon fine.
- Scopriamo gli LUN iSCSI del netapp filer con il comando iscsiadm. Abbiamo scelto il metodo di scoperta st (sendtargets). Attualmente è implementato con questo driver:
debian:~# iscsiadm -m discovery -t st -p 192.168.2.222192.168.2.222:3260 tramite sendtargets
Vediamo i target scoperti:
debian:~# iscsiadm -m node192.168.2.222:3260,1000 iqn.1992-08.com.netapp:sn.84211978
- Dobbiamo preparare il lato Netapp: In questo esempio creeremo un LUN da 4GB (parte del gruppo RAID) e lo assegneremo all’host Debian. Dobbiamo controllare lo spazio libero:
nasa> df -kFilesystem totale usato disponibile capacità Montato su
/vol/vol0/ 8388608KB 476784KB 7911824KB 6% /vol/vol0/
/vol/vol0/.snapshot 2097152KB 10952KB 2086200KB 1% /vol/vol0/.snapshot
/vol/iscsiLunVol/ 31457280KB 20181396KB 11275884KB 64% /vol/iscsiLunVol/
/vol/iscsiLunVol/.snapshot 0KB 232KB 0KB —% /vol/iscsiLunVol/.snapshotunVol/testlun1
Il seguente comando crea un LUN da 4GB sul volume iscsiLunVol:
nasa> lun create -s 4g -t linux /vol/iscsiLunVol/testlun1Controllalo:
nasa> lun show/vol/iscsiLunVol/iscsitestlun 7.0g (7526131200) (r/w, online, mapped)
/vol/iscsiLunVol/iscsitestlun2 7.0g (7526131200) (r/w, online, mapped)
/vol/iscsiLunVol/testlun1 4g (4294967296) (r/w, online)
Dobbiamo controllare se l’host Debian è visibile dall’host netapp:
nasa> iscsi initiator showIniziatori connessi:
TSIH TPGroup Iniziatore
19 1000 debian (iqn.1993-08.org.debian:01.35ef13adb6d / 00:02:3d:00:00:00)
Ok, vediamo l’host Debian. Creiamo il gruppo di iniziatori, chiamato Debian2.
nasa> igroup create -i -t linux Debian2 iqn.1993-08.org.debian:01.35ef13adb6dnasa> igroup show Debian2 (iSCSI) (ostype: linux):
iqn.1993-08.org.debian:01.35ef13adb6d (loggato su: e0a)Dobbiamo assegnare il nuovo LUN creato agli host Debian2.
nasa> lun map /vol/iscsiLunVol/testlun1 Debian2mappatura lun: auto-assegnato Debian2=2
Il comando di controllo:
nasa> lun show -v/vol/iscsiLunVol/testlun1 4g (4294967296) (r/w, online, mapped)
Serial#: hpGBe4AZsnLV
Condivisione: nessuna
Riserva di spazio: abilitata
Tipo multiprotocollo: linux
Mappe: Debian2=2
- Torniamo al nostro host iniziatore. Ora tutto è pronto per accedere al LUN da 4GB. Il seguente comando rende il disco accessibile dall’host Linux.
debian:~# iscsiadm -m node -T iqn.1992-08.com.netapp:sn.84211978 -p 192.168.2.222:3260 –login
Dobbiamo vedere le seguenti voci nel file dei messaggi:
debian:~# tail /var/log/messages
Apr 13 00:31:34 debian kernel: scsi: tipo di dispositivo sconosciuto 31
Apr 13 00:31:34 debian kernel: Fornitore: NETAPP
Modello: LUN Rev: 0.2
Apr 13 00:31:34 debian kernel: Tipo: Sconosciuto revisione ANSI SCSI: 04
Apr 13 00:31:34 debian kernel: Fornitore: NETAPP Modello: LUN Rev: 0.2
Apr 13 00:31:34 debian kernel: Tipo: Accesso Diretto revisione ANSI SCSI: 04
Apr 13 00:31:34 debian kernel: Dispositivo SCSI sdb: 8388608 512 byte settori hdwr (4295 MB)
Apr 13 00:31:34 debian kernel: sdb: Protezione scrittura disattivata
Apr 13 00:31:34 debian kernel: Dispositivo SCSI sdb: cache disco: scrittura attraverso
Apr 13 00:31:34 debian kernel: sd 1:0:0:2: Dispositivo scsi disco sdb attaccato
Il disco appare come dispositivo sdb ( /dev/sdb).
- Possiamo usarlo come un normale disco. Puoi creare una partizione e puoi facilmente montarla.
debian:~# fdisk /dev/sdb debian:~# mkfs /dev/sdb1 ; mount /dev/sdb1 /mnt Se vuoi usare sdb dopo il prossimo riavvio, dovresti cambiare la seguente voce:
node.conn[0].startup = manuale in automatico
nel file /etc/iscsi/nodes/
L’implementazione dell’iniziatore open-iscsi tollera bene gli errori di rete. Se disconnetti il cavo Ethernet e lo riconnetti, devi avviare di nuovo il processo io, ma la riconnessione avviene automaticamente.
Un’altra buona soluzione per i guasti di rete, se crei più percorsi per un LUN (ad esempio: /dev/sdb, /dev/sdc), l’iniziatore effettua il login in due posizioni (due controller RAID) e puoi rendere i due dischi come un unico disco logico utilizzando il software multipath di Linux ( dmsetup).
Raccomando un’altra alternativa per l’implementazione del target iSCSI: Openfiler (se non puoi testare sulla macchina Netapp). È un software NAS basato su Linux gratuito, che può essere gestito con un’interfaccia GUI basata sul web.
Il processo di configurazione iSCSI è piuttosto simile nel caso di altre implementazioni Unix.
5. Riepilogo e risultati
iSCSI è una buona soluzione per un sito di recupero disastri economico. Non dovresti acquistare una costosa scheda Fibre Channel nel sito di recupero disastri, puoi utilizzare Ethernet e iSCSI. Puoi anche usarlo per collegare host a array di dischi senza adattatori host Fibre Channel (se gli array sono compatibili con iSCSI).
Durante il test ho eseguito l’host Debian nel programma Vmware player, e la mia connessione di rete era di 100 Mbit/s. Non riesco a raggiungere più di 15 MB/s di prestazioni in lettura/scrittura, ma non è rilevante. Con Ethernet Gigabit puoi raggiungere prestazioni molto migliori, l’unico svantaggio è che aumenta il carico della CPU (la CPU deve costruire e calcolare i frame TCP).
Ecco la mia semplice homepage.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.