5. Configuration du système initiator

Dans cette partie, on prépare le système auquel on a attribué le rôle initiator. Ce système est celui qui utilise le volume de stockage mis à disposition sur le réseau par le rôle target.

5.1. Sélection du paquet et lancement du service

Q11.

Comment identifier et installer le paquet correspondant au rôle initiator ?

En effectuant une recherche simple dans le catalogue des paquets disponibles, on obtient la liste des paquets dont le nom contient la chaîne de caractères iscsi.

# aptitude search iscsi
p   iscsitarget         - iSCSI Enterprise Target userland tools
p   iscsitarget-dkms    - iSCSI Enterprise Target kernel module source - dkms version
p   iscsitarget-source  - iSCSI Enterprise Target kernel module source
p   open-iscsi          - High performance, transport independent iSCSI implementation

On remarque que le paquet open-iscsi est le seul qui ne soit pas identifié comme appartenant à la catégorie target.

# aptitude install open-iscsi

Q12.

Comment lancer le service initiator et valider son fonctionnement ?

À partir de la liste des fichiers du paquet on peut identifier les éléments de démarrage et de configuration du service.

# dpkg -L open-iscsi
/.
/etc
/etc/init.d
/etc/init.d/open-iscsi
/etc/init.d/umountiscsi.sh
/etc/network
/etc/network/if-up.d
/etc/default
/etc/default/open-iscsi
/etc/iscsi
/etc/iscsi/iscsid.conf
/etc/iscsi/initiatorname.iscsi
/usr
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/iscsiadm.8.gz
/usr/share/man/man8/iscsid.8.gz
/usr/share/man/man8/iscsi_discovery.8.gz
/usr/share/man/man8/iscsistart.8.gz
/usr/share/man/man8/iscsi-iname.8.gz
/usr/share/initramfs-tools
/usr/share/initramfs-tools/hooks
/usr/share/initramfs-tools/hooks/iscsi
/usr/share/initramfs-tools/scripts
/usr/share/initramfs-tools/scripts/local-top
/usr/share/initramfs-tools/scripts/local-top/iscsi
/usr/share/doc
/usr/share/doc/open-iscsi
/usr/share/doc/open-iscsi/copyright
/usr/share/doc/open-iscsi/README.Debian.gz
/usr/share/doc/open-iscsi/README.gz
/usr/share/doc/open-iscsi/changelog.Debian.gz
/usr/share/doc/open-iscsi/changelog.gz
/usr/sbin
/usr/sbin/iscsi-iname
/usr/sbin/iscsid
/usr/sbin/iscsi_discovery
/usr/sbin/iscsistart
/usr/bin
/usr/bin/iscsiadm
/var
/var/lib
/var/lib/open-iscsi

Le lancement du service se fait de façon classique à partir de l'arborescence des scripts des niveaux de démarrage (runlevels).

# /etc/init.d/open-iscsi restart

La même opération avec systemd utilise la syntaxe suivante :

# systemctl restart open-iscsi

On peut ensuite consulter les journaux système pour valider l'initialisation du ou des démons.

# grep -i iscsi /var/log/syslog
Loading iSCSI transport class v2.0-870.
iscsi: registered transport (tcp)
iscsi: registered transport (iser)

On retrouve les informations correspondantes aux messages ci-dessus dans la liste des processus actifs.

# ps aux | grep -i iscsi
root      3479  0.0  0.0      0     0 ?        S<   16:28   0:00 [iscsi_eh]
root      3487  0.0  0.0   4980   472 ?        Ss   16:28   0:00 /usr/sbin/iscsid
root      3488  0.0  0.6   5480  3280 ?        S<Ls 16:28   0:00 /usr/sbin/iscsid

5.2. Tests de fonctionnement du service

Q13.

Quelle est la commande principale du rôle initiator qui permet de tester la connectivité iSCSI ?

Consulter la liste des fichiers du paquet open-iscsi.

En consultant la liste donnée ci-dessus, on ne relève qu'un seul outil exécutable : la commande iscsiadm.

Q14.

Quelles sont les options de découverte proposées avec cette commande ? Donner un exemple fournissant l'identifiant de l'unité de stockage réseau visible.

Consulter les pages de manuels de la commande identifiée dans la question précédente.

À partir du poste initator numéro 1, le seul volume de stockage visible est :

# iscsiadm -m discovery --type sendtargets --portal=192.0.2.12:3260
192.0.2.12:3260,1 iqn.2003-01.org.linux-iscsi.vm0.i686:sn.1b49d1997f22
[2001:db8:feb2:2:b8ad:ff:feca:fe00]:3260,1 iqn.2003-01.org.linux-iscsi.vm0.i686:sn.1b49d1997f22
192.0.2.12:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566
[2001:db8:feb2:2:b8ad:ff:feca:fe00]:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566

Q15.

Quel est l'identifiant à communiquer ou à paramétrer pour le système initiator soit reconnu côté système target ?

Rechercher les informations relatives au nommage iSCSI dans les outils et les fichiers fournis avec le paquet de gestion du rôle initiator.

Le filtrage de la liste des fichiers fournis avec le paquet open-iscsi donne le résultat suivant.

# dpkg -L open-iscsi | grep name
/etc/iscsi/initiatorname.iscsi
/usr/share/man/man8/iscsi-iname.8.gz
/usr/sbin/iscsi-iname
  • Le fichier /etc/iscsi/initiatorname.iscsi contient l'identifiant du système à communiquer au système target pour que celui-ci l'associe dans la rubrique des listes de contrôle d'accès : acls.

    Dans le contexte de ces travaux pratiques, on se contente de relever l'identifiant généré automatiquement lors de l'installation du paquet et de l'implanter dans la liste de contrôle d'accès créée avec targetcli sur le système target.

    Côté initiator, on lit l'identifiant iqn

    # grep -v ^# /etc/iscsi/initiatorname.iscsi 
    InitiatorName=iqn.1993-08.org.debian:01:9d11913c78ac

    Côté target, on créé la liste de contrôle d'accès qui associe l'unité logique SCSI au système initiator.

    /iscsi/iqn.20...18090566/tpg1> ls
    o- tpg1 ................................................................ [enabled]
      o- acls ................................................................ [1 ACL]
      | o- iqn.1993-08.org.debian:01:9d11913c78ac ..................... [1 Mapped LUN]
      |   o- mapped_lun0 ................................................. [lun0 (rw)]
      o- luns ................................................................ [1 LUN]
      | o- lun0 ....................................... [iblock/initiator1 (/dev/vdb)]
      o- portals ......................................................... [2 Portals]
        o- 192.0.2.12:3260 ....................................... [OK, iser disabled]
        o- 2001:db8:feb2:2:b8ad:ff:feca:fe00:3260 ................ [OK, iser disabled]
  • La commande iscsi-iname sert à générer un nouvel identifiant conforme au forat iqn. Elle permet de fournir un nouvel identifiant compatible avec la nomenclature de l'infrastructure de stockage d'un opérateur.

Q16.

Quelles sont les options de connexion proposées avec cette même commande ? Donner un exemple illustrant l'établissement d'une connexion.

Consulter les pages de manuels de la commande identifiée précédemment.

# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.target.i686:sn.1b49d1997f22 -p 192.0.2.12 -l
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.1b49d1997f22, portal: 192.0.2.12,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.1b49d1997f22, portal: 192.0.2.12,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals

Dans l'exemple ci-dessus, la connexion sans authentification a échoué faute d'autorisations côté rôle target. Comme nous sommes dans un contexte de travaux pratiques, il faut paramétrer deux attributs spécifiques : authentication=0 et demo_mode_write_protect=0.

# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566 -p 192.0.2.12 -l                              
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566, portal: 192.0.2.12,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566, portal: 192.0.2.12,3260] successful.

La connexion est maintenant établie et le volume de stockage réseau est disponible sous forme d'unité logique SCSI.

Q17.

Comment obtenir les caractéristiques de l'unité de stockage iSCSI utilisée ?

Consulter les journaux système.

Voici un extrait du fichier /var/log/syslog.

# egrep '(sd|scsi)' /var/log/syslog
initiator1 kernel: [18614.778860] scsi host8: iSCSI Initiator over TCP/IP
initiator1 kernel: [18615.035238] scsi 8:0:0:0: Direct-Access     LIO-ORG  IBLOCK           4.0  PQ: 0 ANSI: 5
initiator1 kernel: [18615.038358] scsi 8:0:0:0: Attached scsi generic sg1 type 0
initiator1 kernel: [18615.067546] sd 8:0:0:0: [sda] 150994944 512-byte logical blocks: (77.3 GB/72.0 GiB)
initiator1 kernel: [18615.070885] sd 8:0:0:0: [sda] Write Protect is off
initiator1 kernel: [18615.070893] sd 8:0:0:0: [sda] Mode Sense: 43 00 10 08
initiator1 kernel: [18615.071854] sd 8:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA
initiator1 kernel: [18615.117019]  sda:
initiator1 kernel: [18615.120840] sd 8:0:0:0: [sda] Attached SCSI disk
initiator1 iscsid: Connection3:0 to [target: iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566, \
                                 portal: 192.0.2.12,3260] through [iface: default] is operational now

Q18.

Donner la liste des entrées de périphériques de stockage créées par le démon udev ?

Lister les entrées de périphériques mode bloc de l'arborescence système.

Les fichiers de description des périphériques mode bloc sont tous situés dans le répertoire /dev/. En reprenant l'exemple ci-dessus, on obtient :

# ls -lA /dev/[v,s]d*
brw-rw---- 1 root disk   8,  0 sept.  1 14:38 /dev/sda
brw-rw---- 1 root disk 254,  0 sept.  1 11:28 /dev/vda
brw-rw---- 1 root disk 254,  1 sept.  1 11:28 /dev/vda1
brw-rw---- 1 root disk 254,  2 sept.  1 11:28 /dev/vda2
brw-rw---- 1 root disk 254,  5 sept.  1 11:28 /dev/vda5
brw-rw---- 1 root disk 254, 16 sept.  1 11:28 /dev/vdb

L'entrée /dev/sda correspond à l'unité de disque iSCSI. Le volume de stockage est donc bien vu de façon transparente comme un périphérique local au système accessible en mode bloc. Il entre bien dans la catégorie SAN ou Storage Area Network.

5.3. Réinitialisation de session iSCSI

Dans le cas d'une reconfiguration avec un autre hôte target ou dans le cas d'un dépannage, il est utile de pouvoir reprendre les paramètres du rôle initiator.

Q19.

Comment obtenir la liste des sessions actives avec le système target ?

Consulter les pages de manuels de la commande de configuration du rôle initiator : iscsiadm.

C'est le mode session, documenté dans les pages de manuels de la commande iscsiadm, qui permet de répondre à la question.

# iscsiadm -m session
tcp: [3] 192.0.2.12:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566 (non-flash)
tcp: [4] [2001:db8:feb2:2:b8ad:ff:feca:fe00]:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566 (non-flash)

Q20.

Comment libérer toutes les sessions actives depuis le système initiator ?

Consulter les pages de manuels de la commande de configuration du rôle initiator : iscsiadm.

Pour cette question, c'est le mode node qui nous intéresse.

# iscsiadm -m node -U all
Logging out of session [sid: 3, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566, portal: 2001:db8:feb2:2:b8ad:ff:feca:fe00,3260]
Logout of [sid: 3, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566, portal: 2001:db8:feb2:2:b8ad:ff:feca:fe00,3260] successful.

Q21.

Comment effacer les informations sur les systèmes target déjà découverts en cas de problème de configuration ?

Consulter les pages de manuels de la commande de configuration du rôle initiator : iscsiadm.

Toutes les manipulations sur les systèmes target découverts dépendent du mode discovery et l'opération à utiliser est delete.

# iscsiadm -m discovery -p 192.0.2.12 -o delete

Il suffit ensuite de reprendre la découverte décrite à la question Q : Q14.

5.4. Configuration système permanente

Une fois la connexion à la ressource iSCSI testée, on peut passer à la configuration système de façon à retrouver le volume de stockage après une réinitialisation du système initiator.

Q22.

Comment rendre la connexion à l'unité de stockage automatique lors de l'initialisation du système initiator ?

Rechercher dans la liste des fichiers du paquet open-iscsi les éléments relatifs à la configuration système. Éditer le fichier de configuration principal de façon à rendre automatique le lancement du service.

Au niveau système, les fichiers de configuration sont nécessairement dans le répertoire /etc/.

# dpkg -L open-iscsi | grep '/etc/'
/etc/default
/etc/default/open-iscsi
/etc/init.d
/etc/init.d/open-iscsi
/etc/init.d/umountiscsi.sh
/etc/iscsi
/etc/iscsi/iscsid.conf
/etc/iscsi/initiatorname.iscsi
/etc/network
/etc/network/if-up.d

Le fichier /etc/iscsi/iscsid.conf contient une directive dans la section Startup settings qui rend automatique l'accès à une ressource déjà enregistrée. Voici le contenu de cette section extraite du fichier de configuration.

#*****************
# Startup settings
#*****************

# To request that the iscsi initd scripts startup a session set to "automatic".
node.startup = automatic

Q23.

Comment connaître l'état et la liste d'une session iSCSI active ?

Consulter les pages de manuels de la commande de configuration du rôle initiator : iscsiadm.

Il existe un mode session dédié aux manipulations sur les sessions. La commande de test la plus simple est la suivante.

# iscsiadm -m session
tcp: [3] 192.0.2.12:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566 (non-flash)
tcp: [4] [2001:db8:feb2:2:b8ad:ff:feca:fe00]:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.637018090566 (non-flash)

La copie d'écran ci-dessus indique deux sessions actives. Si la liste est vide, il n'y a pas de session iSCSI en cours.

Il est possible d'obtenir davantage d'informations sur les paramètres de session en cours à l'aide de l'option -P suivie d'un numéro désignant le niveau de détail attendu. Par exemple, la commande iscsiadm -m session -P 3 affiche les paramètres sur les interfaces réseau utilisées, etc.

Q24.

Comment retrouver un point de montage unique du volume de stockage iSCSI après réinitialisation du système initiator ?

Créer un répertoire de montage et rechercher les options utiles dans les pages de manuels des commandes mount, systemd.mount et blkid. Éditer le fichier /etc/fstab en utilisant les options sélectionnées. Noter que le fichier fstab possède ses propres pages de manuels.

La création du répertoire destiné au montage du volume de stockage iSCSI ne pose pas de problème.

# mkdir mkdir /var/cache/iscsi-storage

La commande blkid permet d'obtenir l'identifiant unique du volume de stockage. Dans la copie d'écran ci-dessous, la partition /dev/sda1 correspond au résultat de l'établissement de la session iSCSI et l'identification du système de fichiers utilisé (btrfs) correspond au résultat du formatage de la partition. Ce ne sont que des exemples particuliers au contexte de la maquette utilisée.

# blkid /dev/sda1
/dev/sda1: UUID="11924824-00f1-4735-bd30-4bacaa3cbde0" UUID_SUB="09505fb1-d90c-4d05-b9e7-b4a0454a1150" \
           TYPE="btrfs" PARTLABEL="iSCSI-LUN0" PARTUUID="0da2be8f-ff7b-40d1-a720-15f08c456351"

Le choix des options à utiliser lors de l'édition du fichier /etc/fstab constitue le point délicat de cette question.

UUID=11924824-00f1-4735-bd30-4bacaa3cbde0       /var/cache/iscsi-storage        btrfs   noauto,x-systemd.automount,_netdev      0       2
  • Le choix de la valeur UUID se fait à partir du résultat de la commande blkid donné ci-dessus.

  • Le point de montage /var/cache/iscsi-storage a lui aussi été défini ci-dessus.

  • Le système de fichiers utilisé est, là encore, connu : btrfs.

Les trois paramètres suivants sont spécifiques au contexte iSCSI.

  • L'option noauto empêche le déclenchement du montage lors de la scrutation du fichier /etc/fstab. Les entrées présentes dans ce fichier doivent être disponibles très tôt dans le processus d'initialisation des services du système. Or, un volume de stockage réseau iSCSI n'est pas nécessairement disponible au moment du parcours des entrées en question.

  • L'option x-systemd.automount provoque la création d'une unité d'automontage (au sens systemd). Le principe de l'automontage veut que l'opération de montage soit effective au moment du parcours de l'arborescence /var/cache/iscsi-storage par un utilisateur ou une application. Autrement dit, tant que l'arborescence n'est pas utilisée, le montage n'est pas réalisé et l'initialisation du système initiator se poursuit normalement.

  • L'option _netdev spécifie que le système de fichiers réside sur un périphérique nécessitant des accès réseau. Il est donc inutile d'y accéder tant qu'aucune interface réseau n'est active.