5. Configurer le rôle Target

Dans cette partie, les manipulations préparent le système auquel on a attribué le rôle Target à l'aide de l'outil targetcli-fb.

5.1. Installer l'outil de paramétrage du rôle target

Q13.

Quel est le paquet qui contient l'outil de configuration du service dans l'espace utilisateur ?

Recherchez le mot clé targetcli dans la liste des paquets.

Installez le paquet après avoir identifié son nom exact.

sudo apt search --names-only ^target
targetcli-fb/testing,now 1:2.1.53-1.3 all [installé]
  Command shell for managing the Linux LIO kernel target
sudo apt install targetcli-fb

5.2. Configurer les ressources et le portail du rôle target

La technologie iSCSI dispose d'un schéma de nommage propre défini dans le document standard RFC3721 Internet Small Computer Systems Interface (iSCSI) Naming and Discovery. Le format retenu ici est baptisé iqn (iSCSI Qualified Name). Il s'agit d’une chaîne qui débute par iqn. suivie d'une date au format AAAA-MM, du nom de l'autorité qui a attribué le nom (le nom de domaine à l'envers), puis une autre chaîne unique qui identifie le nœud de stockage.

Dans un premier temps, on n'utilise aucun mécanisme d'authentification sachant que la configuration initiale se fait dans un contexte de travaux pratiques sur un réseau isolé.

Q14.

Quelles sont les étapes à suivre pour publier un volume de stockage sur le réseau à partir de l'interface de l'outil targetcli ?

Identifiez les deux entrées intéressantes à partir du menu principal de l'outil de configuration targetcli à l'aide de la commande ls.

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: 0]
  | o- fileio ........................... [Storage Objects: 0]
  | o- pscsi ............................ [Storage Objects: 0]
  | o- ramdisk .......................... [Storage Objects: 0]
  o- iscsi ...................................... [Targets: 0]
  o- loopback ................................... [Targets: 0]
  o- vhost ...................................... [Targets: 0]
  o- xen-pvscsi ................................. [Targets: 0]
/>

Les deux entrées du menu principal de l'outil qui nous intéressent sont :

  • La section backstores désigne les volumes de stockage à publier sur le réseau. Ici, les deux items intéressants sont fileio et block. Le premier permet de faire correspondre un fichier du système local au volume à publier. Le second fait correspondre une unité de disque physique au volume à publier.

  • La section iscsi sert à définir une «cible» (Target) comprenant au moins une unité logique (LUN en vocabulaire SCSI). C'est ici que l'on configure le point de contact réseau pour le système Initiator.

Partie stockage local : backstores

Q15.

Quelles sont les opérations à effectuer pour définir un disque physique comme volume de stockage ?

Consultez la documentation de la commande targetcli et repérez les options du menu block.

Créez un volume appelé blockdev0 à partir de l'identifiant de la seconde unité de disque qui a été ajoutée lors du lancement du système Target.

Recherchez dans les pages de manuels de la commande lsblk les options qui permettent d'afficher les identifiants uniques des périphériques de stockage mode bloc.

Comme la numérotation des périphériques de stockage peut évoluer en fonction des redémarrages, il est important de repérer l'identifiant unique du second disque avant de l'utiliser dans la configuration du rôle Target.

Commencez par utiliser la commande lsblk pour obtenir la liste simple des unités de disque et repérez le disque supplémentaire de 32GB.

lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sr0          11:0    1  1024M  0 rom
vda         254:0    0   366K  0 disk
nvme0n1     259:0    0   120G  0 disk
├─nvme0n1p1 259:2    0     3M  0 part
├─nvme0n1p2 259:3    0   124M  0 part /boot/efi
└─nvme0n1p3 259:4    0 119,9G  0 part /
nvme1n1     259:1    0    32G  0 disk

En utilisant le critère de taille de stockage, on voit dans la copie d'écran ci-dessus que le nom du disque supplémentaire est nvme1n1. Ce nom ainsi que la numérotation qui apparaissent ici sont susceptibles de changer en fonction des conditions d'initialisation du système. Il est vivement conseillé de rechercher l'identifiant unique du second disque.

Relancez la même commande en appliquant une liste d'options d'affichage qui ajoute l'identifiant d'unité de disque à la liste.

lsblk -o NAME,SIZE,ID
NAME          SIZE ID
sr0          1024M QEMU_DVD-ROM_QM00005
vda           366K
nvme0n1       120G QEMU_NVMe_Ctrl_feedcafe
├─nvme0n1p1     3M QEMU_NVMe_Ctrl_feedcafe-part1
├─nvme0n1p2   124M QEMU_NVMe_Ctrl_feedcafe-part2
└─nvme0n1p3 119,9G QEMU_NVMe_Ctrl_feedcafe-part3
nvme1n1        32G QEMU_NVMe_Ctrl_feedcafe1

Recherchez le chemin d'accès à cet identifiant dans l'arborescence /dev/disk/ du système Target.

find /dev/disk/ -name "*QEMU_NVMe_Ctrl_feedcafe1"
/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1

Affichez la liste complète des identifiants de périphériques disques et repérez celui qui correspond au second disque.

ls -l /dev/disk/by-id/

Ajoutez l'unité de disque supplémentaire dans le magasin (backstore) des ressources du rôle Target.

sudo targetcli
/> cd /backstores/block
/backstores/block> create blockdev0 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1
Created block storage object blockdev0 using /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1.
/backstores/block> ls
o- block ............................................................................. [Storage Objects: 1]
  o- blockdev0 ........... [/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1 (32.0GiB) write-thru deactivated]
    o- alua .............................................................................. [ALUA Groups: 1]
      o- default_tg_pt_gp .................................................. [ALUA state: Active/optimized]

Q16.

Quelles sont les opérations à effectuer pour définir un fichier comme volume de stockage ?

Consultez le site de référence et repérez les options du menu fileio.

Créez un volume appelé filevol0 associé au fichier /var/cache/filevol0.

/> cd /backstores/fileio
/backstores/fileio> create filevol0 /var/cache/filevol0 32G
Created fileio filevol0 with size 34359738368
/backstores/fileio> ls
o- fileio ......................................... [Storage Objects: 1]
  o- filevol0 ... [/var/cache/filevol0 (32.0GiB) write-back deactivated]
    o- alua ........................................... [ALUA Groups: 1]
      o- default_tg_pt_gp ............... [ALUA state: Active/optimized]

Partie portail iSCSI

Q17.

Quelles sont les opérations à effectuer pour définir un nouveau portail réseau iSCSI ?

Consultez le site de référence et repérez les options du menu iscsi. Attention ! Une cible iSCSI comprend plusieurs attributs.

  1. Nommage du portal au format iqnSi le nom du portail n'est pas fourni avec la commande create, il est généré automatiquement.

    cd /iscsi
    create
    Created target iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8.
    Created TPG 1.
    Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    /iscsi> ls
    o- iscsi ....................................................... [Targets: 1]
      o- iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8 ..... [TPGs: 1]
        o- tpg1 .......................................... [no-gen-acls, no-auth]
          o- acls ..................................................... [ACLs: 0]
          o- luns ..................................................... [LUNs: 0]
          o- portals ............................................... [Portals: 1]
            o- 0.0.0.0:3260 ................................................ [OK]
  2. Association entre unité logique et portail iSCSILes numéros d'unités logiques SCSI ou LUNs sont affectés automatiquement. Ici, l'unité lun0 correspond à la première association faite depuis le dépôt des volumes de stockage.

    cd /iscsi/iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8/tpg1/luns
    >create /backstores/block/blockdev0
    Created LUN 0.
    ls /iscsi/
    o- iscsi ....................................................................................... [Targets: 1]
      o- iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8 ..................................... [TPGs: 1]
        o- tpg1 .......................................................................... [no-gen-acls, no-auth]
          o- acls ..................................................................................... [ACLs: 0]
          o- luns ..................................................................................... [LUNs: 1]
          | o- lun0 ........ [block/blockdev0 (/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1) (default_tg_pt_gp)]
          o- portals ............................................................................... [Portals: 1]
            o- 0.0.0.0:3260 ................................................................................ [OK]
  3. Configuration réseau du portail iSCSIUn même portail peut être en écoute sur IPv4 et IPv6. Dans l'exemple ci-dessous on ouvre une configuration double pile en désignant la totalité des réseaux IPv6 après voir effacé l'entrée créée automatiquement lors de la création du portail.

    cd /iscsi/iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8/tpg1/portals/
    delete 0.0.0.0 3260
    Deleted network portal 0.0.0.0:3260
    create ::0
    Using default IP port 3260
    Created network portal ::0:3260
    ls
    o- portals ..................................................... [Portals: 1]
      o- [::0]:3260 ........................................................ [OK]

    On peut sortir de l'outil targetcli pour vérifier que le service réseau est bien accessible. La configuration est sauvegardée automatiquement.

    exit
    Global pref auto_save_on_exit=true
    Last 10 configs saved in /etc/rtslib-fb-target/backup/.
    Configuration saved to /etc/rtslib-fb-target/saveconfig.json

Q18.

Comment vérifier la disponibilité du portail réseau iSCSI ?

À l'aide des commandes ss ou lsof, relever le numéro de port de la couche transport relatif au protocole iSCSI.

Sur le système Initiator, lancer l'opération de découverte des volumes du portail iSCSI.

Voici un exemple d'exécution de la commande ss depuis le système Target.

ss -tan '( sport = :3260 )'
State       Recv-Q  Send-Q            Local Address:Port        Peer Address:Port         Process
LISTEN      0       256                           *:3260                   *:*

Maintenant que le service est disponible, utilisez la fonction de découverte depuis le système Initiator.

Vous devez utiliser l'adresse IP de votre système Target.

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.x8664:sn.5fc599ddeef8

Q19.

Est-il possible d'ouvrir une session iSCSI à ce stade de la configuration ?

Depuis votre système Initiator, lancez l'opération d'ouverture de session.

Même si le service réseau et la fonction découverte sont ouverts, le volume de stockage réseau n'est pas encore accessible. L'ouverture de session depuis l'hôte Initiator échoue et on obtient le message suivant.

La réponse à la question est donc non.

Vous devez utiliser l'identifiant IQN de votre système Target. Il est affiché dans les résultats de la commande découverte à la question précédente.

sudo iscsiadm -m node \
        -T iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8 \
        -p [2001:678:3fc:171:baad:caff:fefe:5] \
        -l
iscsiadm: Could not login to
  [iface: default, target: iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8, portal: 2001:678:3fc:171:baad:caff:fefe:5,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals

Côté hôte Target, les journaux système font apparaître un message du type suivant.

journalctl -n 100 --grep scsi
target kernel: iSCSI Login negotiation failed.
target kernel: iSCSI Initiator Node: iqn.1993-08.org.debian:01:733ea42cb56 is not authorized to access iSCSI target portal group: 1.

Profitez de ces messages pour relever l'identifiant IQN de votre système Initiator. Dans l'exemple ci-dessus, on relève la valeur iqn.1993-08.org.debian:01:733ea42cb56.

Q20.

Comment autoriser l'accès au volume de stockage depuis l'hôte Initiator sans authentification ?

Recherchez les paramètres relatifs à la rubrique acls de l'outil targetcli.

Pour autoriser l'ouverture d'une session iSCSI, créez une liste de contrôle d'accès (ACL) avec l'identité du système Initiator.

Depuis le système Initiator, affichez l'identité iSCSI définie lors de l'installation du paquet open-iscsi.

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

Vérifiez que l'identifiant IQN du rôle Initiator correspond bien à la valeur relevée dans la question précédente.

Depuis le système Target, créez une nouvelle entrée dans la rubrique acls du portail iSCSI via l'outil targetcli.

sudo targetcli
cd /iscsi/iqn.2003-01.org.linux-iscsi.target.x8664:sn.5fc599ddeef8/tpg1/acls
create iqn.1993-08.org.debian:01:733ea42cb56
Created Node ACL for iqn.1993-08.org.debian:01:733ea42cb56
Created mapped LUN 0.
exit

Enfin, reprenez la commande d'ouverture de session sur le système Initiator. Cette nouvelle tentative d'ouverture de session doit être un succès.

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

À partir de cette étape, le système Initiator dispose d'une nouvelle unité de stockage mode bloc.