Portail / Linux(Sommaire)

Création d'une cible iSCSI.

Mise à jour du 02/05/2024.

La lecture de cet article suppose connue la technologie iSCSI. Cette dernière permet à des machines (initiateurs) d'accéder à des disques distants (cibles) comme s'ils faisaient partie des disques locaux. La communication entre "cible" et "initiateur" répond à un protocole de type bloc. La limite d'emploi d'une cible iSCSI est le partage de cette cible. Contrairement à Samba ou NFS, iSCSI ne gère pas les conflits d'accès simultanés. iSCSI est toutefois indiqué à chaque fois que l'on souhaite utiliser un disque distant au sein d'un système de fichier local. Par exemple, il est intéressant de disposer d'un disque distant bénéficiant de la protection RAID d'un NAS ou d'un SAN afin de protéger des données "sensibles". En outre, dans la cas de plate-formes hétérogènes (Linux - Windows par exemple) le partage de fichiers peut utiliser 3 protocoles :

  1. SMB (Samba Linux) accès de type fichier protégé par mot de passe.
  2. NFS accès de type fichier protégé par le couple UID/GID du compte propriétéaire du partage. A noter que Windows dispose d'un client fort peu pratique en sûre en milieu hétérogène.
  3. iSCSI accès de type bloc issu du monde Windows.

Pour ésumer dans un environnement Linux/Windows, le partage simultané de fichiers par plusieurs utilisateurs se fait via SMB tandis que l'accès à un disque distant non partagé se fait par iSCSI.

Procédure.

  1. Installation du paquet Debian de création des cibles : apt install tgt.
  2. Création d'un répertoire dédié aux cibles : mkdir -p /var/lib/iscsi(vous pouvez bien entendu choisir n'importe quel autre répertoire).
  3. Création du disque distant de 10 gio : dd if=/dev/zero of=/var/lib/iscsi/disk01.img count=0 bs=1 seek=10G. Notez que le système indique une taille de 10 gio (commande ls par exemple) mais que ce n'est pas la place réelle prise sur le système de fichier local.
  4. Création du fichier de configuration de la cible : nano /etc/tgt/conf.d/target01.conf.
  5. Définition de la cible en inscrivant dans le fichier :
    # creation de la cible
    # si vous définissez d'autres cibles, ajoutez <target>-</target> et définissez les de la même manière 
    # avec la règle de dénomination suivante :
    # [ iqn.(year)-(month).(inverse of domain name):(n'importe quel nom que vous aimez) ]
    <target iqn.2024-05.com.example:nas.target01>
        # indication du périphérique qui sert de cible iSCSI
        backing-store /var/lib/iscsi/disk01.img
        # IQN (identifiant) à utiliser par l'initiateur iSCSI pour ce connecter à la cible
        initiator-name iqn.2024-05.com.example:node01.initiator
        # information d'authentification (remplacez 'username' et 'password' par ce que vous voulez)
        incominguser iuser xxxxxxxxxxxx
    </target>
    Vous obtenuez quelqeue chose du type :
    Target 1: iqn.2024-05.com.example:nas.target01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10737 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rdwr
            Backing store path: /var/lib/iscsi/disk01.img
            Backing store flags: 
    Account information:
        iuser
    ACL information:
        ALL
        iqn.2024-05.com.example:node01.initiator
  6. Sauvegardez le contenu du fichier et fermez l'éditeur.
  7. Redémarrez le serveur tgt : systemctl restart tgt.
  8. Vérifiez la description de la cible : tgtadm --mode target --op show
  9. Vérifiez l'écoute par le contrôleur iSCSI des initiateurs : ss -ln4 | grep 3260. Vous devez obtenir une réponse du type :
    tcp   LISTEN 0      4096         0.0.0.0:3260       0.0.0.0:*

Rédaction par Jean-Marie Piatte (1983-2021)