Agrandir un disque virtuel KVM
Le serveur web qui héberge ce site fonctionne dans une machine virtuelle (VM), le serveur de virtualisation est KVM.
En plus des sites web standards il y a une instance de Cloud qui permet de sauvegarder les photos prises sur un téléphone et de synchroniser les agendas entre les PC et les téléphones.
Après plusieurs années d’utilisation, le disque virtuel prévu lors de la création de la VM a fini par se remplir à 100% ce qui a bloqué l’application.
Pour résoudre le problème, il a fallut agrandir le disque virtuel.
Pour réaliser cet agrandissement de disque il faut :
- Identifier la VM et ses composants
- Sauvegarder la VM
- Agrandir le disque
Identification des composants
Sur le serveur, il y a 2 VM en fonctionnement :
[root@srvkvm] $ virsh list --all
ID Nom État
----------------------------------------------
1 srvdns en cours d’exécution
2 srvweb en cours d’exécution
- debian-matomo fermé
- debian9-jekyll2 fermé
- debian9-jekyll3 fermé
Celle qui doit être réparée est srvweb
.
Cette VM est contient 2 disques virtuel, l’un pour le système, l’autre
pour l’application de Cloud.
On identifie ces disques avec l’une des commandes suivantes :
root@srvkvm] $ virsh dumpxml srvweb | grep qcow
<driver name='qemu' type='qcow2'/>
<source file='/montage/VMs/debian8.qcow2' index='3'/>
<driver name='qemu' type='qcow2'/>
<source file='/montage/VMs/goumoulen.qcow2' index='2'/>
[root@srvkvm] $ virsh domblklist srvweb
Target Source
----------------------------------------
vda /montage/VMs/debian8.qcow2
vdb /montage/VMs/goumoulen.qcow2
hda -
Le disque qui est à agrandir est /montage/VMs/goumoulen.qcow2
.
Sauvegarder la VM
La sauvegarde de la VM consiste en une copie de ses constituants sur un support externe. Elle se fait après avoir arrêté la VM.
Sauvegarde de la configuration de la VM :
virsh dumpxml srvweb > srvweb.xml
Sauvegarde des 2 disques :
cp /montage/VMs/debian8.qcow2 .
cp /montage/VMs/goumoulen.qcow2 .
Les disques de la VM ont une taille de 40Go et 64Go, la copie des 2 disques a pris environ 40 minutes.
Agrandissement du disque virtuel
Un agrandissement de disque virtuel ne peut se faire que s’il n’y a pas
de Snapshot de la VM.
On contrôle avec la commande :
[root@srvkvm] $ virsh snapshot-list srvweb
Nom Creation Time État
-----------------------------
Il n’y a pas de Snapshot, on peut procéder à l’agrandissement.
En cas de présence de Snapshot, il faut les supprimer avant d’agrandir
le disque.
Après avoir vérifier la place disponible sur le disque physique :
[root@srvkvm] $ df -h /montage/VMs/
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda5 295G 140G 140G 50% /montage/VMs
On procède à l’agrandissement du disque virtuel avec la commande :
[root@srvkvm] $ qemu-img resize /montage/VMs/goumoulen.qcow2 +40G
Image resized.
J’ai donc rajouté 40Go (+40G
) au disque existant.
On vérifie la taille du disque modifié :
[root@srvkvm] $ qemu-img info /montage/VMs/goumoulen.qcow2
image: /montage/VMs/goumoulen.qcow2
file format: qcow2
virtual size: 104 GiB (111669149696 bytes)
disk size: 64 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
Le disque fait toujours 64Go mais il peut s’étendre à 104Go (
virtual size
).
Activer l’extension disque
Après avoir agrandit le disque virtuel, il faut redimensionner la partition dans la VM pour prendre en compte les modifications.
Cette opération se fait dans la VM, il faut donc la démarrer et s’y connecter.
Le disque virtuel est utilisé par une application Web, pour éviter les accès au disque pendant la maintenance, j’ai arrêté le service web :
[root@web3] $ systemctl stop apache2
L’agrandissement de la partition se fait en utilisant la commande
growpart
, elle est fournie par le paquet cloud-guest-utils
;
il faut également le paquet fdisk
.
Installation des prérequis :
[root@web3] $ apt-get install cloud-guest-utils fdisk
La VM utilise 2 disques, ils apparaissent comme /dev/vda
et /dev/vdb
dans la VM.
Le disque vda
est pour le système avec 3 partitions, la racine, le
swap et le Home.
Le disque vdb
est utilisé par l’application de Cloud,
il n’y a qu’une seule partition /dev/vda1
qui est pleine à 100%,
c’est donc cette partition qu’il faut agrandir.
La commande pour agrandir la partition :
growpart /dev/vdb 1
On agrandit la partition N° 1 du disque vdb
.
Sur ma VM il y a eu une erreur :
[root@web3] $ growpart /dev/vdb 1
/usr/bin/growpart: 242: Illegal number: 111669149696 octets,
D’après ce
post,
cela est du à la langue Française utilisée dans la VM.
En appliquant la solution proposée c’est Ok :
[root@web3] $ export LC_ALL=C
[root@web3] $ growpart /dev/vdb 1
CHANGED: partition=1 start=2048 old: size=134215680 end=134217728 new: size=218101727 end=218103775
Ce problème existe en Debian 11, il a été corrigé pour Debian 12
Après cette opération la nouvelle taille de la partition n’est toujours pas vue :
[root@web3] $ df -h
Filesystem Size Used Avail Use% Mounted on
udev 979M 0 979M 0% /dev
tmpfs 198M 568K 197M 1% /run
/dev/vda1 14G 11G 2.3G 83% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vdb1 63G 60G 0 100% /media/goumoulen
/dev/vda3 22G 20G 776M 97% /home
tmpfs 198M 0 198M 0% /run/user/0
Pour que la nouvelle taille soit effective, il faut redimensionner le système de fichier :
[root@web3] $ resize2fs /dev/vdb1
resize2fs 1.46.2 (28-Feb-2021)
Le système de fichiers de /dev/vdb1 est monté sur /media/goumoulen ; le changement de taille doit être effectué en ligne
old_desc_blocks = 8, new_desc_blocks = 13
Le système de fichiers sur /dev/vdb1 a maintenant une taille de 27262715 blocs (4k).
La taille de la partition est maintenant Ok, il y a de l’espace disponible :
[root@web3] $ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 979M 0 979M 0% /dev
tmpfs 198M 568K 197M 1% /run
/dev/vda1 14G 11G 2,3G 83% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
/dev/vdb1 103G 60G 38G 62% /media/goumoulen
/dev/vda3 22G 20G 776M 97% /home
tmpfs 198M 0 198M 0% /run/user/0
Après démarrage du service Apache, l’application de Cloud est à nouveau opérationnelle.