6. Configuration du 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.

6.1. Installation de 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

6.2. Configuration 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 définir un disque physique comme volume de stockage ?

Consultez le site de référence et repérer les options du menu block.

Créez un volume appelé blockvol0 associé à l'unité de stockage locale au système /dev/nvme1n1.

/> cd /backstores/block
/backstores/block> create blockvol0 /dev/nvme1n1
Created block storage object blockvol0 using /dev/nvme1n1.
/backstores/block> ls
o- block ........................................... [Storage Objects: 1]
  o- blockvol0 .......... [/dev/nvme1n1 (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érer 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érer 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/blockvol0
    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/blockvol0 (/dev/nvme1n1) (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 authentication ?

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 en mode bloc.