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
lvm2installé (sudo apt install lvm2ousudo 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 :
| Couche | Préfixe de commande | Description |
|---|---|---|
| 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 fichiers | Croître en ligne ? | Réduire en ligne ? | Notes |
|---|---|---|---|
| ext4 | Oui | Non — doit démonter | Le plus flexible ; supporte croître et réduire |
| XFS | Oui | Jamais | XFS ne peut pas être réduit — par conception |
| Btrfs | Oui | Oui | Croissance et réduction en ligne supportées |
| ext3 | Oui | Non | Hérité ; préférez ext4 |
| swap | Non | Non | swapoff, 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’erreur | Cause | Solution |
|---|---|---|
Insufficient free space | PEs insuffisants dans le VG | Ajoutez un PV avec pvcreate + vgextend, ou utilisez -l +100%FREE |
Can't reduce LV below used space | Cible de resize2fs inférieure aux données réelles | Exécutez e2fsck -f d’abord, puis réduisez le filesystem avant lvreduce |
Filesystem not showing new size | resize2fs / xfs_growfs non exécutés après lvextend | Exécutez resize2fs /dev/vg/lv ou xfs_growfs /pointdemontage |
Device /dev/sdX not found | Table de partitions non relue | Exécutez partprobe /dev/sdX puis réessayez pvcreate |
WARNING: snapshot is full | Espace 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é | LVM | ZFS | Btrfs | mdadm | Partitions simples |
|---|---|---|---|---|---|
| Redimensionnement en ligne | Oui | Oui | Oui | Limité | Non |
| Snapshots | Oui (COW) | Oui (COW) | Oui (COW) | Non | Non |
| RAID | Oui | Oui (natif) | Oui | Oui | Non |
| Compression | Non | Oui | Oui | Non | Non |
| Thin provisioning | Oui | Oui | Partiel | Non | Non |
| Courbe d’apprentissage | Moyenne | Élevée | Moyenne | Moyenne | Faible |
| Idéal pour | Serveurs Linux généraux | NAS, FreeBSD | Desktop, Fedora | RAID 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,lvdisplayetvgspour comprendre la disposition actuelle. - Ajouter de la capacité :
pvcreate→vgextend→lvextend→resize2fsouxfs_growfs. - Agrandir ext4 et XFS est toujours en ligne et sûr ; utilisez
-rsurlvextendpour une seule étape. - Réduire nécessite un démontage +
e2fsck+resize2fsavantlvreduce. 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
pvresizeaprès avoir étendu le disque dans le portail.