Lerm-IT

Blog traitant de technologies informatiques. Logiciel libre, AdminSys, DevOps et GNU/Linux !

05 Apr 2011

[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 !