technique:infrastructure:resize_vm_disks

Attention:

Cet article nécessite de comprendre les bases de LVM. Il faut être root pour toutes les commandes.

Il peut arriver que sur une machine virtuelle, un volume logique soit quasiment plein (par exemple, celui monté sur /var/lib/docker).

Si le disque virtuel de la machine virtuelle est aussi plein, l’opération nécessite plusieurs étapes.

Important:

Il peut arriver qu’il reste de l’espace disque libre même si les partitions sont pleines. On peut le vérifier dans la colonne VFree de la commande vgs. S’il en reste, on pourra simplement augmenter la taille de la partition logique.

Toutes les opérations se font à chaud, pas besoin de redémarrage.

On pensera à activer le hotplug des VM s’il n’est pas activé pour éviter un redémarrage de la VM. Pour augmenter la taille d’un disque, on se rend dans l’onglet Hardware de la machine virtuelle, puis on choisit l’option Resize disk ainsi que le nombre de G à ajouter. Par exemple, pour augmenter le premier disque de pica02 :

Une fois le redimensionnement effectué, on devrait constater que le disque associé sur la machine a bien augmenté de taille (fdisk -l).

Attention:

Cette étape n’est nécessaire que si une partition LVM est utilisée comme Physical Volume.

Si le PV utilise un disque entier, on peut passer à l’étape suivante. Pour le savoir, utilisez la commande qui suit et regardez si le disque en question contient une partition LVM : si oui, il faut passer par cette étape.

En général, lorsque les machines virtuelles sont installées, le partitionnement automatique avec LVM va créer ce schéma : une partition standard pour le /boot, le reste avec LVM.

snippet.bash
$ fdisk -l /dev/sd*
Périphérique Amorçage  Début       Fin  Secteurs Taille Id Type
/dev/sda1    *          2048    499711    497664    XM 83 Linux
/dev/sda2             501758 125829119 125327362    YG  5 Étendue
/dev/sda5             501760 125829119 125327360    YG 8e LVM Linux

La partition à étendre sera donc la partition étendue, puis la partition LVM. Pour ce faire :

snippet.bash
$ parted /dev/sda
# Les numéros peuvent changer sur votre installation
(parted) resizepart 2 100%
(parted) quit

On vérifie que la partition étendue s’étend sur tout l’espace disponible. On réalise alors la même opération avec la partition LVM.

snippet.bash
$ parted /dev/sda
(parted) resizepart 5 100%
(parted) quit

À ce stade, les partitions occupent tout l’espace disponible alloué sur l’interface web Proxmox.

Une simple commande suffit pour que le PV associé à /dev/sda5 mette à jour sa taille disponible :

snippet.bash
$ pvresize /dev/sda5

Dans mon exemple, avant :

snippet.bash
$ pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda5  vg00 lvm2 a--  59,76g    0 
  /dev/sdb   vg01 lvm2 a--  30,00g    0

Après :

snippet.bash
$ pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda5  vg00 lvm2 a--  99,76g 40,00g
  /dev/sdb   vg01 lvm2 a--  30,00g     0

Le VG est “étendu” automatiquement.

On en vient enfin à notre but : mettre à jour à chaud la taille de notre volume logique, qui est monté (sur /, ou /DATA, ou /var/lib/docker…)

Par exemple, on veut augmenter dans notre cas le LV monté sur / :

snippet.bash
lvdisplay /dev/vg00/root
  --- Logical volume ---
  LV Path                /dev/vg00/root
  LV Name                root
  VG Name                vg00
  [...]
  LV Size                57,90 GiB

Pour ce faire :

snippet.bash
$ lvresize --extents +100%FREE --resizefs /dev/mapper/vg00/root

Nous utilisons le système de fichiers ext4, donc l’option --resizefs fonctionne même si la partition est montée. À ce stade, l’espace est disponible et il n’y a pas de redémarrage à faire.

  • technique/infrastructure/resize_vm_disks.txt
  • de qduchemi