[iSCSI] Installation d'un serveur iSCSI sous Debian et connexion d'un client
Je me suis aujourd’hui confronté à une petite installation d’un serveur iSCSI sous Debian et la connexion de client sous linux.
Les deux applications que nous allons utiliser ici sont iscsi_target et open-iscsi.
Quelques termes
Tout d’abord, rappelons les termes employés dans le domaine du iSCSI.
- SCSI : Le SCSI est un type de connectique comme le
SATA
ou l'IDE
qui est principalement utilisé sur les serveurs, car il offre de très bonne vitesse (de 10k à 15k rpm) - iSCSI : Le
iSCSI
est une émulation des commandes du protocole SCSI via le réseau TCP/IP. Il permet de s’abstenir de l’achat de connectiques coûteuses. Il est comparable au FBoE (FibreChannel over Ethernet) pour le FibreChannel. - Le Target : Un Target iSCSI est un serveur iSCSI, c’est-à-dire notre SAN. C’est lui qui va distribuer nos données de type bloc via le réseau.
- L’initiator : Un initiator iSCSI est un client. C’est lui qui va se connecter au Target. Une fois la partition montée sur l’initiator le système pourra l’utiliser indifféremment comme si elle était une partition d’un disque physique connecté à la machine.
- LUN : pour “Logical Unit Number” correspond dans le domaine iSCSI au numéro d’identification d’une unité de stockage, c’est-à-dire à une partition partagée par notre SAN.
Installation du Target
Comme dit plus haut nous allons utiliser iscsi_target qui semble être le produit le plus abouti pour le iSCSI
sous linux.
L’installation sous Debian est assez simple. Les paquets concernés sous squeeze sont iscsitarget (le service en lui-même) et iscsitarget-dkms (le module noyau).
# aptitude install iscsitarget iscsitarget-dkms
Une fois l’installation effectuée vous devez spécifier explicitement à Debian que vous voulez qu’il démarre le service iSCSI. Pour cela il faut éditer le fichier de configuration /etc/default/iscsitarget et passer la variable ISCSITARGET_ENABLE à true.
# vim /etc/default/iscsitarget
ISCSITARGET_ENABLE=true
Il ne nous reste plus qu'à configurer nos partages !
Avec iSCSI-target vous pouvez aussi bien partager des disques physiques (/dev/sd*), des partitions (/dev/sd*n), des volumes raid (/dev/md*), des volumes LVM (/dev/vg*/mon_lv) que des fichiers simples. Nous allons ici partager des volumes logiques LVM, mais vous pouvez tout aussi bien sauter cette étape et adapter les configurations qui suivent ! Installons LVM.
# aptitude install lvm2
Ajoutons des volumes physiques. (Ici deux disques physiques)
# pvcreate /dev/sdb /dev/sdc
Créons un groupe de volume lié à des volumes physiques. (Ici nommé vg0 lié à sdb et sdc)
# vgcreate vg0 /dev/sdb /dev/sdc
Et enfin créons un volume logique (ici de 3G nommé partage1)
# lvcreate -L 3G -n partage1 vg0
Nous avons donc maintenant un volume logique /dev/vg0/partage1 à partager.
Le fichier de configuration de iscsi target
est /etc/iet/ietd.conf. Ce fichier est abondamment commenté nous ne détaillerons donc pas toutes les options mais simplement celle que nous allons utiliser ici. En voici la liste
- Target : Définis le début d’une section de configuration d’un partage. Il doit être suivi d’un nom unique identifiant le partage. La RFC 3720 sur le
iSCSI
propose d’utiliser la forme suivante :iqn.yyyy-mm.<reversed domain name>[:identifier]
où yyyy-mm est l’année de mise en service suivit du mois, reversed domain name est votre nom de domaine inversé (par exemple fr.therrat.romain). Nous utiliserons ici iqn.2011-04.fr.therrat.romain:partage1 - IncomingUser : Un couple nom d’utilisateur/mot de passe pour se connecter au partage
- Lun : Les informations sur le ou les volumes à partager.
Voici un exemple de fichier de configuration
Target iqn.2011-04.fr.therrat.romain:partage1
IncomingUser romain password
Lun 0 Path=/dev/vg0/partage1,Type=fileio
Ceci nous crée donc un partage iSCSI nommé iqn.2011-04.fr.therrat.romain:partage1, partageant /dev/vg0/partage1. Vous pouvez ajouter autant de Lun que vous le souhaitez dans chaque partage.
Redémarrons le service iscsi
# /etc/init.d/iscsitarget restart
Voilà qui est fini pour le Target iSCSI passons aux initiators !
Installation d’un Initiator
Nous allons utiliser open-iscsi comme initiator, installons-le !
# aptitude install open-iscsi
Modifions le fichier de configuration pour que le service démarre automatiquement. Pour cela modifier la ligne node.startup de manual à automatic
# vim /etc/iscsi/iscsid.conf
node.startup = automatic
Redémarrer ensuite le service
# /etc/init.d/open-iscsi restart
Détectons les partages disponibles sur notre serveur iSCSI avec la commande iscsiadm
# iscsiadm -m discovery -t st -p _<ip-target-iscsi>_
<ip-target-iscsi>:3260,1 iqn.2011-04.fr.therrat.romain:partage1
Ceci détectera les partages disponibles sur le Target iscsi.
Il convient maintenant de configurer votre initiator avec les identifiants que nous avons configurés sur le serveur (pour mémoire : romain/password). Pour cela éditer le fichier /etc/iscsi/iscsid.conf et ajouter les informations suivantes
node.session.auth.authmethod = CHAP
node.session.auth.username = romain
node.session.auth.password = password
Redémarrer votre service
# /etc/init.d/open-iscsi restart
Enfin nous pouvons nous connecter à notre partage
# iscsiadm -m node --targetname "iqn.2011-04.fr.therrat.romain:partage1" --portal "<ip-target-iscsi>" --login
Logging in to [iface: default, target: iqn.2011-04.fr.therrat.romain:partage1, portal: <ip-target-iscsi>,3260]
Login to [iface: default, target: iqn.2011-04.fr.therrat.romain:partage1, portal: <ip-target-iscsi>,3260]: successful
À partir de maintenant vous avez un nouveau disque disponible (/dev/sdb par exemple) sur votre Initiator que vous pouvez utiliser comme un disque classique.
Voila qui conclus donc cet article en espérant qu’il vous sera utile !