iSCSI: configurare server e client iscsitarget su Linux
iSCSI: panoramica rapida
iSCSI (Internet Small Computer Systems Interface) è un protocollo SAN che consente di esporre dischi/block device su una rete IP esistente. Definizione rapida: iSCSI mappa dischi remoti come dispositivi SCSI locali tramite TCP/IP.
Importante: questa configurazione è adatta per ambienti di laboratorio e test. Non è consigliata per produzione senza controlli aggiuntivi (ridondanza di rete, autenticazione CHAP, multipathing, backup, SLA).
1. Installazione e configurazione del server iSCSI
Questa sezione descrive l’installazione di iscsitarget e la configurazione di esempio su un host fisico.
1.a Compilazione del pacchetto iscsitarget
Questi comandi devono essere eseguiti sull’host fisico.
- Scarica il tarball da SourceForge e posizionalo in /usr/local/src.
- Accedi alla directory:
cd /usr/local/src
- Estrai i file:
tar xvf iscsitarget-0.4.16.tar.gz cd iscsitarget-0.4.16
- Compila e installa:
make make install
Nota: i percorsi, le versioni e i nomi dei pacchetti possono variare in base alla distribuzione e all’epoca. Adattare i comandi al proprio sistema (es. build-essential, gcc, make, librerie dipendenza).
1.b Configurazione di esempio (ietd.conf)
Esempio di /etc/ietd.conf che definisce i LUN esposti ai guest. Conserva i Path così come sono se usi volumi LVM; altrimenti sostituisci con file o partizioni.
#/etc/ietd.conf
# NOTE: the config files has more entries than what i'm showing here.
# but i've commented out the original entries and made the following
Target iqn.2008-07.NODE00:LUN01.NODE00
MaxConnections 2
Lun 1 Path=/dev/Virtual00VG/lvLUN01,Type=fileio
Alias LUN01
Target iqn.2008-07.NODE00:LUN02.NODE00
MaxConnections 2
Lun 2 Path=/dev/Virtual00VG/lvLUN02,Type=fileio
Alias LUN02
# end of ietd.conf
Esempio pratico: sul mio host fisico ho creato due volumi logici da 50 GB ciascuno. Puoi usare anche file regolari o partizioni; in tal caso modifica gli entry Path.
1.c Controllo accessi (ACL)
iscsitarget utilizza /etc/initiators.allow e /etc/initiators.deny simili a hosts.allow/hosts.deny.
Esempio /etc/initiators.allow che autorizza node01 e node02:
#/etc/initiators.allow
#this should correspond to the definition in your /etc/ietd.conf
iqn.2008-07.NODE00:LUN01.NODE00 192.168.100.10, 192.168.100.20
iqn.2008-07.NODE00:LUN02.NODE00 192.168.100.10, 192.168.100.20
# endof initiators.allow
Avviare il servizio iscsi-target e abilitarlo all’avvio:
service iscsi-target start
chkconfig --add iscsi-target
chkconfig iscsi-target on
chkconfig --list iscsi-target
Uscita di esempio: iscsi-target 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Nota: i comandi di gestione dei servizi (service, chkconfig) sono tipici di RHEL/CentOS 5. Su sistemi più recenti usare systemctl.
2. Lato client (initiator)
Il pacchetto iscsi-initiator-utils dovrebbe essere installato. I comandi sotto sono esempi su RHEL/CentOS.
2.a Configurazione del client
Modifica /etc/iscsi/initiatorname.iscsi per definire l’InitiatorName.
Esempio:
#/etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2008-07.NODE00:LUN01.NODE00 InitiatorName=iqn.2008-07.NODE00:LUN02.NODE00 # end of #/etc/iscsi/initiatorname.iscsi
Avvia il demone iscsid e scopri i target:
service iscsid start
Output d’esempio: Turning off network shutdown. Starting iSCSI daemon: [ OK ]
- Scoperta dei target:
iscsiadm -m discovery -t st -p node00
Esempio di discovery: 192.168.222.1:3260,1 iqn.2008-07.NODE00:LUN01.NODE00 192.168.222.1:3260,1 iqn.2008-07.NODE00:LUN02.NODE00
- Avviare il servizio iscsi:
service iscsi start
Uscita mostrata: iscsid (pid 964 963) is running... Setting up iSCSI targets: Login session [iface: default, target: \ iqn.2008-07.NODE00:LUN02.NODE00, portal: 192.168.222.1,3260] Login session [iface: default, target: iqn.2008-07.NODE00:LUN01.\ NODE00, portal: 192.168.222.1,3260] [ OK ]
- Verifica i log e i dispositivi SCSI con dmesg e fdisk:
dmesg
Esempio (estratto): scsi0 : iSCSI Initiator over TCP/IP Vendor: IET Model: VIRTUAL-DISK Rev: 0 Type: Direct-Access ANSI SCSI revision: 04 scsi 0:0:0:2: Attached scsi generic sg0 type 0 SCSI device sda: 104857600 512-byte hdwr sectors (53687 MB) sda: Write Protect is off sda: Mode Sense: 77 00 00 08 SCSI device sda: drive cache: write through sda: unknown partition table sd 0:0:0:2: Attached scsi disk sda ...
fdisk -l
Esempio (estratto): Disk /dev/sda: 53.6 GB, 53687091200 bytes Disk /dev/sdb: 53.6 GB, 53687091200 bytes Disk /dev/sda doesn't contain a valid partition table Disk /dev/sdb doesn't contain a valid partition table
Dopo aver ripetuto la stessa procedura su node02 e verificato che entrambi i nodi vedano i dischi (sda, sdb), si può procedere con la preparazione di un cluster a due nodi. Io ho usato questa configurazione per testare un Oracle 10gR2 RAC con ASM condiviso e OCFS2 su sistema a 64 bit.
Quando questo setup non è adatto (controesempi)
- Non usare questa guida così com’è in produzione: manca autenticazione CHAP robusta, multipathing, QoS, monitoring e ridondanza di rete.
- Non usare LUN condivisi senza un cluster-aware filesystem (es. OCFS2, GFS2) o senza un gestore di lock condiviso; rischi di corruzione dati.
- Non utilizzare volumi senza backup e test di failover.
Alternative e integrazioni
- Usare tgt o LIO (target) moderni invece di iscsitarget, perché ricevono aggiornamenti e supportano funzionalità moderne.
- Aggiungere multipathd per ridondanza path e migliore performance.
- Abilitare CHAP per autenticazione e/o iSCSI over VLAN dedicate per isolamento del traffico.
- Per cluster di produzione, considerare protocollo NVMe-oF per latenza inferiore.
Mini-metodologia: passi essenziali per un test di laboratorio
- Preparare host fisico: creare volumi LVM o file immagine (es. dd if=/dev/zero of=/iscsi/lun1.img bs=1M count=51200).
- Installare iscsitarget e configurare /etc/ietd.conf con Target/Lun/Alias.
- Configurare /etc/initiators.allow per limitare l’accesso.
- Avviare iscsi-target e verificare con journal/log.
- Su client, impostare /etc/iscsi/initiatorname.iscsi, avviare iscsid, eseguire iscsiadm discovery e login.
- Verificare dispositivi con dmesg, fdisk; preparare filesystem cluster-aware o LVM condiviso.
Checklist per ruolo
Amministratore storage:
- Creare volumi LVM da assegnare come LUN.
- Testare I/O e latenza.
- Documentare mapping IQN ↔ LUN.
Amministratore sistema (client):
- Configurare initiatorname.iscsi.
- Effettuare discovery e login.
- Verificare visibilità disco e partizionamento.
Team di rete:
- Isolare traffico iSCSI su VLAN dedicata.
- Validare MTU e QoS.
Rischi principali e mitigazioni
- Problema: corruzione dati per accesso concorrente senza filesystem cluster-aware.
- Mitigazione: usare OCFS2/GFS2 o un cluster manager.
- Problema: perdita rete/latency alta.
- Mitigazione: reti ridondanti e monitoring.
- Problema: accessi non autorizzati.
- Mitigazione: CHAP, ACL, firewall e segmentazione.
Glossario (1 riga ciascuno)
- LUN: Logical Unit Number, identificatore logico di un disco esposto.
- IQN: iSCSI Qualified Name, identificatore univoco per target/initiator.
- CHAP: protocollo di autenticazione challenge–response.
- OCFS2: filesystem cluster-aware che permette accesso concorrente sicuro.
Conclusione
Questo tipo di configurazione è utile per imparare le basi del clustering e dello storage condiviso senza hardware aggiuntivo. Dopo aver sperimentato i passaggi qui descritti, potrai trasferire il concetto a setup fisici e pronti per la produzione, con le necessarie migliorie in sicurezza e disponibilità.
Ulteriori letture
- RHEL5 Virtualization Manual
- http://iscsitarget.sourceforge.net
- Oracle RAC HowTO
Sommario: questa guida fornisce i passaggi pratici per compilare iscsitarget, configurare LUN e ACL, eseguire discovery dal client e verificare i dispositivi. Aggiunge suggerimenti su quando evitare questo setup, alternative moderne e checklist per i ruoli.
Materiali simili
Aggiornare Ubuntu 12.04 a 14.04 LTS

Errore 0xc000001d su Windows: cause e soluzioni

Svuotare e gestire Luoghi recenti su macOS

Correggi errori 0x80070057, 0xa0000400 e Cortana

Rimuovere aggiornamenti Windows problematici
