Debian logo [inetdoc.LiNUX]

8. Manipulations sur machines virtuelles

Il est possible de réaliser l'ensemble des manipulations de ce support à l'aide de trois instances de machines virtuelles et du commutateur virtuel Virtual Distributed Ethernet présenté dans l'article Virtualisation système et enseignements pratiques

8.1. Préparation du système hôte

L'infrastructure à implanter sur le système hôte est la suivante.

On débute avec la création des fichiers image des trois systèmes virtuels. Les fichiers de type .qcow2 sont des images compressées et sont plus faciles à transférer que les fichiers de type .raw.

mkdir -p ~/vm/iscsi
cd ~/vm/iscsi

cp ../vm0-debian-testing-amd64-base.qcow2 targetSrv.qcow2
cp ../vm0-debian-testing-amd64-base.qcow2 1stInitiator.qcow2
cp ../vm0-debian-testing-amd64-base.qcow2 2ndInitiator.qcow2

for file in *.qcow2; do qemu-img convert -f qcow2 -O raw $file `basename $file .qcow2`.raw; done

rm *.qcow2

On crée ensuite les fichiers correspondant aux unités de stockage supplémentaires.

qemu-img create -f raw targetSrv-disk.raw 80G
qemu-img create -f raw 1stInitiator-disk.raw 32G
qemu-img create -f raw 2ndInitiator-disk.raw 32G

Enfin, il ne reste qu'à mettre en place le script de lancement de ces trois systèmes avec leurs unités de stockages respectives.

#!/bin/bash

../scripts/startup.sh targetSrv.raw 512 2 \
    -drive file=targetSrv-disk.raw,if=virtio,boot=off

../scripts/startup.sh 1stInitiator.raw 512 3 \
    -drive file=1stInitiator-disk.raw,if=virtio,boot=off 

../scripts/startup.sh 2ndInitiator.raw 512 4 \
    -drive file=2ndInitiator-disk.raw,if=virtio,boot=off

Ce script fait lui-même appel au script commun startup.sh qui sert à initialiser une instance de machine virtuelle en utilisant comme paramètres le nom du fichier image, la quantité de RAM et le port du commutateur VDE. Le code du script startup.sh de lancement d'une machine virtuelle est donné en annexe de l'article Virtualisation système et enseignements pratiques.

8.2. Serveur target iSCSI

Cette instance de système virtuel joue le rôle du système target iSCSI. On reprend donc ici les manipulations présentées dans la Section 6, « Configuration du système target » après avoir préparé le volume de stockage et les fichiers ressource cible iSCSI.

Lors de l'initialisation des trois systèmes virtuels, on a ajouté un fichier disque de 80Go à l'instance baptisée targetSrv. C'est ce volume de stockage qui est utilisé pour ouvrir l'accès aux deux unités ressources cible iSCSI.

On reprend les manipulations de la Section 4, « Préparation d'une unité de stockage » pour le partitionnement et le formatage du volume physique virtuel repéré /dev/vdb.

dd if=/dev/zero of=/dev/vdb bs=512 count=4

parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart primary ext4 1 -1

mkfs.ext4 /dev/vdb1

mkdir /var/lib/target

mount /dev/vdb1 /var/lib/target

Pour rendre ce montage «permanent», on édite le fichier /etc/fstab après avoir identifié le volume de stockage.

blkid | grep vdb
/dev/vdb1: UUID="10f56553-ca7c-4827-b43f-8ef664fcef6f" TYPE="ext4"

echo UUID="10f56553-ca7c-4827-b43f-8ef664fcef6f" \
  /var/lib/target/ \
  ext4 \
  defaults \
  0      2 >>/etc/fstab

Une fois le montage du volume effectué à partir du répertoire /var/lib/target, on peut créer les fichiers ressources cible iSCSI à l'aide de la commande dd. On crée des fichier de type Sparse file pour optimiser l'occupation disque réelle sur le système hôte.

Pour respecter le scénario des travaux pratiques, on utilise des fichiers de 32Go composés de blocs de 4Ko qui correspondent au volumes de stockage des deux autres instances de machines virtuelles. La «formule de calcul» devient : (32 x 1024 x 1024 x 1024) / (4 x 1024) = 8388608.

cd /var/lib/target/

dd if=/dev/null of=1stInitiator.disk bs=4k seek=8388608

dd if=/dev/null of=2ndInitiator.disk bs=4k seek=8388608

ll *.disk
-rw-r--r-- 1 root root 32G  7 avril 01:28 1stInitiator.disk
-rw-r--r-- 1 root root 32G  7 avril 01:28 2ndInitiator.disk

du -hs *.disk
0       1stInitiator.disk
0       2ndInitiator.disk

Comme indiqué dans la Section 6, « Configuration du système target », on installe les paquets iscsitarget et iscsitarget-dkms. Le fichier de configuration du démon ietd contient les références aux deux fichiers ci-dessus.

egrep -v '(^*#|^$)' /etc/iet/ietd.conf 
Target iqn.2011-04.lab.stri:1stInitiator.disk
        Lun 0 Path=/var/lib/target/1stInitiator.disk,Type=fileio
        Alias 1stInitiator.disk
Target iqn.2011-04.lab.stri:2ndInitiator.disk
        Lun 1 Path=/var/lib/target/2ndInitiator.disk,Type=fileio
        Alias 2ndInitiator.disk

Une fois le service démarré, ces deux ressources cibles iSCSI sont utilisables.

cat /proc/net/iet/session
tid:2 name:iqn.2011-04.lab.stri:2ndInitiator.disk
tid:1 name:iqn.2011-04.lab.stri:1stInitiator.disk

8.3. Clients initiator iSCSI

Ces deux instances de système virtuel jouent le rôle du système initiator iSCSI. On reprend donc ici les manipulations présentées dans la Section 5, « Configuration du système initiator » avant de passer à la configuration de l'unité logique RAID1.