L'énorme avantage de l'utilisation du gestionnaire de volume logique (Logical Volume Manager ou LVM) avec les images disques de machine virtuelle, c'est que l'on peut manipuler la capacité de stockage après installation.
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.
Voici un exemple d'extension de la capacité de stockage d'une image de machine virtuelle.
Extension du fichier image
On commence par identifier les caractéristiques du fichier image
vu du système hôte. Le fichier au format raw
est un sparse file.
Si on a réservé un volume total, seule l'occupation effective est
prise en compte pour le calcul de l'occupation disque.
La commande ls fait apparaître l'occupation effective ainsi que l'espace total réservé lors de la création du fichier image.
$
ls -gGh
total 3,4G
-rw-r--r-- 1 32G janv. 13 18:58 vm0-debian-testing-amd64-base.raw
Une fois l'instance de système virtuel lancée, on obtient l'occupation disque suivante.
etu@vm0:~$
df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/vm0-root 30G 937M 28G 4% /
udev 10M 0 10M 0% /dev
tmpfs 202M 204K 201M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 403M 0 403M 0% /run/shm
/dev/vda1 228M 23M 190M 11% /boot
Toujours à partir de la même instance la table des partitions est la suivante.
#
parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 34,4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 256MB 255MB primary ext2 boot
2 257MB 34,4GB 34,1GB extended
5 257MB 34,4GB 34,1GB logical lvm
L'opération d'extension, s'effectue directement sur le fichier
image au format «brut» non compressé raw
.
$
qemu-img resize vm0-debian-testing-amd64-base.raw +20G
Image resized.
Extension de l'espace de stockage du système virtuel
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.
#
parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 55,8GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 256MB 255MB primary ext2 boot
2 257MB 34,4GB 34,1GB extended
5 257MB 34,4GB 34,1GB logical 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.
#
parted /dev/vda unit % print free Model: Virtio Block Device (virtblk) Disk /dev/vda: 100% Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 0,00% 0,00% 0,00% Free Space 1 0,00% 0,46% 0,46% primary ext2 boot 0,46% 0,46% 0,00% Free Space 2 0,46% 61,5% 61,1% extended 5 0,46% 61,5% 61,1% logical lvm 61,5% 100% 38,5% Free Space#
parted /dev/vda mkpart primary 62% 100% Information: You may need to update /etc/fstab.#
parted /dev/vda set 3 lvm on#
parted /dev/vda print Model: Virtio Block Device (virtblk) Disk /dev/vda: 55,8GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 1049kB 256MB 255MB primary ext2 boot 2 257MB 34,4GB 34,1GB extended 5 257MB 34,4GB 34,1GB logical lvm 3 34,4GB 55,8GB 21,5GB primary lvm
C'est la nouvelle partition /dev/vda3
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/vda3 Physical volume "/dev/vda3" successfully created#
pvdisplay --- Physical volume --- PV Name /dev/vda5 VG Name vm0 PV Size 31,76 GiB / not usable 2,00 MiB Allocatable yes (but full) PE Size 4,00 MiB Total PE 8130 Free PE 0 Allocated PE 8130 PV UUID CpaZ5D-vbVS-32w3-QLnk-GVAd-06pB-y2Iw8Y "/dev/vda3" is a new physical volume of "20,00 GiB" --- NEW Physical volume --- PV Name /dev/vda3 VG Name PV Size 20,00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID jZJ5xq-bZlt-m0ZL-RkUG-Phe2-bbDY-r6cAPI
On remarque les différences entre les deux volumes physiques
LVM. Le volume physique
/dev/vda3
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 vm0 /dev/vda3 Volume group "vm0" successfully extended#
pvdisplay /dev/vda3 --- Physical volume --- PV Name /dev/vda3 VG Name vm0 PV Size 20,00 GiB / not usable 0 Allocatable yes PE Size 4,00 MiB Total PE 5120 Free PE 5120 Allocated PE 0 PV UUID jZJ5xq-bZlt-m0ZL-RkUG-Phe2-bbDY-r6cAPI
Pour achever l'opération, on affecte l'espace offert par le
nouveau volume physique à un volume logique du système. Dans
l'exemple ci-dessous, on se propose de déplacer le contenu de
l'arborescence /var
dans le nouveau
volume logique.
#
lvcreate --name var vm0 /dev/vda3 -l 100%FREE Logical volume "var" created#
lvdisplay /dev/vm0/var --- Logical volume --- LV Path /dev/vm0/var LV Name var VG Name vm0 LV UUID mQTwlc-4zNt-0V7P-SfWM-qh3G-Zulh-y4zYN4 LV Write Access read/write LV Creation host, time vm0, 2014-01-15 00:20:40 +0100 LV Status available # open 0 LV Size 20,00 GiB Current LE 5120 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2
Une fois le nouveau volume logique prêt à l'emploi, on passe aux manipulations sur le système de fichiers avec le formatage, la synchronisation de l'arborescence et la définition du point de montage.
#
mkfs.ext4 /dev/mapper/vm0-var mke2fs 1.42.9 (28-Dec-2013) Étiquette de système de fichiers= Type de système d'exploitation : Linux Taille de bloc=4096 (log=2) Taille de fragment=4096 (log=2) « Stride » = 0 blocs, « Stripe width » = 0 blocs 1310720 i-noeuds, 5242880 blocs 262144 blocs (5.00%) réservés pour le super utilisateur Premier bloc de données=0 Nombre maximum de blocs du système de fichiers=4294967296 160 groupes de blocs 32768 blocs par groupe, 32768 fragments par groupe 8192 i-noeuds par groupe Superblocs de secours stockés sur les blocs : 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocation des tables de groupe : complété Écriture des tables d'i-noeuds : complété Création du journal (32768 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété#
mount /dev/mapper/vm0-var /mnt#
rsync -ah --numeric-ids /var/ /mnt/#
umount /mnt
Enfin, on créé l'entrée pour le nouveau point de montage dans le
fichier /etc/fstab
.
#
grep var /etc/fstab
/dev/mapper/vm0-var /var ext4 noatime,commit=600,defaults 0 2
En conclusion, on visualise l'espace occupé et disponible sur l'ensemble des volumes logiques du système virtuel après redémarrage.
#
df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/vm0-root 30G 742M 28G 3% /
udev 10M 0 10M 0% /dev
tmpfs 202M 212K 201M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 403M 0 403M 0% /run/shm
/dev/vda1 228M 23M 190M 11% /boot
/dev/mapper/vm0-var 20G 242M 19G 2% /var
Bien sûr, les manipulations réalisé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.