iSCSI signifie Internet Small Computer System Interface. Il s'agit d'un protocole de réseau de stockage qui peut être utilisé pour partager des périphériques de bloc tels que des partitions HDD/SSD ou des partitions LVM, ou bloquer des fichiers sur le réseau. iSCSI fonctionne dans un modèle client-serveur et s'appuie sur les réseaux TCP/IP pour envoyer des commandes SCSI entre le client initiateur et la cible. iSCSI Target est un service sur le serveur iSCSI qui fournit un accès au stockage partagé et iSCSI Initiator est un client iSCSI qui se connecte à la cible et accède au stockage partagé.
Dans ce didacticiel, nous expliquerons comment configurer les cibles iSCSI et l'initiateur iSCSI sur le serveur Ubuntu 20.04.
Exigences
- Un système exécutant Ubuntu 20.04 pour cible iSCSI avec un disque dur externe de 1 Go.
- Un système exécutant la nouvelle version d'Ubuntu 20.04 pour l'initiateur iSCSI.
- Une adresse IP statique 192.168.1.10 est configurée sur la cible iSCSI et 192.168.1.20 est configurée sur l'initiateur iSCSI.
- Un mot de passe root est configuré sur les deux serveurs.
Mettre à jour le système
Avant de commencer, c'est une bonne idée de mettre à jour votre système avec les derniers packages. Vous pouvez les mettre à jour avec la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois tous les packages mis à jour, redémarrez votre système pour appliquer les modifications.
Installer la cible iSCSI
Par défaut, le package iSCSI Target est disponible dans le référentiel par défaut d'Ubuntu 20.04. Vous pouvez l'installer en exécutant la commande suivante sur le serveur cible iSCSI :
apt-get install tgt -y
Après avoir installé iSCSI Target, vérifiez l'état du serveur avec la commande suivante :
systemctl status tgt
Vous devriez obtenir le résultat suivant :
? tgt.service - (i)SCSI target daemon Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-07-11 07:13:04 UTC; 23s ago Docs: man:tgtd(8) Main PID: 7770 (tgtd) Status: "Starting event loop..." Tasks: 1 Memory: 1.1M CGroup: /system.slice/tgt.service ??7770 /usr/sbin/tgtd -f Jul 11 07:13:04 ubuntu2004 systemd[1]: Starting (i)SCSI target daemon... Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel modules? Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: work_timer_start(146) use timer_fd based scheduler Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: bs_init(387) use signalfd notification Jul 11 07:13:04 ubuntu2004 systemd[1]: Started (i)SCSI target daemon.
À ce stade, iSCSI Target est installé sur votre serveur, vous pouvez maintenant passer à l'étape suivante.
Configurer la cible iSCSI
Tout d'abord, vous devrez créer un périphérique LUN (Logical Unit Number) sur votre serveur iSCSI. LUN est un périphérique de stockage principal qui fait partie d'un périphérique SCSI physique. Tous les LUN mappés à la cible iSCSI sont virtuellement connectés au système d'exploitation du client. Par conséquent, les initiateurs peuvent établir et gérer des systèmes de fichiers sur des LUN iSCSI.
Vous pouvez le configurer en créant un nouveau fichier de configuration :
nano /etc/tgt/conf.d/iscsi.conf
Ajoutez les lignes suivantes :
<target iqn.2020-07.example.com:lun1> backing-store /dev/sdb initiator-address 192.168.1.20 incominguser iscsi-user password outgoinguser iscsi-target secretpass </target>
Enregistrez et fermez le fichier lorsque vous avez terminé.
Où :
- La première ligne définit le nom du LUN.
- La deuxième ligne définit l'emplacement et le nom du périphérique de stockage sur le serveur cible iSCSI.
- La troisième ligne définit l'adresse IP de l'initiateur iSCSI.
- La quatrième ligne définit le nom d'utilisateur/mot de passe entrant.
- La cinquième ligne définit le nom d'utilisateur/mot de passe que la cible fournira à l'initiateur pour permettre l'authentification mutuelle CHAP.
Ensuite, redémarrez le service iSCSI pour appliquer les modifications :
systemctl restart tgt
Ensuite, vérifiez le serveur cible iSCSI avec la commande suivante :
tgtadm --mode target --op show
Vous devriez obtenir le résultat suivant :
Target 1: iqn.2020-07.example.com:lun1 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: Account information: iscsi-user iscsi-target (outgoing) ACL information: 192.168.1.10
À ce stade, le serveur cible iSCSI est installé et configuré. Vous pouvez maintenant passer à l'étape suivante.
Installer et configurer l'initiateur iSCSI
Ensuite, accédez à la machine de l'initiateur iSCSI et installez le package de l'initiateur iSCSI avec la commande suivante :
apt-get install open-iscsi -y
Une fois l'installation terminée, découvrez le serveur cible iSCSI pour connaître les cibles partagées à l'aide de la commande suivante :
iscsiadm -m discovery -t st -p 192.168.1.10
Vous devriez voir le résultat suivant :
192.168.1.10:3260,1 iqn.2020-07.example.com:lun1
Ensuite, vous devrez définir le nom du périphérique LUN dans le fichier initiatorname.iscsi :
nano /etc/iscsi/initiatorname.iscsi
Ajoutez votre nom de LUN cible iSCSI comme indiqué ci-dessous :
InitiatorName=iqn.2020-07.example.com:lun1
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, vous devrez définir les informations CHAP que vous avez configurées sur la cible iSCSI pour accéder à la cible iSCSI à partir de l'initiateur iSCSI. Le fichier de configuration du nœud existera dans le répertoire ‘/etc/iscsi/nodes/‘ et aura un répertoire par LUN disponible.
Vous pouvez le définir en éditant le fichier suivant :
nano /etc/iscsi/nodes/iqn.2020-07.example.com\:lun1/192.168.1.10\,3260\,1/default
Ajoutez/Modifiez les lignes suivantes :
node.session.auth.authmethod = CHAP node.session.auth.username = iscsi-user node.session.auth.password = password node.session.auth.username_in = iscsi-target node.session.auth.password_in = secretpass node.startup = automatic
Enregistrez et fermez le fichier puis redémarrez le service initiateur iSCSI avec la commande suivante :
systemctl restart open-iscsi iscsid
Vous pouvez également vérifier l'état du service avec la commande suivante :
systemctl status open-iscsi
Vous devriez obtenir le résultat suivant :
? open-iscsi.service - Login to default iSCSI targets Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2020-07-11 07:24:19 UTC; 10s ago Docs: man:iscsiadm(8) man:iscsid(8) Process: 3861 ExecStart=/sbin/iscsiadm -m node --loginall=automatic (code=exited, status=0/SUCCESS) Process: 3867 ExecStart=/lib/open-iscsi/activate-storage.sh (code=exited, status=0/SUCCESS) Main PID: 3867 (code=exited, status=0/SUCCESS) Jul 11 07:24:19 initiator systemd[1]: Starting Login to default iSCSI targets... Jul 11 07:24:19 initiator iscsiadm[3861]: Logging in to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] (m> Jul 11 07:24:19 initiator iscsiadm[3861]: Login to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] success> Jul 11 07:24:19 initiator systemd[1]: Finished Login to default iSCSI targets.
Vous pouvez également vérifier la connexion iSCSI avec la commande suivante :
iscsiadm -m session -o show
Vous devriez obtenir le résultat suivant :
tcp: [2] 192.168.1.10:3260,1 iqn.2020-07.example.com:lun1 (non-flash)
Vous pouvez également vérifier le périphérique de stockage partagé à partir de la cible iSCSI avec la commande suivante :
lsblk
Vous devriez voir le périphérique partagé sdb dans la sortie suivante :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ??sda1 8:1 0 80G 0 part / sdb 8:16 0 1000M 0 disk
Créer un système de fichiers sur un appareil partagé
Afin d'utiliser le périphérique partagé sur l'initiateur iSCSI, vous devrez créer un système de fichiers sur le périphérique partagé (sdb) et le monter pour rendre ce périphérique utile.
Tout d'abord, créez un système de fichiers sur le périphérique partagé (sdb) avec la commande suivante :
fdisk /dev/sdb
Répondez à toutes les questions comme indiqué ci-dessous pour créer un système de fichiers :
Welcome to fdisk (util-linux 2.34). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x9743ddcf. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-2047999, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2047999, default 2047999): Created a new partition 1 of type 'Linux' and of size 999 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
Ensuite, formatez la partition avec la commande suivante :
mkfs.ext4 /dev/sdb1
Vous devriez obtenir le résultat suivant :
mke2fs 1.45.5 (07-Jan-2020) Creating filesystem with 255744 4k blocks and 64000 inodes Filesystem UUID: e7f06605-a0f5-41e1-b1b2-e85bd7a2d6a3 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
Ensuite, montez la partition dans le répertoire /mnt avec la commande suivante :
mount /dev/sdb1 /mnt
Vous pouvez maintenant vérifier la partition montée avec la commande suivante :
df -h
Vous devriez obtenir le résultat suivant :
Filesystem Size Used Avail Use% Mounted on udev 981M 0 981M 0% /dev tmpfs 199M 588K 199M 1% /run /dev/sda1 79G 1.8G 74G 3% / tmpfs 994M 0 994M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 994M 0 994M 0% /sys/fs/cgroup tmpfs 199M 0 199M 0% /run/user/0 /dev/sdb1 968M 2.5M 899M 1% /mnt
Conclusion
Dans le guide ci-dessus, vous avez appris à configurer la cible et l'initiateur iSCSI sur le serveur Ubuntu 20.04. Vous avez également appris à partager un appareil sur le serveur cible et à y accéder à partir de l'initiateur. N'hésitez pas à me demander si vous avez des questions.