4. Configurer le 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.

4.1. Sélectionner le paquet et lancer le service

Q13.

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.

$ sudo apt install open-iscsi

Q14.

Comment connaître l'état du service initiator et valider son fonctionnement ?

À partir de la liste des services actifs, on repère les message relatifs au rôle initiator.

$ systemctl status open-iscsi.service
○ open-iscsi.service - Login to default iSCSI targets
     Loaded: loaded (/usr/lib/systemd/system/open-iscsi.service; enabled; preset: enabled)
     Active: inactive (dead)
  Condition: start condition unmet at Fri 2024-08-30 10:02:44 CEST; 7s ago
             ├─ ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
             └─ ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
       Docs: man:iscsiadm(8)
             man:iscsid(8)

août 30 09:57:40 initiator systemd[1]: open-iscsi.service - Login to default iSCSI targets was skipped because no trigger condition checks were met.
août 30 10:02:44 initiator systemd[1]: open-iscsi.service - Login to default iSCSI targets was skipped because no trigger condition checks were met.

Le lancement du service se fait de façon classique avec systemd.

$ sudo systemctl restart open-iscsi
[Avertissement] Avertissement

L'état actuel de la configuration montre que le service est lancé sans aucune session iSCSI active. Pour l'instant aucun système avec le rôle target n'a été contacté.

4.2. Accéder aux volumes de stockage réseau iSCSI

Q15.

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.

Q16.

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 système initator, on liste le ou les volume(s) de stockage visible sur le réseau local :

Si le portail du système avec le rôle target est configuré pour être accessible via IPv6, on peut utiliser la commande suivante en adaptant l'adresse au contexte :

$ sudo iscsiadm -m discovery \
        --type sendtargets \
        --portal=[2001:678:3fc:171:baad:caff:fefe:5]
[2001:678:3fc:171:baad:caff:fefe:5]:3260,1 iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660
$ sudo iscsiadm -m discovery \
        --type sendtargets \
        --portal=10.0.20.131
10.0.20.131:3260,1 iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660

Dans les deux copies d'écran ci-dessus, l'identifiant du volume de stockage réseau visible est iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660.

Malheureusement, les adresses de lien local IPv6 ne sont pas utilisables au moment de la rédaction de ces lignes.

Q17.

Comment obtenir la liste des portails iSCSI déjà connus du système initiator ?

Rechercher dans les pages de manuels de la commande iscsiadm.

C'est le mode node qui permet d'obtenir l'information demandée.

$ sudo iscsiadm -m node
[2001:678:3fc:171:baad:caff:fefe:5]:3260,1 iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660

Q18.

Comment effacer la liste des portails iSCSI déjà connus du système initiator ?

Rechercher dans les pages de manuels de la commande iscsiadm.

C'est le mode node qui permet d'obtenir l'information demandée.

$ sudo iscsiadm -m node --op=delete
[Avertissement] Avertissement

Attention ! Si la commande ci-dessus est exécutée, il faut reprendre les opérations de découverte décrites à la question Q : Q16 pour compléter la liste des portails iSCSI connus.

Q19.

Quel est l'identifiant à communiquer ou à paramétrer pour que 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 répertoire /etc/iscsi/ contient les paramètres de configuration du service.

$ ls -p /etc/iscsi/
initiatorname.iscsi  iscsid.conf  nodes/  send_targets/

On consulte ou on édite ce fichier de façon à communiquer l'identité du système initiator au système target pour configurer le contrôle d'accès.

Par exemple, l'identifiant unique donnée dans la copie d'écran ci-dessous est à transmettre au système target.

$ sudo grep -v ^# /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1993-08.org.debian:01:2cc8dac75cec

Côté target, on obtient le résultat suivant après avoir créé la liste de contrôle d'accès au volume réseau via l'interface targetcli.

sudo targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls
o- / ....................................................................... [...]
  o- backstores ............................................................ [...]
  | o- block ................................................ [Storage Objects: 1]
  | | o- blockvol0 ......................./dev/vdb (32.0GiB) write-thru activated]
  | |   o- alua ................................................. [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ..................... [ALUA state: Active/optimized]
  | o- fileio ............................................... [Storage Objects: 1]
  | | o- filevol0 ........................levol0 (32.0GiB) write-back deactivated]
  | |   o- alua ................................................. [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ..................... [ALUA state: Active/optimized]
  | o- pscsi ................................................ [Storage Objects: 0]
  | o- ramdisk .............................................. [Storage Objects: 0]
  o- iscsi .......................................................... [Targets: 1]
  | o- iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660 ..... [TPGs: 1]
  |   o- tpg1 ............................................. [no-gen-acls, no-auth]
  |     o- acls ........................................................ [ACLs: 1]
  |     | o- iqn.1993-08.org.debian:01:2cc8dac75cec ............. [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ........................... [lun0 block/blockvol0 (rw)]
  |     o- luns ........................................................ [LUNs: 1]
  |     | o- lun0 ................ [block/blockvol0 (/dev/vdb) (default_tg_pt_gp)]
  |     o- portals .................................................. [Portals: 1]
  |       o- [::0]:3260 ..................................................... [OK]
  o- loopback ....................................................... [Targets: 0]
  o- vhost .......................................................... [Targets: 0]
  o- xen-pvscsi ..................................................... [Targets: 0]

La copie d'écran ci-dessus montre l'association des identités iSCSI des systèmes initiator et target.

Q20.

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.

$ sudo iscsiadm -m node \
        -T iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660 \
        -p [2001:678:3fc:171:baad:caff:fefe:5] \
        -l
Logging in to [iface: default,
                target: iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660,
                portal: 2001:678:3fc:171:baad:caff:fefe:5,3260]
Login to [iface: default,
                target: iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660,
                portal: 2001:678:3fc:171:baad:caff:fefe:5,3260] successful.

Dans l'exemple ci-dessus, la connexion sans authentification est un succès dans la mesure où les paramètres d'authentification et de protection en écriture ont été forcés à zéro sur la configuration du système target. Voir la section intitulée « Partie portail iSCSI »

Q21.

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

Revoir la question Quelle est la commande apparentée à ls qui permet d'obtenir la liste des périphériques de stockage en mode bloc ? et/ou consulter les journaux système.

Le résultat de la commande lsblk montre l'arrivée d'un nouveau volume de stockage.

$ sudo lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   32G  0 disk
└─sda1   8:1    0   32G  0 part
sr0     11:0    1 1024M  0 rom
vda    254:0    0   72G  0 disk
├─vda1 254:1    0   68G  0 part /
├─vda2 254:2    0    1K  0 part
└─vda5 254:5    0    4G  0 part [SWAP]
vdb    254:16   0   32G  0 disk

Voici un extrait des messages de journalisation du système.

$ journalctl -n 20 -f --grep '(sd|scsi)'
initiator kernel: scsi host7: iSCSI Initiator over TCP/IP
initiator kernel: scsi 7:0:0:0: Direct-Access     LIO-ORG  sda              4.0  PQ: 0 ANSI: 6
initiator kernel: sd 7:0:0:0: Attached scsi generic sg1 type 0
initiator kernel: sd 7:0:0:0: [sdb] 67108864 512-byte logical blocks: (34.4 GB/32.0 GiB)
initiator kernel: sd 7:0:0:0: [sdb] Write Protect is off
initiator kernel: sd 7:0:0:0: [sdb] Mode Sense: 43 00 10 08
initiator kernel: sd 7:0:0:0: [sdb] Write cache: enabled, read cache: enabled, supports DPO and FUA
initiator kernel: sd 7:0:0:0: [sdb] Preferred minimum I/O size 512 bytes
initiator kernel: sd 7:0:0:0: [sdb] Optimal transfer size 33550336 bytes
initiator kernel: sd 7:0:0:0: [sdb] Attached SCSI disk
initiator iscsid[620]: Connection1:0 to [target: iqn.2003-01.org.linux-iscsi.target.x8664:sn.368ea864a0dd, portal: 2001:678:3fc:100::91,3260] through [iface: default] is operational now

Q22.

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 22 août  19:17 /dev/sda
brw-rw---- 1 root disk   8,  1 22 août  19:17 /dev/sda1
brw-rw---- 1 root disk 254,  0 22 août  19:13 /dev/vda
brw-rw---- 1 root disk 254,  1 22 août  19:13 /dev/vda1
brw-rw---- 1 root disk 254,  2 22 août  19:13 /dev/vda2
brw-rw---- 1 root disk 254,  5 22 août  19:13 /dev/vda5
brw-rw---- 1 root disk 254, 16 22 août  19:13 /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 du système accessible en mode bloc. Il entre bien dans la catégorie SAN ou Storage Area Network.

4.3. Réinitialiser la 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.

Q23.

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.

$ sudo iscsiadm -m session
tcp: [2] [2001:678:3fc:171:baad:caff:fefe:5]:3260,1
        iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660 (non-flash)

Q24.

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.

$ sudo iscsiadm -m node -U all
Logging out of session [sid: 2, target:
        iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660,
        portal: 2001:678:3fc:171:baad:caff:fefe:5,3260]
Logout of [sid: 2, target:
        iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660,
        portal: 2001:678:3fc:171:baad:caff:fefe:5,3260] successful.

Bien sûr, il faut relancer une nouvelle session iSCSI pour traiter les manipulations suivantes.

4.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.

Q25.

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/iscsid
/etc/init.d/open-iscsi
/etc/iscsi
/etc/iscsi/iscsid.conf

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
[Avertissement] Avertissement

Attention ! Après édition du fichier /etc/iscsi/iscsid.conf, la valeur automatic n'est appliquée que pour les nouvelles opérations de découverte et d'ouversture de session.

Pour rendre ce l'ouverture de session automatique au démarrage du système, il faut clore les sessions en cours et effacer les informations de découverte.

Voici un exemple qui donne la séquence des opérations.

$ sudo iscsiadm -m node -U all
$ sudo iscsiadm -m node --op=delete
$ sudo iscsiadm -m discovery \
        --type sendtargets \
        --portal=[2001:678:3fc:171:baad:caff:fefe:5]
$ sudo iscsiadm -m node \
        -T iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660 \
        -p [2001:678:3fc:171:baad:caff:fefe:5] \
        -l
$ sudo grep \\.startup /etc/iscsi/nodes/iqn.2003-01.org.linux-iscsi.target-vm.x8664\:sn.bc4899490660/2001\:678\:3fc\:171\:baad\:caff\:fefe\:5\,3260\,1/default
node.startup = automatic
node.conn[0].startup = manual

Q26.

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.

$ sudo iscsiadm -m session
tcp: [1] [2001:678:3fc:171:baad:caff:fefe:5]:3260,1 \
        iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660 (non-flash)

Si la liste est vide, il n'y a pas de session iSCSI active 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.

La commande iscsiadm -m session -P 3 affiche les paramètres sur les interfaces réseau utilisées, etc.

Q27.

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.

$ sudo mkdir /var/cache/iscsi-vol0

C'est à cette étape que les question de la Section 3, « Préparer une unité de stockage » sont utiles.

Après partitionnement de l'unité de stockage iSCSI /dev/sda et formatage de la partition /dev/sda1, on peut relever l'identifiant unique de ce volume avec la commande blkid. Voici un exemple.

$ sudo lsblk /dev/sda1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda1   8:1    0  32G  0 part
$ sudo blkid /dev/sda1
/dev/sda1: UUID="4df99b8b-0021-44bd-b751-bd180f018200"
        UUID_SUB="0f2453f9-61b5-49d2-93ff-4aafd3ca0969"
        BLOCK_SIZE="4096"
        TYPE="btrfs"
        PARTLABEL="vol0"
        PARTUUID="fb154fb0-afc4-4a89-8e67-44b9d5fa8a05"

Q28.

Quelles sont les informations à insérer dans le fichier /etc/fstab pour assurer le montage du volume de stockage à chaque initialisation du système ?

Consulter les pages de manuels de la commande mount ainsi que la documentation du paquet open-iscsi.

Le choix des options à utiliser lors de l'édition du fichier /etc/fstab constitue un point très délicat.

echo "UUID=4df99b8b-0021-44bd-b751-bd180f018200 \
 /var/cache/iscsi-vol0 \
 btrfs \
 _netdev \
 0   2" | sudo tee -a /etc/fstab
  • 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-vol0 a lui aussi été défini ci-dessus.

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

  • 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.