iSCSI (internet SCSI) est un protocole de la couche application permettant le transport de commandes SCSI sur un réseau TCP/IP.
http://fr.wikipedia.org/wiki/ISCSI
Concrètement, il permet de partage des disques (devices) directement en SCSI. Cela peut être très très utile lors de l'utilisation de Xen.
Ce Wiki est en deux partie : tout d'abord la partie client (comment un Linux peut se connecter sur un "serveur" iSCSI, quelque soit la cible : SAN propriétaire, autre Linux, etc. Ensutie, une partie serveur, où comment transformer une distribution GNU/Linux en target (cible) iSCSI.
Cette documentation se fait en root. Fait avec Debian Lenny.
Partons du principe que votre SAN est sur l'IP 192.168.50.11.
# aptitude install open-iscsi
Pour découvrir un nœud sur le SAN :
# iscsiadm -m discovery -t st -p 192.168.50.11 192.168.50.11:3260,1 iqn.2000-08.com.datacore:sw01a-1
Le retour de cette commande indique qu'il existe bien quelque chose.
De côté de votre SAN, vous devrez accepter la connexion, et donner un volume à la machine qui demande la connexion (ça dépend de votre SAN, DRBD ou autre propriétaire).
On va à présent se connecter sur tous les nœuds rencontrés (ici un seul, d'où le "all" de flemmard)
# iscsiadm -m node -L all
Attention, il est parfois nécessaire de se déloger, puis reloger pour bien voir le disque. Faites ceci pour vous déloger :
# iscsiadm -m node -U all
Puis à nouveau :
# iscsiadm -m node -L all
Enfin, pour vérifier que vous êtes connecté :
# iscsiadm -m session tcp: [3] 192.168.50.11:3260,1 iqn.2000-08.com.datacore:sw01a-1
Il est temps d'observer la liste des disques :
Disk /dev/sdc: 2198.4 GB, 2198486384640 bytes 255 heads, 63 sectors/track, 267284 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdc1 1 267284 2146958698+ 83 Linux
aptitude install iscsitarget iscsitarget-modules-`uname -r`
Voici un exemple de création de volume qui sera utilisé comme volume partagé. LVM c'est bien, c'est beau, c'est propre.
Créons donc un volume. La partition physique qui va contenir le volume LVM se nomme /dev/sda3.
Ajout du Physical Volume (pv) dans LVM :
pvcreate /dev/sda3
Création du Volume Group (vg) :
vgcreate vg0 /dev/sda3
Création du Logical Volume (lv) :
lvcreate -L50G -n storage_lun1 vg0
Le volume crée fait 50Gio et se nomme storage_lun1, situé dans le volume groupe vg0. Ce nom (storage_lun1) sera visible dans la suite de cet article.
nano /etc/default/iscsitarget
Modifier la ligne suivant comme ceci :
ISCSITARGET_ENABLE=true
Ensuite, nous aller créer notre premier "LUN" (pointeur vers un espace de stockage). Vous pouvez en créer autant que vous voulez, voici un exemple, ceci se déroule dans le fichier :
/etc/ietd.conf
Avec ceci chez moi :
Target iqn.2010-10.local.palatin:storage.lun1
IncomingUser
OutgoingUser
Lun 0 Path=/dev/vg0/storage_lun1,Type=fileio
Alias LUN1
#MaxConnections 6
La forme doit être iqn.[date-expiration].reverse-dns:whatever.nomlun
Je vous invite fortement à consulter ce qui est commenté de base dans ce fichier, c'est très instructif. Dans mon cas, je ne fais pas de limite sur le nom d'utilisateur. Lun 0 Path indique le chemin soit vers le disque physique, le volume LVM ou encore un fichier. Dans notre cas, ce LUN pointe donc vers le logical volume "storage_lun1" crée un peu avant. L'Alias est un moyen simple de s'y retrouver. Notez que l'on peut limiter le nombre de connexions simultannée sur ce LUN.
Il faut maintenant autoriser des clients iSCSI à se connecter à notre LUN. Cette étape se déroule ici :
/etc/initiators.allow
Il vous faut ajouter le nom de votre LUN, puis les IP autorisés à se connecter à celle-ci, ce qui donne dans l'exemple précédent :
iqn.2010-10.local.palatin:storage.lun1 192.168.0.2 192.168.0.3
J'autorise ici 192.168.0.2 et 192.168.0.3 à se connecter à la LUN1.
Let's roll !
/etc/init.d/iscsitarget start