En train d’importer un blog avec 36000 entrées à partir d’un fichier de WRX de 54 Mo, je voyais l’espace disque se remplir à vue d’oeil ! à 92% munin commençait à m’envoyer des mails d’alerte.
Pas de panique, comme j’utilise kvm et lvm, l’ajout d’espace disque peut se faire à chaud. La difficulté était que je devais tout faire en shell distant.
J’ai ainsi réussi à sauver mon processus d’import en ajoutant un disque et augmenter le volume logique mais le disque virtuelle était au mauvais format: 20 Go virtuel et 20 Go sur l’hôte même si il était vide.
Finalement voici la méthode pour ajouter à chaud de l’espace sur une VM en train de saturer.
Créer un nouveau disque
Se mettre sur l’hôte et en tant que root en remplaçant staging-2.qcow par ce que vous voulez:
qemu-img create -f qcow2 /var/lib/libvirt/images/staging-2.qcow2 20G
Ne pas utiliser les option de preallocation
Attacher le disque à la VM
C’est là que réside la subtilité pour que la VM croire avoir à faire à un disque de 20G même si le fichier ne fait que quelques centaines de kilos. La commande qemu-img info permet de voir les propriétés du disque virtuel.
/var/lib/libvirt/images# qemu-img info staging-2.qcow2
image: test.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
On va attacher le disque à la VM en précisant bien le driver qcow2
# virsh attach-disk staging /var/lib/libvirt/images/staging-2.qcow2 vdb --driver qemu --subdriver qcow2 --targetbus virtio --persistent --config --live
Remplacer vdb par un identifiant de device disponible dans la VM qui s’appelle ici staging.
En tant que root sur le VM, vérifier la présence du disque et qu’il a la bonne taille
# fdisk -l
Disque /dev/vdb : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Ajouter le disque /dev/vdb dans le volume group à étendre., ici staging-vg
# vgextend staging-vg /dev/vdb
Ajouter tout l’espace au volume logique, ici /dev/staging-vg/root
# lvm lvextend -l +100%FREE /dev/staging-vg/root
Redimensionner le système de fichier qui se trouve ici dans /dev/mapper/staging--vg-root
resize2fs -p /dev/mapper/staging--vg-root