Dans 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.
4 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 !
Walter · 24 février 2023 à 8 h 08 min
Bonjour,
comment vous faites pour copier les contextes selinux ?
Pour copier les données j’utilise rsync -avzh
kikinovak · 24 février 2023 à 19 h 47 min
Le redimensionnement de la VM s’effectue avec les données en place. Pas de prise de tête avec SELinux, pas de copie ou autre
rsync
à effectuer.