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.

6.1. Installation de l'outil de paramétrage du rôle target

Q25.

Quel est le paquet qui contient les éléments 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.

# aptitude search targetcli
i   targetcli          - administration tool for managing LIO core target

Q26.

Comment installer le paquet identifié à la question précédente avec le minimum de dépendances (ou sans les paquets recommandés associés) ?

Consulter les pages de manuels de la commande aptitude et rechercher l'option qui évite l'installation des paquets recommandés.

L'option recherchée est -R ou --without-recommends.

# aptitude install -R targetcli
Les NOUVEAUX paquets suivants vont être installés :     
  python-configobj{a} python-configshell{a} python-epydoc{a} python-ipaddr{a}
  python-netifaces{a} python-prettytable{a} python-pyparsing{a}
  python-rtslib{a} python-simpleparse{a} python-simpleparse-mxtexttools{a}
  python-six{a} python-urwid{a} targetcli 
Les paquets suivants sont RECOMMANDÉS mais ne seront pas installés :
  graphviz python-docutils python-tk 
0 paquets mis à jour, 13 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 1 964 ko d'archives. Après dépaquetage,
8 051 ko seront utilisés.
Voulez-vous continuer ? [Y/n/?]

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.

On a choisi de n'utiliser aucun mécanisme d'authentification sachant que la configuration se fait dans un contexte de travaux pratiques et non d'exploitation sur un réseau réel.

Q27.

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.

La copie d'écran ci-dessous liste les opérations disponibles.

# targetcli
targetcli 3.0.pre4.1~ga55d018 (rtslib 3.0.pre4.1~g1b33ceb)
Copyright (c) 2011-2014 by Datera, Inc.
All rights reserved.

/> ls
o- / ............................................................. [...]
  o- backstores .................................................. [...]
  | o- fileio ....................................... [0 Storage Object]
  | o- iblock ....................................... [0 Storage Object]
  | o- pscsi ........................................ [0 Storage Object]
  | o- rd_mcp ....................................... [0 Storage Object]
  o- ib_srpt ............................................... [0 Targets]
  o- iscsi ................................................. [0 Targets]
  o- loopback .............................................. [0 Targets]
  o- qla2xxx ............................................... [0 Targets]
  o- tcm_fc ................................................ [0 Targets]
  o- vhost ................................................. [0 Targets]
  • La section backstores désigne les volumes de stockage à publier sur le réseau. Ici, les deux items intéressants sont fileio et iblock. 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) et un point de contact réseau.

Partie stockage local backstores

Q28.

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

Il faut consulter le site de référence et repérer les options du menu iblock.

La création du volume se fait à l'aide de la commande ci-dessous.

/backstores/iblock> create initiator1 /dev/vdb
Created iblock storage object initiator1 using /dev/vdb.
/backstores/iblock> ls /
o- / ................................................... [...]
  o- backstores ........................................ [...]
  | o- fileio ............................. [0 Storage Object]
  | o- iblock ............................. [1 Storage Object]
  | | o- initiator1 ................... [/dev/vdb, not in use]
  | o- pscsi .............................. [0 Storage Object]
  | o- rd_mcp ............................. [0 Storage Object]
  o- ib_srpt ..................................... [0 Targets]
  o- iscsi ....................................... [0 Targets]
  o- loopback .................................... [0 Targets]
  o- qla2xxx ..................................... [0 Targets]
  o- tcm_fc ...................................... [0 Targets]
  o- vhost ....................................... [0 Targets]

Q29.

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

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

La création du volume se fait à l'aide de la commande ci-dessous.

/backstores/fileio> create storage_file /var/lib/iscsi-target/storage-for-myinitiator 32G
Using buffered mode.
Created fileio storage_file.
/backstores/fileio> ls
o- fileio .............................................................. [2 Storage Objects]
  o- initiator2 ................. [32.0G, /var/lib/iscsi-target/initiator2.disk, not in use]
  o- storage_file ....... [32.0G, /var/lib/iscsi-target/storage-for-myinitiator, not in use]

Dans l'exemple ci-dessus on a créé un nouvel objet dans le dépôt des volumes de stockage appelé storage_file. Dans la même commande on lui a attribué une capacité de 32Go. On a aussi précisé le chemin d'accès à ce fichier.

Il faut noter que l'espace effectivement occupé par le fichier /var/lib/iscsi-target/storage-for-myinitiator correspond à celui utilisé côté initiator. La commande de l'exemple ci-dessus a provoqué la création d'un fichier vide.

Partie iSCSI

Q30.

Quelles sont les opérations à effectuer pour définir une nouvelle cible iSCSI ?

Il faut consulter le site de référence et repérer les options du menu iscsi. Attention ! Une cible iSCSI comprend plusieurs attributs.

  1. Nommage de la cible au format iqnSi le nom de la cible 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.i686:sn.bf156efd0f2e.
    Selected TPG Tag 1.
    Created TPG 1.
    

    C'est après cette première opération que les attributs apparaissent pour la nouvelle cible.

    /iscsi> ls
    o- iscsi .................................................... [1 Target]
      o- iqn.2003-01.org.linux-iscsi.target.i686:sn.bf156efd0f2e ...... [1 TPG]
        o- tpg1 .................................................. [enabled]
          o- acls ................................................. [0 ACLs]
          o- luns ................................................. [0 LUNs]
          o- portals ........................................... [0 Portals]
    
  2. Affectation de l'unité logique à la cible 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.i686:sn.bf156efd0f2e/tpg1/
    /iscsi/iqn.20...6efd0f2e/tpg1> luns/ create /backstores/iblock/initiator1
    Selected LUN 0.
    Created LUN 0.
    /iscsi/iqn.20...6efd0f2e/tpg1> ls
    o- tpg1 ............................................ [enabled]
      o- acls ........................................... [0 ACLs]
      o- luns ............................................ [1 LUN]
      | o- lun0 ................... [iblock/initiator1 (/dev/vdb)]
      o- portals ..................................... [0 Portals]
    
  3. Ouverture du point de contact réseau pour cette cible iSCSIUn même point de contact peut être en écoute sur plusieurs adresses IP. Dans l'exemple ci-dessous on ouvre une configuration double pile IPv4 et IPv6.

    /iscsi/iqn.20...6efd0f2e/tpg1> portals/ create 192.0.2.12 3260
    Created network portal 192.0.2.12:3260.
    /iscsi/iqn.20...6efd0f2e/tpg1> portals/ create 2001:db8:feb2:2:b8ad:ff:feca:fe00 3260
    Created network portal 2001:db8:feb2:2:b8ad:ff:feca:fe00:3260.
    /iscsi/iqn.20.../tpg1/portals> ls
    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]
    

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

    # ss -tan 
    State       Recv-Q Send-Q                        Local Address:Port  Peer Address:Port              
    LISTEN      0      128                                       *:22               *:*                  
    LISTEN      0      20                                127.0.0.1:25               *:*                  
    LISTEN      0      256                              192.0.2.12:3260             *:*                  
    LISTEN      0      128                                      :::22              :::*                  
    LISTEN      0      20                                      ::1:25              :::*                  
    LISTEN      0      256       2001:db8:feb2:2:b8ad:ff:feca:fe00:3260            :::*
    

    Enfin, on peut aussi vérifier que le service est ouvert côté initiator à l'aide de la fonction de découverte.

    root@initiator1:~# iscsiadm -m discovery --type sendtargets --portal=192.0.2.12:3260
    192.0.2.12:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.bf156efd0f2e
    [2001:db8:feb2:2:b8ad:ff:feca:fe00]:3260,1 iqn.2003-01.org.linux-iscsi.target.i686:sn.bf156efd0f2e
    
  4. Création d'une liste de contrôle d'accès. 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. La connexion depuis l'hôte initiator échoue et on obtient le message suivant.

    root@initiator1:~# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.target.i686:sn.bf156efd0f2e -p 192.0.2.12 -l
    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.bf156efd0f2e, portal: 192.0.2.12,3260] (multiple)
    iscsiadm: Could not login to [iface: default, target: iqn.2003-01.org.linux-iscsi.target.i686:sn.bf156efd0f2e, 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
    

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

    iSCSI Initiator Node: iqn.1993-08.org.debian:01:9d11913c78ac is not authorized to access iSCSI target portal group: 1.
    iSCSI Login negotiation failed.
    

    Il est donc necessaire d'autoriser l'accès depuis l'hôte initiator. Dans l'outil targetcli, on configure l'attribut acls de la cible iSCSI.

    /iscsi/iqn.20...6efd0f2e/tpg1> acls/ create iqn.1993-08.org.debian:01:9d11913c78ac
    Created Node ACL for iqn.1993-08.org.debian:01:9d11913c78ac
    Created mapped LUN 0.
    /iscsi/iqn.20...6efd0f2e/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]
    

    Ce n'est pas terminé ! Par défaut, une cible iSCSI n'est accessible qu'après authentification. Il est donc nécessaire de désactiver cette authentification pour tester l'accès depuis l'hôte initiator.

    /iscsi/iqn.20...6efd0f2e/tpg1> set attribute authentication=0 demo_mode_write_protect=0
    Parameter authentication is now '0'.
    Parameter demo_mode_write_protect is now '0'.
    

    Finalement, le volume de stockage est mis à disposition de l'hôte initiator.

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