Vous partitionnez déjà vos disques. Vous gérez du RAID. Vous pensez que vous maîtrisez le stockage. Et puis un jour, vous devez agrandir un volume sans toucher à la production, faire un snapshot avant une mise à jour critique, ou répartir du stockage entre plusieurs services sans repartitionner. C'est LVM. Et une fois que vous le comprenez, vous ne retournez jamais à des partitions classiques.
Prérequis
- Linux : Debian, Ubuntu, RHEL, Rocky, CentOS
- Un ou plusieurs disques disponibles (physiques ou virtuels)
- Accès root
- Commandes de base :
fdisk,mount,df - Paquet
lvm2installé (apt install lvm2ouyum install lvm2)
La conceptualisation : PV → VG → LV
LVM introduit trois couches d'abstraction entre vos disques physiques et vos points de montage. Comprendre ces trois concepts, c'est comprendre LVM.
Physical Volume (PV) : un disque ou une partition préparée pour LVM. C'est votre matériel brut.
Volume Group (VG) : un pool de PV regroupés ensemble. C'est votre espace total disponible.
Logical Volume (LV) : une partition virtuelle taillée dans le VG. C'est ce que vous montez et utilisez comme un disque normal.
Disque physique ──► PV ──► VG (pool) ──► LV ──► Point de montage
/dev/sda1 pool_data data /mnt/data
/dev/sdb1 pool_data logs /var/log
La puissance de LVM, c'est que les LV peuvent être redimensionnés, snapshottés, migrés — sans toucher aux PV en dessous.
Installation et initialisation
1. Vérifier que LVM est installé
which lvcreate
lvm version
2. Préparer un disque comme Physical Volume
# Vérifier que le disque est disponible
lsblk
# Créer le PV sur le disque entier (pas de partition nécessaire)
sudo pvcreate /dev/sdb
# Vérifier
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- <100.00g <100.00g
3. Créer un Volume Group
sudo vgcreate production /dev/sdb
# Vérifier
sudo vgs
VG #PV #LV #SN Attr VSize VFree
production 1 0 0 -w- <100.00g <100.00g
4. Créer un Logical Volume
# Créer un LV de 50 Go
sudo lvcreate -L 50G -n appdata production
# Vérifier
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Copy% Convert
appdata production -wi-a----- 50.00g
5. Formater et monter
# Formater en ext4
sudo mkfs.ext4 /dev/production/appdata
# Créer le point de montage
sudo mkdir -p /mnt/appdata
# Monter
sudo mount /dev/production/appdata /mnt/appdata
# Rendre permanent dans fstab
echo "/dev/production/appdata /mnt/appdata ext4 defaults 0 2" | sudo tee -a /etc/fstab
Redimensionnement live : l'avantage numéro un
C'est ça, la vraie différence avec des partitions classiques. Vous agrandissez un volume sans unmount, sans repartitionner, sans redémarrer.
Agrandir un LV
# Agrandir le LV de 20 Go supplémentaires
sudo lvextend -L +20G /dev/production/appdata
# Étendre le système de fichiers pour utiliser l'espace supplémentaire
sudo resize2fs /dev/production/appdata
# Vérifier
sudo df -h /mnt/appdata
Réduire un LV (avec précaution)
La réduction est possible mais risquée. Toujours faire un snapshot avant.
# 1. Unmount OBLIGATOIRE pour une réduction
sudo umount /mnt/appdata
# 2. Vérifier le système de fichiers
sudo e2fsck -f /dev/production/appdata
# 3. Réduire le système de fichiers en premier
sudo resize2fs /dev/production/appdata 30G
# 4. Puis réduire le LV
sudo lvreduce -L 30G /dev/production/appdata
# 5. Remounter
sudo mount /dev/production/appdata /mnt/appdata
Snapshots : sauvegarder avant d'agir
Un snapshot LVM, c'est une copie-sur-écriture instantanée. Aucune copie de données au moment de la création. La copie ne se fait qu'au moment où les données originales changent.
Créer un snapshot
# Snapshot de appdata avec 5 Go d'espace pour les changements
sudo lvcreate --snapshot -L 5G -n appdata_backup /dev/production/appdata
# Vérifier
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Copy% Convert
appdata production -wi-a----- 50.00g
appdata_backup production vwi-a-s--- 5.00g appdata 2.34
Monter un snapshot (lecture seule par défaut)
sudo mkdir -p /mnt/appdata_backup
sudo mount -o ro /dev/production/appdata_backup /mnt/appdata_backup
Restaurer depuis un snapshot
# Unmount le volume original
sudo umount /mnt/appdata
# Merger le snapshot sur l'original (irréversible)
sudo lvconvert --merge /dev/production/appdata_backup
# Remounter
sudo mount /dev/production/appdata /mnt/appdata
Thin Provisioning : allouer plus que vous n'avez
Le thin provisioning permet de créer des LV dont la taille annoncée dépasse l'espace physique réellement disponible. L'espace est alloué au fil de l'utilisation réelle, pas au moment de la création.
Créer un thin pool
# Créer un thin pool de 80 Go dans le VG
sudo lvcreate --type thin-pool -L 80G -n thin_pool production
# Créer un thin volume de 200 Go (oui, plus que le pool)
sudo lvcreate --type thin -n webapp --thinpool thin_pool -V 200G production
# Vérifier l'utilisation réelle
sudo lvs --options LV,VG,DATA%,METADATA%,POOL_FREE
LV VG Data% Meta% Pool_free
thin_pool production 12.50 5.20 70.00g
webapp production
Attention : surveiller le DATA% du pool en continu. Si le pool se remplit, les volumes thin deviennent inaccessibles. Ajoutez une alerte sur ce métrique.
Surveillance du thin pool
# Alerte si le thin pool dépasse 80%
DATA_PERCENT=$(sudo lvs --noheadings -o data_percent --nosuffix thin_pool | tr -d ' ')
if (( $(echo "$DATA_PERCENT > 80" | bc -l) )); then
echo "ALERTE : thin pool à ${DATA_PERCENT}%"
fi
Ajouter un disque à un VG existant
Votre VG est plein ? Ajoutez un disque sans toucher aux LV existants.
# Préparer le nouveau disque comme PV
sudo pvcreate /dev/sdc
# Ajouter au VG existant
sudo vgextend production /dev/sdc
# Vérifier l'espace libre
sudo vgs production
VG #PV #LV #SN Attr VSize VFree
production 2 1 0 -w- <199.00g <149.00g
Les LV existants continuent de fonctionner exactement comme avant. Vous pouvez maintenant les agrandir sur le nouvel espace.
Migration de données entre disques
Vous devez remplacer un disque ? LVM fait ça sans interruption de service.
# Ajouter le nouveau disque
sudo pvcreate /dev/sdd
sudo vgextend production /dev/sdd
# Migrer les données de /dev/sdb vers /dev/sdd
sudo pvmove /dev/sdb /dev/sdd
# Vérifier que le PV est vide
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb production lvm2 -m- <100.00g <100.00g ← vide
/dev/sdd production lvm2 a-- <100.00g 0
# Retirer le l'ancien PV du VG
sudo vgreduce production /dev/sdb
# Supprimer le PV
sudo pvremove /dev/sdb
Commandes de référence rapide
| Commande | Action |
pvs | Lister les Physical Volumes |
vgs | Lister les Volume Groups |
lvs | Lister les Logical Volumes |
pvcreate /dev/sdX | Créer un PV |
vgcreate nom /dev/sdX | Créer un VG |
lvcreate -L taille -n nom vg | Créer un LV |
lvextend -L +taille /dev/vg/lv | Agrandir un LV |
resize2fs /dev/vg/lv | Étendre le système de fichiers |
lvcreate --snapshot | Créer un snapshot |
vgextend vg /dev/sdX | Ajouter un disque au VG |
pvmove /dev/sdX | Migrer un PV |
Pièges classiques
Le premier piège est de confondre la taille du LV avec la taille du système de fichiers. lvextend agrandit le volume logique, mais le système de fichiers doit aussi être étendu avec resize2fs — sinon l'espace supplémentaire est invisible. Le deuxième, c'est le thin provisioning sans surveillance : un thin pool plein rend les volumes inaccessibles, sans warning par défaut. Mettez un monitoring dessus dès le jour un. Et enfin, ne jamais réduire un LV sans snapshot préalable. C'est la règle absolue.
Conclusion
LVM n'est pas un outil sophistiqué. C'est une couche d'abstraction qui vous donne du contrôle sur votre stockage sans toucher au matériel. Agrandir en production, sauvegarder en un instant, migrer un disque sans interruption — tout ça devient trivial.
La prochaine étape logique après LVM ? LUKS pour chiffrer ces volumes. Ou explorez btrfs vs ZFS si vous voulez aller encore plus loin sur les snapshots et la déduplication. Vous pouvez aussi consulter nos guides sur LVM avancé : snapshots, resize et migration et RAID logiciel avec mdadm.


