domenica 8 febbraio 2009

Connettersi a un volume iSCSI da Debian e Ubuntu


Questo post e' basato sulla traduzione e integrazione di un articolo scritto da Vivek Gite e da un articolo scritto da Vide.


Q. Come si formatta e ci si connette a un volume iSCSI sotto Debian / Ubuntu Linux?

A. Dovete installare il pacchetto open-iscsi package per una implementazione iSCSI sotto Debian / Ubuntu Linux. Questo pacchetto e' anche conosciuto come Linux Open-iSCSI Initiator. E' necessario utilizzare un sistema Linux con versione di kernel2.6.16, o superiore. Seguira' un post con le istruzioni specifiche per REHL 5 / CentOS 5 / Fedora Linux.

Installare Open-iSCSI Initiator

Digitate il comando seguente a terminale:
$ sudo apt-get install open-iscsi
Rimuovere gli init script che, almeno in etch, non sono configurati proprio al meglio e causano kernel panic in fase di shutdown e conseguente emicrania al sistemista :)
update-rc.d -f open-iscsi remove


Configurazione di Open-iSCSI

E' necessario creare due link simbolici con i seguenti comandi:
ln -s /etc/iscsid.conf /etc/iscsi/
ln -s /etc/initiatorname.iscsi /etc/iscsi/


I file di configurazione potrebbero essere /etc/iscsi/iscsid.conf o ~/.iscsid.conf.
Aprite il file /etc/iscsi/iscsid.conf:
# vi /etc/iscsi/iscsid.conf


Settare node.session.auth.username, node.session.auth.password and altri parametri come segue:
node.startup = automatic
node.session.auth.username = MY-ISCSI-USER
node.session.auth.password = MY-ISCSI-PASSWORD
discovery.sendtargets.auth.username = MY-ISCSI-USER
discovery.sendtargets.auth.password = MY-ISCSI-PASSWORD
node.session.timeo.replacement_timeout = 120
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 10
node.conn[0].timeo.noop_out_timeout = 15
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.conn[0].iscsi.MaxRecvDataSegmentLength = 65536


Salvare e chiudere il file. Eseguire un restart del servizioopen-iscsi:
# /etc/init.d/open-iscsi restart


Eseguite un discovery diretto all'host target iscsi:
# iscsiadm -m discovery -t sendtargets -p ISCSI-SERVER-IP-ADDRESS


Se l'indirizzo IP del server iSCSI fosse 192.168.1.60, digitate:
# iscsiadm -m discovery -t sendtargets -p 192.168.1.60


Segnatevi l'identificativo (qualcosa come iqn.2001-05.com.doe:test) trovato dal discovery precedente. Vi servira' per eseguire il login e connettervi all'host iSCSI:
# iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.60:3260 --login


Eseguire un nuovo restart del servizioopen-iscsi:
# /etc/init.d/open-iscsi restart


Formattare il volume iSCSI

Ora dovreste vedere un nuovo drive sul sistema, ad esempio /dev/sdc. Potete cercare il nome del nuovo device sul file /var/log/messages.

# tail -f /var/log/messages

Se il nome del device appena creato e' /dev/sdc, digitate il seguente comando per creare una o piu' partizioni:
# fdisk /dev/sdc

Formattate la partizione creata:
# mkfs.ext3 /dev/sdc1

Montate il filesystem:
# mkdir /mnt/iscsi
# mount /dev/sdc1 /mnt/iscsi

Se e' tutto a posto, potete istruire il vostro sistema per attivare al boot l'initiator iSCSI e montare in automatico i volumi iSCSI. Aggiungete al file /etc/fstab una riga come la seguente:
/dev/sdc1 /mnt/iscsi ext3 defaults,auto,_netdev 0 0
Risolvere i problemi di boot / shutdown sotto etch Debian Linux

Aprite il file /etc/network/nterfaces e aggiungete le righe seguenti alla definizione dell'interfaccia di rete che utilizzate per montare i volumi iSCSI:
post-up echo “Waiting for network to come up before starting iSCSI…” && sleep 5
post-up /etc/init.d/open-iscsi start
pre-down umount -a -O _netdev
pre-down /etc/init.d/open-iscsi stop

Questo per ovviare alla cancellazione degli init script eseguita all'inizio del post.
Aprite il file /etc/default/rcS e verificate che contenga la riga seguente:
ASYNCMOUNTNFS=no

Questa disabilita il mount asincrono, che teoricamente dovrebbe funzionare meglio, ma in pratica non funziona poi cosi' bene su Debian Etch quando si ha a che fare con iSCSI.
Per evitare che il sistema killi la connessione iSCSI prima che i volumi siano smontati, occorre modificare l'ordine di esecuzione di alcuni script relativi agli init level 0 e 6 (halt e reboot):
mv /etc/rc6.d/S20sendsigs /etc/rc6.d/S39sendsigs
mv /etc/rc0.d/S20sendsigs /etc/rc0.d/S39sendsigs

Commenti finali:
Ho testato il workaround presentato per risolvere i problemi di iSCSI con Debian Etch. Funziona bene in fase di reboot/halt. Per quanto riguarda la fase di boot, ancora non sono riuscito ad eseguire il mount in automatico, mentre non ci sono problemi per la connessione dell'initiator al target iSCSI. In pratica eseguendo un semplice:
mount -a

al termine della fase di boot, i volumi iSCSi vengono montati senza problemi. Vedremo nei prossimi giorni come ovviare a questo problema.


Nessun commento: