L'énorme avantage de l'utilisation du gestionnaire de volume logique LVM avec les images disques de machine virtuelle, c'est que l'on peut manipuler la capacité de stockage après installation.
Dans le cas présent, les images disques ont été dimensionnées à minima pour faciliter le téléchargement à partir du serveur Web de l'infrastructure de travaux pratiques. Il est donc important de pouvoir étendre la capacité d'une instance système après copie sur le système hôte.
Du point de vue pédagogique, c'est aussi l'occasion de se familiariser avec les fonctionnalités offertes par les outils LVM. Ces outils sont devenus indispensables dans la gestion de la capacité de stockage d'un serveur aujourd'hui.
Voici un exemple d'extension de la capacité de stockage d'une image de machine virtuelle Debian/testing avec interface graphique. À partir d'un volume de stockage initial de 4Go on ajoute 8Go en répartissant cette extension entre les volumes logiques de l'arborescence système.
On commence par identifier les caractéristiques du fichier image du système avant extension.
$ ls -sh vm0-debian-testing-amd64-X11.qcow2 2,3G vm0-debian-testing-amd64-X11.qcow2
Une fois l'instance de système virtuel lancée, on obtient l'occupation disque suivante.
etu@vm:~$ df -h
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur
/dev/mapper/vm--debian-root
473M 105M 344M 24% /
tmpfs 503M 0 503M 0% /lib/init/rw
udev 10M 148K 9,9M 2% /dev
tmpfs 503M 0 503M 0% /dev/shm
/dev/hda1 228M 20M 197M 9% /boot
/dev/mapper/vm--debian-home
473M 14M 435M 3% /home
/dev/mapper/vm--debian-usr
1,9G 1,2G 586M 68% /usr
/dev/mapper/vm--debian-var
595M 235M 330M 42% /var
Toujours à partir de la même instance la table des partitions est la suivante.
# fdisk -l /dev/hda Disk /dev/hda: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000162 Device Boot Start End Blocks Id System /dev/hda1 * 1 31 248976 83 Linux /dev/hda2 32 522 3943957+ 8e Linux LVM
Avant de passer à l'opération d'extension, on effectue une
conversion du fichier image au format «brut» non compressé ou
format raw.
$ qemu-img convert -O raw vm0-debian-testing-amd64-X11.qcow2 \ vm0-debian-testing-amd64-X11-extended.raw $ ls -sh vm0-debian-testing-amd64-X11* 2,1G vm0-debian-testing-amd64-X11-extended.raw 2,3G vm0-debian-testing-amd64-X11.qcow2
On procède enfin à l'augmentation de capacité à l'aide de la commande dd. On passe d'un fichier image d'une capacité de 4Go à 12Go en ajoutant 8Go.
$ dd if=/dev/zero of=vm0-debian-testing-amd64-X11-extended.raw seek=12288 obs=1MB count=0 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 3,3943e-05 s, 0,0 kB/s
Pour terminer cette extension d'image disque, on reconvertit le
fichier image au format compressé qcow2.
$ qemu-img convert -O qcow2 vm0-debian-testing-amd64-X11-extended.raw \ vm0-debian-testing-amd64-X11-extended.qcow2 $ ls -lAh vm0-debian-testing-amd64-X11* -rw-r--r-- 1 phil phil 2,1G mai 24 18:10 vm0-debian-testing-amd64-X11-extended.qcow2 -rw-r--r-- 1 phil phil 12G mai 24 16:23 vm0-debian-testing-amd64-X11-extended.raw -rw-r--r-- 1 phil phil 2,3G mai 24 18:08 vm0-debian-testing-amd64-X11.qcow2
Le fichier image au format brut (raw) est maintenant inutile et peut être supprimé
sans problème.
En utilisant l'image système étendue générée ci-avant, on fait apparaître l'espace disponible en affichant l'état des partitions.
# fdisk -l /dev/hda Disk /dev/hda: 12.2 GB, 12288000000 bytes 255 heads, 63 sectors/track, 1493 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000162 Device Boot Start End Blocks Id System /dev/hda1 * 1 31 248976 83 Linux /dev/hda2 32 522 3943957+ 8e Linux LVM
On remarque que l'espace total a bien été augmenté et qu'aucune partition n'est disponible. Il faut donc créer une nouvelle partition correspondant à l'espace libre.
# fdisk /dev/hda The number of cylinders for this disk is set to 1493. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/hda: 12.2 GB, 12288000000 bytes 255 heads, 63 sectors/track, 1493 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000162 Device Boot Start End Blocks Id System /dev/hda1 * 1 31 248976 83 Linux /dev/hda2 32 522 3943957+ 8e Linux LVM Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (523-1493, default 523): Using default value 523 Last cylinder or +size or +sizeM or +sizeK (523-1493, default 1493): Using default value 1493 Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): 8e Changed system type of partition 3 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
C'est la nouvelle partition /dev/hda3 que nous utilisons pour créer un
nouveau volume physique LVM. On
visualise ensuite les propriétés des deux volumes physiques du
système virtuel.
# pvcreate /dev/hda3 Physical volume "/dev/hda3" successfully created vm:/home/etu# pvdisplay --- Physical volume --- PV Name /dev/hda2 VG Name vm-debian PV Size 3,76 GB / not usable 3,52 MB Allocatable yes (but full) PE Size (KByte) 4096 Total PE 962 Free PE 0 Allocated PE 962 PV UUID ahs2DO-u8gV-VVnN-sUOT-dUwv-fjlz-VRQpUl "/dev/hda3" is a new physical volume of "7,44 GB" --- NEW Physical volume --- PV Name /dev/hda3 VG Name PV Size 7,44 GB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID IHbF6G-Tfye-uUXC-mcWf-KUNd-MrSD-y4Yy4y
On remarque facilement les différences entre les deux volumes
physiques LVM. Le volume
physique /dev/hda3 n'est associé à
aucun groupe de volumes et ne dispose pas d'une taille de bloc ou
Physical Extent (PE) définie.
L'étape suivante consiste à étendre le groupe de volumes logiques avec le nouveau volume physique disponible ; c'est le rôle de la commande vgextend. On visualise ensuite le résultat sur les propriétés du nouveau volume physique.
# vgextend vm-debian /dev/hda3 Volume group "vm-debian" successfully extended # pvdisplay /dev/hda3 --- Physical volume --- PV Name /dev/hda3 VG Name vm-debian PV Size 7,44 GB / not usable 773,50 KB Allocatable yes PE Size (KByte) 4096 Total PE 1904 Free PE 1904 Allocated PE 0 PV UUID IHbF6G-Tfye-uUXC-mcWf-KUNd-MrSD-y4Yy4y
Pour achever l'opération, il est nécessaire d'affecter l'espace
offert par le nouveau volume physique aux différents volumes
logiques du système. Pour étendre les volumes logiques voulus à
l'aide de la commande lvextend, on utilise deux options
différentes : -L pour ajouter une
capacité fixe et -l pour attribuer un
pourcentage de volume.
# lvextend -L +512M /dev/mapper/vm--debian-root Extending logical volume root to 1000,00 MB Logical volume root successfully resized # lvextend -L +2560M /dev/mapper/vm--debian-usr Extending logical volume usr to 4,36 GB Logical volume usr successfully resized # lvextend -L +2560M /dev/mapper/vm--debian-var Extending logical volume var to 3,09 GB Logical volume var successfully resized # lvextend -l +100%FREE /dev/mapper/vm--debian-home Extending logical volume home to 2,48 GB Logical volume home successfully resized
Il ne reste plus qu'à répercuter l'extension des volumes logiques au niveau système de fichiers à l'aide de la commande resise2fs.
# resize2fs /dev/mapper/vm--debian-root resize2fs 1.41.3 (12-Oct-2008) Le système de fichiers de /dev/mapper/vm--debian-root est monté sur / ; le changement de taille doit être effectué en ligne old desc_blocks = 2, new_desc_blocks = 4 En train d'effectuer un changement de taille en ligne de /dev/mapper/vm--debian-root vers 1024000 (1k) blocs. Le système de fichiers /dev/mapper/vm--debian-root a maintenant une taille de 1024000 blocs. # resize2fs /dev/mapper/vm--debian-usr resize2fs 1.41.3 (12-Oct-2008) Le système de fichiers de /dev/mapper/vm--debian-usr est monté sur /usr ; le changement de taille doit être effectué en ligne old desc_blocks = 1, new_desc_blocks = 1 En train d'effectuer un changement de taille en ligne de /dev/mapper/vm--debian-usr vers 1142784 (4k) blocs. Le système de fichiers /dev/mapper/vm--debian-usr a maintenant une taille de 1142784 blocs. # resize2fs /dev/mapper/vm--debian-var resize2fs 1.41.3 (12-Oct-2008) Le système de fichiers de /dev/mapper/vm--debian-var est monté sur /var ; le changement de taille doit être effectué en ligne old desc_blocks = 1, new_desc_blocks = 1 En train d'effectuer un changement de taille en ligne de /dev/mapper/vm--debian-var vers 793600 (4k) blocs. Le système de fichiers /dev/mapper/vm--debian-var a maintenant une taille de 793600 blocs. # resize2fs /dev/mapper/vm--debian-home resize2fs 1.41.3 (12-Oct-2008) Le système de fichiers de /dev/mapper/vm--debian-home est monté sur /home ; le changement de taille doit être effectué en ligne old desc_blocks = 2, new_desc_blocks = 10 En train d'effectuer un changement de taille en ligne de /dev/mapper/vm--debian-home vers 2596864 (1k) blocs. Le système de fichiers /dev/mapper/vm--debian-home a maintenant une taille de 2596864 blocs.
En conclusion, on visualise l'espace occupé et disponible sur l'ensemble des volumes logiques du système virtuel.
# df -h
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur
/dev/mapper/vm--debian-root
969M 106M 814M 12% /
tmpfs 503M 0 503M 0% /lib/init/rw
udev 10M 152K 9,9M 2% /dev
tmpfs 503M 0 503M 0% /dev/shm
/dev/hda1 228M 20M 197M 9% /boot
/dev/mapper/vm--debian-home
2,4G 14M 2,3G 1% /home
/dev/mapper/vm--debian-usr
4,3G 1,2G 3,0G 29% /usr
/dev/mapper/vm--debian-var
3,0G 236M 2,7G 9% /var
Du point de vue du système hôte, rien n'a changé dans la mesure
ou l'extension réalisée n'est pas occupée et que le format
compressé qcow2 joue son rôle.
$ ls -sh vm0-debian-testing-amd64-X11* 2,3G vm0-debian-testing-amd64-X11-extended.qcow2 2,3G vm0-debian-testing-amd64-X11.qcow2
Bien sûr, les valeurs numériques utilisées dans cette section ne sont que des exemples. Il est possible de faire beaucoup d'autres manipulations avec le gestionnaire de volume logique LVM. L'extension de capacité n'est qu'une facette des fonctionnalités offertes.