« Iscsi » : différence entre les versions

De Wiki doc

Aucun résumé des modifications
Aucun résumé des modifications
Ligne 19 : Ligne 19 :
Seul la mise en place d'un partage logique (un fichier créé avec <source lang="bash" inline>dd</source>) sera expliqué, la procédure avec un vrai disque n'étant pas fondamentalement différente.
Seul la mise en place d'un partage logique (un fichier créé avec <source lang="bash" inline>dd</source>) sera expliqué, la procédure avec un vrai disque n'étant pas fondamentalement différente.


===Installation des paquets===
===Installation du paquet===
  apt update && apt install iscsitarget
  apt update && apt install iscsitarget


Ligne 53 : Ligne 53 :
</source>
</source>
==Pour Debian Stretch==
==Pour Debian Stretch==
Vous avez trouvé la configuration sous Jessie trop facile ? Rassurez-vous la procédure pour Debian 9 va rattraper le coup en rehaussant artificiellement la difficulté pour je ne sais quelle raison de développeur masochiste (c'est à la mode en ce moment dans le logiciel libre... Systemd; NFTable...). En effet, le merveilleux ''iscsitarget'' n'est plus maintenu et il a été viré comme un malpropre des dépôts Stretch. Ce qui suit va être un peut fouillis mais on s'y retrouve.
===Installation du paquet===
apt install targetcli-fb
===Configuration du service===
La configuration du service s'effectue via un prompt dédié (c'est également depuis ce dernier que les fichier-disques seront créés).


Une fois dans le shell du service, une arborescence généré à partir d'une représentation du fichier de configuration JSON disponible à <source lang="bash" inline>/etc/rtslib-fb-target/saveconfig.json</source> permet d'interagir avec les volumes ISCSI.
targetcli
{{astuce|La commande <source lang="bash" inline>exit</source> enregistre automatiquement les modifications à la sortie du shell. L'outil enregistre les 10 dernières modifications du fichier à chaque enregistrement dans <source lang="bash" inline>/etc/rtslib-fb-target/saveconfig.json</source>.}}
l’arborescence se présente comme ceci:
<source lang="bash">
/> 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]
</source>
====Création d'un volume ficher-disque====
Vous pouvez utiliser un fichier comme volume ISCSI. Dans ce cas, l'action sera à exécuter dans <source lang="bash" inline>/backstores/fileio</source>.
/> cd /backstores/fileio
/backstores/fileio> create storage_file /tmp/test.iscsi 32G
Nous pouvons voir dés à présent le changement dans l'arborescence
<source lang="bash">
/backstores/fileio> ls /
o- / ............................................................................. [...]
  o- backstores .................................................................. [...]
  | o- block ...................................................... [Storage Objects: 0]
  | o- fileio ..................................................... [Storage Objects: 1]
  | | o- storage_file ............... [/tmp/test.iscsi (32.0GiB) write-back deactivated]
  | o- pscsi ...................................................... [Storage Objects: 0]
  | o- ramdisk .................................................... [Storage Objects: 0]
  o- iscsi ................................................................ [Targets: 0]
  o- loopback ............................................................. [Targets: 0]
  o- vhost ................................................................ [Targets: 0]
</source>
====Création d'un volume disque physique====
Vous pouvez également utiliser un périphérique physique comme volume ISCSI. Dans ce cas, l'action sera a exécuter dans <source lang="bash" inline>/backstores/block</source>.
<source lang="bash">
/> cd /backstores/block
/backstores/block> create initiator1 /dev/sdb
Created block storage object initiator1 using /dev/sdb.
</source>
====Création d'une cible ISCSI====
<source lang="bash">
/backstores/fileio> cd /iscsi
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.debian.x8664:sn.3d2f122e1db9.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
</source>
====Affectation de l'unité logique à la cible ISCSI====
<source lang="bash">
cd iqn.2003-01.org.linux-iscsi.debian.x8664:sn.3d2f122e1db9/tpg1/
/iscsi/iqn.20...122e1db9/tpg1> luns/ create /backstores/fileio/
storage_file Created LUN 0.
</source>
====Limiter les accès====
Par défaut, tout les réseaux sont autorisés à ce connecter au serveur. Si vous voulez limiter l'accès à un réseau en particulier, il faut supprimer cette règle par défaut et ajouter la votre.
<source lang="bash">
/iscsi/iqn.20...122e1db9/tpg1> ls                                                     
o- tpg1 .................................................... [no-gen-acls, auth per-acl]
  o- acls .................................................................... [ACLs: 1]
  | o- iqn.1993-08.org.debian:01:fc5ea35ecf4 .............. [1-way auth, Mapped LUNs: 1]
  |  o- mapped_lun0 ................................... [lun0 fileio/storage_file (rw)]
  o- luns .................................................................... [LUNs: 1]
  | o- lun0 .................................... [fileio/storage_file (/tmp/test.iscsi)]
  o- portals .............................................................. [Portals: 1]
    o- 0.0.0.0:3260 ............................................................... [OK]
/iscsi/iqn.20...122e1db9/tpg1> cd portals/
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 ip_port=3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20...122e1db9/tpg1> portals/ create 192.0.2.12 3260
Using default IP port 3260
Created network portal 192.168.183.0:3260.
/iscsi/iqn.20...122e1db9/tpg1> ls
o- tpg1 .................................................... [no-gen-acls, auth per-acl]
  o- acls .................................................................... [ACLs: 1]
  | o- iqn.1993-08.org.debian:01:fc5ea35ecf4 .............. [1-way auth, Mapped LUNs: 1]
  |  o- mapped_lun0 ................................... [lun0 fileio/storage_file (rw)]
  o- luns .................................................................... [LUNs: 1]
  | o- lun0 .................................... [fileio/storage_file (/tmp/test.iscsi)]
  o- portals .............................................................. [Portals: 1]
    o- 192.168.183.0:3260 ............................................................ [OK]
</source>
====ACL====
Par défaut, cette usine à gaz n’accepte rien (on ce demande bien pourquoi d'ailleurs...). Il faut obligatoirement créer une ACL qui corrige ça.
<source lang="bash">
/iscsi/iqn.20...122e1db9/tpg1> acls/ create iqn.1993-08.org.debian:01:fc5ea35ecf4
Created Node ACL for iqn.1993-08.org.debian:01:fc5ea35ecf4
Created mapped LUN 0.
</source>
{{attention|L'entrée "iqn.1993-08.org.debian:01:fc5ea35ecf4" est trouvé dans le fichier <source lang="bash" inline>/var/log/syslog</source> après qu'un client ai tenté de ce connecté sans succès. Je ne sais pas pourquoi on utilise pas la valeur toujours utilisé jusqu'alors ni comment faire autrement pour récupérer cette valeur (c'est vraiment n'importe quoi).}}
Ce n'est pas terminé. Par défaut, le service n'autorise que les connexions avec mot de passe. Comme on s'en tape (on pourra en mettre un à la fin si vous voulez), on va virer ça.
<source lang="bash">
/iscsi/iqn.20...122e1db9/tpg1> set attribute authentication=0 demo_mode_write_protect=0
Parameter authentication is now '0'.
Parameter demo_mode_write_protect is now '0'.
</source>
Ouf, c'est bon le client peut ce connecter. Et bien avouez que c'est quand même plus tiré par les cheveux qu'au bon vieux temps (et tout ça pour exactement le même résultat ! La complexité n'apporte strictement aucun avantages !)
=Partie client=
=Partie client=
==Installation des paquets==
==Installation des paquets==

Version du 2 janvier 2018 à 01:10

Le protocole ISCSI permet de partager un disque dur (sous forme physique ou logique) sur le réseau en transportant les commandes SCSI dans des paquets IP. On peut ce servir d'un disque partagé via ISCSI pour démarrer un système Debian ou Windows depuis le réseau, faire des tests ou simplement ajouter un périphérique de stockage sur sa machine.

Dans ce tuto, nous verrons :

  • La mise en place d'un serveur ISCSI
    • Pour Debian Jessie (8.0)
    • Pour Debian Stretch (9.0)
  • La mise en place d'un client ISCSI

Pré-requis :

  • Debian 8 ou 9
  • un périphérique de type bloc (disque dur, SSD , clé USB, fichier image disque...) à partager

Port utilisé :

  • 3260/tcp

Partie serveur

Pour Debian Jessie

Seul la mise en place d'un partage logique (un fichier créé avec dd) sera expliqué, la procédure avec un vrai disque n'étant pas fondamentalement différente.

Installation du paquet

apt update && apt install iscsitarget

Création d'un fichier disque

Création du volume à partager sous forme de fichier à l'aide de dd

dd if=/dev/zero of=fs.iscsi.disk bs=1M count=10000

On peut mettre ce fichier de 10Go dans un répertoire pour pas que ça soit le foutoir

mkdir /root/iscsi && mv fs.iscsi.disk !$

Partage du disque sur le réseau

vim /etc/iet/ietd.conf

Ajouter ceci:

 Target iqn.2017-01:fs.iscsi.disk
	 Lun 0 Path=/root/iscsi/fs.iscsi.disk,Type=fileio

Si on partage une partition de disque dur physique, mettre ça

 Target iqn.2010-01:sdb2
	 Lun 0 Path=/dev/sdb2,Type=fileio

Activation du service

vim /etc/default/iscsitarget
ISCSITARGET_ENABLE=true

Redémarrer le service

/etc/init.d/iscsitarget restart

Afficher le contenu du partage

cat /proc/net/iet/volume

la commande devrait renvoyer ceci

 tid:1 name:iqn.2010-01:sdb2
	 lun:0 state:0 iotype:fileio iomode:wt path:/root/iscsi/fs.iscsi.disk

Pour Debian Stretch

Vous avez trouvé la configuration sous Jessie trop facile ? Rassurez-vous la procédure pour Debian 9 va rattraper le coup en rehaussant artificiellement la difficulté pour je ne sais quelle raison de développeur masochiste (c'est à la mode en ce moment dans le logiciel libre... Systemd; NFTable...). En effet, le merveilleux iscsitarget n'est plus maintenu et il a été viré comme un malpropre des dépôts Stretch. Ce qui suit va être un peut fouillis mais on s'y retrouve.

Installation du paquet

apt install targetcli-fb

Configuration du service

La configuration du service s'effectue via un prompt dédié (c'est également depuis ce dernier que les fichier-disques seront créés).

Une fois dans le shell du service, une arborescence généré à partir d'une représentation du fichier de configuration JSON disponible à /etc/rtslib-fb-target/saveconfig.json permet d'interagir avec les volumes ISCSI.

targetcli

ASTUCE

La commande exit enregistre automatiquement les modifications à la sortie du shell. L'outil enregistre les 10 dernières modifications du fichier à chaque enregistrement dans /etc/rtslib-fb-target/saveconfig.json.

l’arborescence se présente comme ceci:

/> 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]

Création d'un volume ficher-disque

Vous pouvez utiliser un fichier comme volume ISCSI. Dans ce cas, l'action sera à exécuter dans /backstores/fileio.

/> cd /backstores/fileio
/backstores/fileio> create storage_file /tmp/test.iscsi 32G

Nous pouvons voir dés à présent le changement dans l'arborescence

/backstores/fileio> ls /
o- / ............................................................................. [...]
  o- backstores .................................................................. [...]
  | o- block ...................................................... [Storage Objects: 0]
  | o- fileio ..................................................... [Storage Objects: 1]
  | | o- storage_file ............... [/tmp/test.iscsi (32.0GiB) write-back deactivated]
  | o- pscsi ...................................................... [Storage Objects: 0]
  | o- ramdisk .................................................... [Storage Objects: 0]
  o- iscsi ................................................................ [Targets: 0]
  o- loopback ............................................................. [Targets: 0]
  o- vhost ................................................................ [Targets: 0]

Création d'un volume disque physique

Vous pouvez également utiliser un périphérique physique comme volume ISCSI. Dans ce cas, l'action sera a exécuter dans /backstores/block.

/> cd /backstores/block
/backstores/block> create initiator1 /dev/sdb
Created block storage object initiator1 using /dev/sdb.

Création d'une cible ISCSI

/backstores/fileio> cd /iscsi
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.debian.x8664:sn.3d2f122e1db9.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

Affectation de l'unité logique à la cible ISCSI

cd iqn.2003-01.org.linux-iscsi.debian.x8664:sn.3d2f122e1db9/tpg1/
/iscsi/iqn.20...122e1db9/tpg1> luns/ create /backstores/fileio/
storage_file Created LUN 0.

Limiter les accès

Par défaut, tout les réseaux sont autorisés à ce connecter au serveur. Si vous voulez limiter l'accès à un réseau en particulier, il faut supprimer cette règle par défaut et ajouter la votre.

/iscsi/iqn.20...122e1db9/tpg1> ls                                                       
o- tpg1 .................................................... [no-gen-acls, auth per-acl]
  o- acls .................................................................... [ACLs: 1]
  | o- iqn.1993-08.org.debian:01:fc5ea35ecf4 .............. [1-way auth, Mapped LUNs: 1]
  |   o- mapped_lun0 ................................... [lun0 fileio/storage_file (rw)]
  o- luns .................................................................... [LUNs: 1]
  | o- lun0 .................................... [fileio/storage_file (/tmp/test.iscsi)]
  o- portals .............................................................. [Portals: 1]
    o- 0.0.0.0:3260 ............................................................... [OK]

/iscsi/iqn.20...122e1db9/tpg1> cd portals/
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 ip_port=3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20...122e1db9/tpg1> portals/ create 192.0.2.12 3260
Using default IP port 3260
Created network portal 192.168.183.0:3260.
/iscsi/iqn.20...122e1db9/tpg1> ls
o- tpg1 .................................................... [no-gen-acls, auth per-acl]
  o- acls .................................................................... [ACLs: 1]
  | o- iqn.1993-08.org.debian:01:fc5ea35ecf4 .............. [1-way auth, Mapped LUNs: 1]
  |   o- mapped_lun0 ................................... [lun0 fileio/storage_file (rw)]
  o- luns .................................................................... [LUNs: 1]
  | o- lun0 .................................... [fileio/storage_file (/tmp/test.iscsi)]
  o- portals .............................................................. [Portals: 1]
    o- 192.168.183.0:3260 ............................................................ [OK]

ACL

Par défaut, cette usine à gaz n’accepte rien (on ce demande bien pourquoi d'ailleurs...). Il faut obligatoirement créer une ACL qui corrige ça.

/iscsi/iqn.20...122e1db9/tpg1> acls/ create iqn.1993-08.org.debian:01:fc5ea35ecf4
Created Node ACL for iqn.1993-08.org.debian:01:fc5ea35ecf4
Created mapped LUN 0.

ATTENTION

L'entrée "iqn.1993-08.org.debian:01:fc5ea35ecf4" est trouvé dans le fichier /var/log/syslog après qu'un client ai tenté de ce connecté sans succès. Je ne sais pas pourquoi on utilise pas la valeur toujours utilisé jusqu'alors ni comment faire autrement pour récupérer cette valeur (c'est vraiment n'importe quoi).

Ce n'est pas terminé. Par défaut, le service n'autorise que les connexions avec mot de passe. Comme on s'en tape (on pourra en mettre un à la fin si vous voulez), on va virer ça.

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

Ouf, c'est bon le client peut ce connecter. Et bien avouez que c'est quand même plus tiré par les cheveux qu'au bon vieux temps (et tout ça pour exactement le même résultat ! La complexité n'apporte strictement aucun avantages !)

Partie client

Installation des paquets

apt install open-iscsi

Lister les volume en partage sur une IP donnée

iscsiadm -m discovery -t sendtargets -p IP_DU_SERVEUR

Le résultat de la commande doit être celui-ci :

IP_DU_SERVEUR:3260,1 iqn.2010-01:fs.iscsi.disk

Connexion au volume

iscsiadm -m node -T iqn.2010-01:fs.iscsi.disk -p IP_DU_SERVEUR --login

La commande doit renvoyer ceci :

Logging in to [iface: default, target: iqn.2010-01:fs.iscsi.disk, portal: IP_DU_SERVEUR,3260] (multiple)
Login to [iface: default, target: iqn.2010-01:fs.iscsi.disk, portal: IP_DU_SERVEUR,3260] successful

Le log /var/log/messages indique qu'un nouveau disque a été détecté et donne son nom (sur ma VM qui a comme disque principal vda, le volume ISCSI s'appel sda. Il y a des chances pour que sur une machine physique ce soit sdb...)

Il suffit maintenant de créer une table de partition, une partition avec un formatage et de monter cette partition comme s'il s'agissait d'un vrai disque dur, comme expliqué dans notre documentation sur le partitionnement d'un disque dur sous Linux.

Démonter le volume

iscsiadm -m node -T iqn.2010-01:fs.iscsi.disk -p IP_DU_SERVEUR --logout

Source

http://blog.inforeseau.com/2011/01/configurer-iscsi-client-serveur-sous-gnulinux-stockage-reseau-ou-san-personnel-sur-ip