6. Configuration du système target

Dans cette partie, on prépare 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

Q29.

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

On consulte le site de référence à l'adresse Linux-IO : the Linux SCSI Target wiki pour identifier l'outil principal et on effectue ensuite une recherche dans la liste des paquets.

$ apt search ^targetcli
En train de trier... Fait
Recherche en texte intégral... Fait
targetcli-fb/testing,now 1:2.1.53-1 all
  Command shell for managing the Linux LIO kernel target

Q30.

Comment installer le paquet identifié à la question précédente ?

$ 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é.

Q31.

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

Ici aussi, il faut consulter le site de référence à l'adresse Linux-IO : the Linux SCSI Target wiki pour identifier les différentes étapes.

On commence par identifier les deux entrées intéressantes à partir du menu prinicpal de l'outil de configuration 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: 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]
/>
  • 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 fait 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) qui comprend 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

Q32.

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

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

On créé un volume appelé blockvol0 associé à l'unité de stockage locale au système /dev/vdb.

/> cd /backstores/block
/backstores/block> create blockvol0 /dev/vdb
Created block storage object blockvol0 using /dev/vdb.
/backstores/block> ls
o- block .......................................... [Storage Objects: 1]
  o- blockvol0 ............. [/dev/vdb (32.0GiB) write-thru deactivated]
    o- alua ........................................... [ALUA Groups: 1]
      o- default_tg_pt_gp ............... [ALUA state: Active/optimized]

Q33.

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

Consulter le site de référence et repérer les options du menu fileio.

On créé 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

Q34.

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

Consulter 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
    /iscsi> create
    Created target iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660.
    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-vm.x8664:sn.bc4899490660 . [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.

    /iscsi> cd iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660/tpg1/luns
    /iscsi/iqn.20...660/tpg1/luns> create /backstores/block/blockvol0
    Created LUN 0.
    /iscsi/iqn.20...660/tpg1/luns> ls
    o- luns .......................................................... [LUNs: 1]
      o- lun0 .................. [block/blockvol0 (/dev/vdb) (default_tg_pt_gp)]
  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.

    /iscsi/iqn.20...660/tpg1/luns> cd ../portals/
    /iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
    Deleted network portal 0.0.0.0:3260
    /iscsi/iqn.20.../tpg1/portals> create ::0
    Using default IP port 3260
    Created network portal ::0:3260.
    /iscsi/iqn.20.../tpg1/portals> 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.

    /iscsi/iqn.20.../tpg1/portals> exit
    Global pref auto_save_on_exit=true
    Configuration saved to /etc/rtslib-fb-target/saveconfig.json
    $

Q35.

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                   *:*

Sachant que le service est disponible, on peut utiliser la fonction de découverte sur le système initiator.

$ 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

Q36.

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

Sur le système initiator, lancer 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.

$ 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]
iscsiadm: Could not 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].
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.

$ grep -i iscsi /var/log/syslog
iSCSI Initiator Node: iqn.1993-08.org.debian:01:2cc8dac75cec is not authorized to access iSCSI target portal group: 1.
iSCSI Login negotiation failed.

Q37.

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

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

Pour que le portail iSCSI accepte l'ouverture d'un session, il est nécessaire de créer une liset de contrôle d'accès avec l'identité du système initiator.

Côté initiator, on affiche 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:2cc8dac75cec

Côte target, on créé une nouvelle entrée dans la rubrique acls du portail iSCSI via l'outil targetcli.

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

/> cd iscsi/iqn.2003-01.org.linux-iscsi.target-vm.x8664:sn.bc4899490660/tpg1/acls
/iscsi/iqn.20...660/tpg1/acls> create iqn.1993-08.org.debian:01:2cc8dac75cec
Created Node ACL for iqn.1993-08.org.debian:01:2cc8dac75cec
Created mapped LUN 0.
/iscsi/iqn.20...660/tpg1/acls>

Enfin, en reprenant la commande d'ouverture de session sur le système initiator, l'opération est un succès.

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

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