Logo 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 :

  1. Identifier la VM et ses composants
  2. Sauvegarder la VM
  3. 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.