Tutoriel Linux

LVM sous Linux : agrandir un volume sans se tromper de couche

Débutant6 min de lecture

Vous avez agrandi un disque virtuel, mais df -h affiche toujours la même taille. Avec LVM, c’est normal si seule la couche physique a changé. Le disque, la partition, le volume physique, le groupe de volumes, le volume logique et le système de fichiers sont des éléments différents.

La commande lvextend ne règle donc pas tous les cas à elle seule. Avant de l’utiliser, vous devez localiser l’espace libre et identifier le système de fichiers à agrandir. Je vous conseille aussi de vérifier votre sauvegarde avant l’intervention. LVM facilite l’extension d’un volume, mais ne protège pas vos données d’une erreur de périphérique.

Tux agrandit un volume logique à partir de plusieurs disques avec LVM
LVM sépare les disques physiques, le groupe de volumes et le volume logique à agrandir.

Identifier les couches LVM avant de modifier la taille

Un stockage LVM classique suit cette chaîne :

  • un disque ou une partition, par exemple /dev/nvme0n1p3 ;
  • un volume physique (PV) créé sur ce périphérique ;
  • un groupe de volumes (VG) qui réunit un ou plusieurs PV ;
  • un volume logique (LV) découpé dans le VG ;
  • un système de fichiers ext4, XFS ou autre, monté dans un dossier.

Commencez par afficher toute la chaîne. Ne remplacez aucun nom tant que vous n’avez pas relié le point de montage au bon LV et au bon PV :

lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
findmnt -no SOURCE,FSTYPE,TARGET /srv/data
sudo pvs -o pv_name,pv_size,pv_free,vg_name
sudo vgs -o vg_name,vg_size,vg_free
sudo lvs -a -o lv_name,vg_name,lv_size,lv_path,devices
df -hT /srv/data

Dans les exemples suivants, le groupe s’appelle vgdata, le volume logique lvdata et le point de montage /srv/data. Utilisez les valeurs remontées par votre machine. Le guide sur lsblk sous Linux vous aidera si l’arborescence mélange partitions, chiffrement et volumes logiques.

Sauvegarder les données et les métadonnées LVM

Une copie des métadonnées LVM ne remplace pas une sauvegarde des fichiers. Vérifiez d’abord que les données importantes existent sur un autre support et qu’elles sont restaurables. Sauvegardez ensuite la configuration du groupe de volumes :

sudo vgcfgbackup -f /root/vgdata-$(date +%F-%H%M).conf vgdata
sudo lvs -a -o lv_name,vg_name,lv_size,segtype,devices
sudo pvs -o pv_name,pv_uuid,pv_size,pv_free,vg_name

Conservez aussi la sortie de ces commandes dans votre compte rendu d’intervention. Sur un serveur distant qui héberge la racine ou des données critiques, gardez une seconde session SSH ouverte et vérifiez l’accès à la console du fournisseur. Une extension ne demande généralement pas de redémarrage, mais une erreur sur la partition ou la couche chiffrée peut vous couper l’accès.

Cas 1 : le groupe de volumes possède déjà de l’espace libre

Regardez la colonne VFree de vgs. Si vgdata dispose déjà d’au moins 10 Gio libres, vous pouvez tester l’extension du LV sans écrire les métadonnées :

sudo vgs -o vg_name,vg_size,vg_free
sudo lvextend --test -L +10G /dev/vgdata/lvdata

Le mode --test évite l’écriture des métadonnées, mais il ne simule pas chaque effet de bord. Relisez le chemin et la taille, puis lancez l’extension réelle :

sudo lvextend -L +10G /dev/vgdata/lvdata
sudo lvs -o lv_name,vg_name,lv_size,lv_path,devices /dev/vgdata/lvdata

La page de manuel de lvextend propose aussi -l +100%FREE. Cette option consomme tout l’espace libre du VG. Je ne l’utilise pas par défaut : garder une marge facilite une prochaine extension ou la création d’un autre volume.

Agrandir ensuite le système de fichiers ext4 ou XFS

À ce stade, le LV est plus grand, mais df -h peut encore afficher l’ancienne capacité. Il reste à agrandir le système de fichiers. Vérifiez son type au lieu de le déduire du nom du volume :

findmnt -no SOURCE,FSTYPE,TARGET /srv/data
lsblk -f /dev/vgdata/lvdata

Pour un système de fichiers ext4, utilisez resize2fs sur le volume logique :

sudo resize2fs /dev/vgdata/lvdata

L’extension en ligne fonctionne sur les systèmes ext4 modernes lorsqu’ils sont montés. Si l’outil demande un contrôle hors ligne ou si le système de fichiers est ancien, planifiez une maintenance au lieu de forcer. Consultez les limites dans la documentation de resize2fs.

Pour XFS, ciblez le point de montage, pas le périphérique :

sudo xfs_growfs /srv/data

XFS doit être monté pour cette opération et ne sait pas réduire un système de fichiers. La page de manuel de xfs_growfs détaille ce fonctionnement. N’appliquez pas ces commandes à Btrfs, ZFS, LUKS ou une pile RAID : chaque couche possède sa propre procédure.

lvextend -r peut étendre le LV et le système de fichiers dans la même commande lorsqu’il est pris en charge. Pour une intervention sensible, je préfère les deux étapes séparées. Vous voyez immédiatement si LVM a réussi et si l’agrandissement du système de fichiers reste à faire.

Cas 2 : le disque a grandi, mais le PV garde son ancienne taille

Ce cas est fréquent après l’augmentation d’un disque dans un hyperviseur. lsblk peut montrer un disque plus grand alors que pvs ne signale aucun espace libre supplémentaire.

Si le PV repose sur une partition, cette partition doit d’abord occuper le nouvel espace du disque. Ne lancez pas pvresize avant d’avoir confirmé sa nouvelle limite avec lsblk et l’outil de partitionnement. Le tutoriel sur parted sous Linux explique comment identifier le disque, sauvegarder la table et relire les changements sans créer un nouveau système de fichiers.

Quand la partition LVM a réellement été agrandie, testez puis redimensionnez le PV :

sudo pvs -o pv_name,pv_size,pv_free,vg_name
sudo pvresize --test /dev/nvme0n1p3
sudo pvresize /dev/nvme0n1p3
sudo vgs -o vg_name,vg_size,vg_free

La nouvelle capacité doit apparaître dans VFree. Vous pouvez alors revenir à lvextend, puis agrandir le système de fichiers. La documentation de pvresize confirme que l’outil redimensionne un PV déjà présent sans déplacer automatiquement les autres couches.

Si le PV utilise le disque entier, si LUKS se trouve entre la partition et LVM, ou si vous ajoutez un nouveau disque au VG, l’ordre change. Arrêtez-vous dès que la chaîne affichée par lsblk ne correspond pas à l’exemple. Une commande correcte lancée sur la mauvaise couche reste une mauvaise intervention.

Vérifier la taille à chaque niveau après l’extension

Terminez par un contrôle du PV jusqu’au point de montage. Ne vous contentez pas du message de succès de lvextend :

sudo pvs -o pv_name,pv_size,pv_free,vg_name
sudo vgs -o vg_name,vg_size,vg_free
sudo lvs -o lv_name,vg_name,lv_size,lv_path,devices
findmnt -no SOURCE,FSTYPE,TARGET /srv/data
df -hT /srv/data
systemctl --failed
journalctl -k --since "-10 min" -p warning..alert --no-pager

Si lvs affiche la nouvelle taille mais pas df, n’exécutez pas lvextend une seconde fois. Le système de fichiers n’a probablement pas encore été agrandi, ou vous contrôlez un autre point de montage. Reprenez findmnt et lsblk -f avant toute nouvelle commande.

sudo apt update && sudo apt upgrade