TL;DR — Résumé Rapide

Guide complet LVM sous Linux : étendez les volumes logiques, ajoutez des disques, agrandissez ext4/XFS, thin provisioning, snapshots et VMs cloud.

LVM (Logical Volume Manager) est la couche d’abstraction de stockage standard sous Linux qui permet de redimensionner, prendre des instantanés et migrer de l’espace disque sans interruption de service. Ce guide couvre le flux de travail LVM complet : architecture, ajout de disques, extension de volumes logiques, agrandissement et réduction de systèmes de fichiers, thin provisioning, snapshots, extension sur VMs cloud et les erreurs les plus courantes en production.

Prérequis

  • Système Linux avec le paquet lvm2 installé (sudo apt install lvm2 ou sudo dnf install lvm2).
  • Accès root ou sudo.
  • Au moins un groupe de volumes LVM existant, ou un disque à initialiser.
  • Familiarité de base avec le partitionnement de disques sous Linux (fdisk, lsblk, df).

Architecture LVM

LVM introduit trois couches d’abstraction entre les disques physiques et les systèmes de fichiers montés :

CouchePréfixe de commandeDescription
Volume Physique (PV)pv*Disque ou partition initialisé pour une utilisation LVM
Groupe de Volumes (VG)vg*Pool de stockage constitué d’un ou plusieurs PVs
Volume Logique (LV)lv*Périphérique bloc virtuel extrait de l’espace libre du VG

Les Physical Extents (PE) sont la plus petite unité d’allocation dans un VG (4 Mio par défaut). Chaque LV est une plage de PEs. Cette abstraction permet aux LVs de s’étendre sur plusieurs disques et d’être redimensionnés à volonté.

La pile de stockage ressemble à ceci :

/dev/sda1  /dev/sdb1  /dev/sdc    ← disques physiques / partitions
    └─── pvcreate ───────────┘

     Groupe de Volumes (vg_data)   ← pool de PEs

  lv_root  lv_home  lv_db          ← volumes logiques (périphériques blocs)

  ext4     ext4     xfs            ← systèmes de fichiers sur les LVs

Visualiser la Disposition Actuelle

lsblk — arborescence des périphériques blocs

lsblk
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda               8:0    0   50G  0 disk
# ├─sda1            8:1    0    1G  0 part /boot
# └─sda2            8:2    0   49G  0 part
#   ├─vg_sys-lv_root 253:0  0   20G  0 lvm  /
#   └─vg_sys-lv_home 253:1  0   29G  0 lvm  /home

pvdisplay, vgdisplay, lvdisplay

pvdisplay          # volumes physiques : disque, taille, PEs utilisés/libres
vgdisplay          # groupes de volumes : PEs totaux / utilisés / libres
lvdisplay          # volumes logiques : chemin, taille, type de filesystem

Commandes rapides :

pvs     # résumé compact des PVs
vgs     # résumé compact des VGs (regardez VFree pour l'espace disponible)
lvs     # résumé compact des LVs
df -h   # utilisation des filesystems (ce que voit le système d'exploitation)

Ajouter un Nouveau Disque à LVM

C’est l’opération de production la plus courante : une VM reçoit un nouveau disque et vous souhaitez ajouter cette capacité à un VG existant.

Étape 1 — Partitionner le nouveau disque

fdisk /dev/sdb
# Dans fdisk :
# n   → nouvelle partition
# p   → primaire
# 1   → numéro de partition
# [Entrée] deux fois → utiliser tout le disque
# t   → changer le type
# 8e  → Linux LVM
# w   → écrire et quitter

Pour les disques GPT (>2 To ou systèmes UEFI), utilisez gdisk ou parted. Définissez le type de partition sur Linux LVM.

Étape 2 — Initialiser le volume physique

pvcreate /dev/sdb1
# Physical volume "/dev/sdb1" successfully created.

Étape 3 — Étendre le groupe de volumes

vgextend vg_sys /dev/sdb1
# Volume group "vg_sys" successfully extended
vgs    # confirmez que VFree a augmenté

Étape 4 — Étendre le volume logique

# Ajouter exactement 20 Go
lvextend -L +20G /dev/vg_sys/lv_root

# Ou consommer TOUT l'espace libre du VG
lvextend -l +100%FREE /dev/vg_sys/lv_root

Étape 5 — Redimensionner le système de fichiers

ext4 (en ligne, sans démonter) :

resize2fs /dev/vg_sys/lv_root

XFS (en ligne, utiliser le point de montage) :

xfs_growfs /

Étendre un LV avec l’Espace Libre du VG

Si vous avez déjà des PEs libres dans le VG (visibles dans vgs sous VFree), sautez les étapes d’ajout de disque et allez directement à lvextend :

vgs
# VG      #PV #LV #SN Attr   VSize   VFree
# vg_data   2   3   0 wz--n- 200.00g 45.00g   ← 45 Go libres

lvextend -L +30G /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db    # ext4
# ou
xfs_growfs /var/lib/mysql        # XFS

Vous pouvez combiner lvextend et resize2fs en une seule commande avec l’option -r :

lvextend -L +30G -r /dev/vg_data/lv_db

Redimensionnement en Ligne vs Hors Ligne

Système de fichiersCroître en ligne ?Réduire en ligne ?Notes
ext4OuiNon — doit démonterLe plus flexible ; supporte croître et réduire
XFSOuiJamaisXFS ne peut pas être réduit — par conception
BtrfsOuiOuiCroissance et réduction en ligne supportées
ext3OuiNonHérité ; préférez ext4
swapNonNonswapoff, redimensionner LV, mkswap, swapon

Réduire un Volume Logique (Uniquement ext4 — Dangereux)

La réduction est irréversible si elle est mal effectuée. Faites toujours une sauvegarde. XFS ne peut pas être réduit.

# 1. Démonter le système de fichiers
umount /dev/vg_data/lv_home

# 2. Vérifier et réparer le filesystem AVANT de redimensionner
e2fsck -f /dev/vg_data/lv_home

# 3. Réduire le filesystem à la taille cible
resize2fs /dev/vg_data/lv_home 50G

# 4. Réduire le volume logique pour correspondre
lvreduce -L 50G /dev/vg_data/lv_home

# 5. Remonter et vérifier
mount /dev/vg_data/lv_home /home
df -h /home

Règle critique : exécutez toujours resize2fs pour réduire le filesystem AVANT lvreduce. Réduire le LV en premier tronque les données et corrompt le filesystem.


Thin Provisioning

Le thin provisioning permet de surengager le stockage — allouer plus d’espace aux LVs que ce qui existe physiquement dans le VG.

# Créer un thin pool (100 Go dans un VG qui peut n'avoir que 50 Go libres sur disque)
lvcreate --thin -L 100G vg_data/thin_pool

# Créer des thin LVs depuis le pool
lvcreate --thin -V 30G --name lv_web vg_data/thin_pool
lvcreate --thin -V 30G --name lv_db  vg_data/thin_pool

# Surveiller l'utilisation réelle du pool
lvs -a vg_data
# Data%  indique le remplissage du pool — alerte à 80%, action à 90%

Avertissement : si un thin pool se remplit complètement, tous les LVs du pool passent en lecture seule. Surveillez l’utilisation avec lvs.


Snapshots LVM

Les snapshots capturent l’état d’un LV à un instant donné en utilisant le copy-on-write. C’est la méthode la plus rapide pour sauvegarder de manière cohérente un serveur en production.

# Créer un snapshot de 5 Go de lv_root
lvcreate --snapshot -n lv_root_snap -L 5G /dev/vg_sys/lv_root

# Monter le snapshot en lecture seule pour la sauvegarde
mount -o ro /dev/vg_sys/lv_root_snap /mnt/snap
tar -czf /backup/root-$(date +%Y%m%d).tar.gz -C /mnt/snap .
umount /mnt/snap

# Supprimer le snapshot quand c'est terminé
lvremove /dev/vg_sys/lv_root_snap

Fusionner un snapshot (rollback)

# Revenir à l'état du snapshot au prochain démarrage
lvconvert --merge /dev/vg_sys/lv_root_snap
reboot

LVM sur VMs Cloud

Quand vous étendez un disque dans Azure, AWS ou GCP, le système d’exploitation voit le disque grandir mais le PV signale toujours l’ancienne taille. Utilisez pvresize pour mettre à jour la vue LVM :

# Exemple Azure : disque étendu de 30 Go à 50 Go dans le portail
lsblk        # /dev/sda doit afficher 50G

# Redimensionner la partition si nécessaire
sudo growpart /dev/sda 2

# Informer LVM que le PV est maintenant plus grand
pvresize /dev/sda2

# Confirmer que de l'espace libre est apparu dans le VG
vgs

# Étendre le LV et agrandir le filesystem
lvextend -l +100%FREE -r /dev/vg_sys/lv_root

Erreurs Courantes

Message d’erreurCauseSolution
Insufficient free spacePEs insuffisants dans le VGAjoutez un PV avec pvcreate + vgextend, ou utilisez -l +100%FREE
Can't reduce LV below used spaceCible de resize2fs inférieure aux données réellesExécutez e2fsck -f d’abord, puis réduisez le filesystem avant lvreduce
Filesystem not showing new sizeresize2fs / xfs_growfs non exécutés après lvextendExécutez resize2fs /dev/vg/lv ou xfs_growfs /pointdemontage
Device /dev/sdX not foundTable de partitions non relueExécutez partprobe /dev/sdX puis réessayez pvcreate
WARNING: snapshot is fullEspace COW épuiséAgrandissez le snapshot : lvextend -L +2G /dev/vg/snap ou recréez-le

LVM vs ZFS vs Btrfs vs mdadm vs Partitions Simples

FonctionnalitéLVMZFSBtrfsmdadmPartitions simples
Redimensionnement en ligneOuiOuiOuiLimitéNon
SnapshotsOui (COW)Oui (COW)Oui (COW)NonNon
RAIDOuiOui (natif)OuiOuiNon
CompressionNonOuiOuiNonNon
Thin provisioningOuiOuiPartielNonNon
Courbe d’apprentissageMoyenneÉlevéeMoyenneMoyenneFaible
Idéal pourServeurs Linux générauxNAS, FreeBSDDesktop, FedoraRAID héritéDisque unique simple

Résumé

  • LVM ajoute l’abstraction PV → VG → LV : redimensionnez et déplacez le stockage sans redémarrer.
  • Utilisez pvdisplay, vgdisplay, lvdisplay et vgs pour comprendre la disposition actuelle.
  • Ajouter de la capacité : pvcreatevgextendlvextendresize2fs ou xfs_growfs.
  • Agrandir ext4 et XFS est toujours en ligne et sûr ; utilisez -r sur lvextend pour une seule étape.
  • Réduire nécessite un démontage + e2fsck + resize2fs avant lvreduce. XFS ne peut pas être réduit.
  • Le thin provisioning permet le surengagement ; surveillez l’utilisation du pool avec lvs.
  • Les snapshots sont des sauvegardes COW rapides ; dimensionnez-les généreusement.
  • Sur les VMs cloud, utilisez pvresize après avoir étendu le disque dans le portail.

Articles Connexes