Disques virtuelsDans mon précédent article, j’ai installé une série de VMs sur un hyperviseur aux performances plus que modestes. Les machines virtuelles sont toutes réduites en taille, équivalant à peu de choses près au minimum syndical nécessaire pour disposer d’un système Rocky Linux avec une poignée d’outils et de services. Mon approche consiste ici à partir de ce minimum syndical pour ensuite adapter la taille de la machine virtuelle aux besoins de ce qui sera installé par la suite.

  • Dans l’exemple présenté ici, ma VM sandbox-01.microlinux.fr est installée sur un disque virtuel d’une taille de 6 Go.
  • Je vais l’augmenter de 4 Go pour arriver à une taille totale de 10 Go.

Dans un premier temps, j’éteins ma VM et je me connecte à l’hyperviseur pour modifier la taille de l’image :

# cd /var/lib/libvirt/images/
# qemu-img resize sandbox-01.microlinux.fr.qcow2 +4G
Image resized.

Je démarre la VM, je me connecte et j’installe l’outil growpart :

# dnf install -y cloud-utils-growpart

Voici mon disque virtuel dans son état actuel :

# lsblk | grep sda
sda      8:0    0   10G  0 disk 
├─sda1   8:1    0    1G  0 part [SWAP]
└─sda2   8:2    0    5G  0 part /
# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        466M     0  466M   0% /dev
tmpfs           483M     0  483M   0% /dev/shm
tmpfs           483M  6.5M  476M   2% /run
tmpfs           483M     0  483M   0% /sys/fs/cgroup
/dev/sda2       4.9G  2.3G  2.3G  51% /
tmpfs            97M     0   97M   0% /run/user/0

J’agrandis la partition principale /dev/sda2 :

# growpart -v /dev/sda 2 
update-partition set to true
resizing 2 on /dev/sda using resize_sfdisk_dos
20971520 sectors of 512. total size=10737418240 bytes
## sfdisk --unit=S --dump /dev/sda
label: dos
label-id: 0xd5c6d70d
device: /dev/sda
unit: sectors
...

La partition a visiblement été redimensionnée :

# lsblk | grep sda
sda      8:0    0   10G  0 disk 
├─sda1   8:1    0    1G  0 part [SWAP]
└─sda2   8:2    0    9G  0 part /

Il ne reste plus qu’à redimensionner le système de fichiers ext4 de la partition principale avec l’outil resize2fs :

# resize2fs /dev/sda2
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/sda2 is now 2359035 (4k) blocks long.

J’ai réussi à agrandir l’espace disponible dans ma VM :

# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        466M     0  466M   0% /dev
tmpfs           483M     0  483M   0% /dev/shm
tmpfs           483M  6.5M  476M   2% /run
tmpfs           483M     0  483M   0% /sys/fs/cgroup
/dev/sda2       8.8G  2.3G  6.1G  28% /
tmpfs            97M     0   97M   0% /run/user/0

Et maintenant, si quelqu’un connaît une méthode simple et fiable pour réduire la taille d’une VM dont on n’utilise pas tout l’espace, je suis preneur. Si vous avez un lien vers une bonne doc sur ce sujet, n’hésitez pas à le poster dans les commentaires.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


2 commentaires

Cascador · 14 décembre 2022 à 16 h 08 min

Yo,

Concernant la réduction de la taille d’une VM, suivant le système de fichiers, ça ne peut être tout simplement pas pris en charge (XFS par exemple).

Pour moi le plus sûr reste la réinstallation. Chez nous on installe une VM bis, on la passe en rescue puis on rsync. Si c’est bien préparé/géré l’indisponibilité est de moins de 10 mn. On fait plusieurs rsync, le premier rsync la VM à réduire est en prod (effectué quelques heures avant le lancement de l’opé), le second rsync réduit le delta et permet de voir si il y a un potentiel problème (effectué 30 mn avant l’opé), le dernier rsync se fait partitions démontées sur la VM à réduire (donc services arrêtés sauf strict nécessaire ssh/rsync notamment).

Tcho !

    kikinovak · 14 décembre 2022 à 17 h 40 min

    Effectivement, ça paraît plus simple comme ça. Merci !

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *