LVM (Logical Volume Manager) est l'outil standard pour gérer le stockage sous Linux. Au-delà de la création basique de volumes, il apporte des fonctionnalités lourdes : snapshots pour backup, resize à chaud, et migration de données entre disques sans downtime.
Plan de l'article
- Rappel architecture LVM : PV, VG, LV
- Snapshots LVM : backup rapide et restauration
- Resize à chaud : étendre et réduire des volumes
- Migration avec pvmove : remplacer un disque sans arrêt
- Troubleshooting et bonnes pratiques
- Conclusion
Si vous êtes nouveau à LVM, consultez d'abord notre guide sur les bases de LVM.
Rappel architecture LVM : PV, VG, LV
Hiérarchie LVM
Disques physiques (/dev/sda, /dev/sdb)
↓
Physical Volumes (PV) - pvcreate
↓
Volume Group (VG) - vgcreate
↓
Logical Volumes (LV) - lvcreate
↓
Filesystem (ext4, xfs, etc.)
Commandes de base
# Créer un Physical Volume
pvcreate /dev/sdb
# Créer un Volume Group
vgcreate vg_data /dev/sdb
# Créer un Logical Volume de 50G
lvcreate -n lv_app -L 50G vg_data
# Formatter et monter
mkfs.ext4 /dev/vg_data/lv_app
mount /dev/vg_data/lv_app /data
Visualiser la configuration
# Vue d'ensemble
pvs # Physical Volumes
vgs # Volume Groups
lvs # Logical Volumes
# Détails complets
pvdisplay /dev/sdb
vgdisplay vg_data
lvdisplay /dev/vg_data/lv_app
# Espace libre
vgs -o +vg_free
pvs -o +pv_free,pv_used
Snapshots LVM : backup rapide et restauration
Principe des snapshots COW
Les snapshots LVM utilisent Copy-On-Write (COW) :
- À la création, le snapshot ne prend quasiment pas d'espace
- Seules les données modifiées dans le volume original sont copiées dans le snapshot
- Si 100 Go de données avec 5 Go de modifications = snapshot de ~5 Go nécessaire
Important : Un snapshot n'est pas un backup. Si le disque est corrompu, le snapshot est aussi perdu.
Créer un snapshot
# Créer un snapshot de 10G pour /dev/vg_data/lv_app
lvcreate -L 10G -s -n lv_app_snap /dev/vg_data/lv_app
# Vérifier
lvs
Le snapshot peut être monté en lecture seule pour effectuer un backup :
mkdir /mnt/snapshot
mount -o ro /dev/vg_data/lv_app_snap /mnt/snapshot
# Backup avec rsync
rsync -av /mnt/snapshot/ /backup/lv_app/
# Démonter après backup
umount /mnt/snapshot
Surveiller l'utilisation d'un snapshot
# Voir le remplissage du snapshot
lvs -o +lv_size,origin,snap_percent
# Si le snapshot atteint 100%, il devient **invalide** et inutilisable
Étendre un snapshot automatiquement
Éditer /etc/lvm/lvm.conf :
snapshot_autoextend_threshold = 80
snapshot_autoextend_percent = 20
Cela signifie : si le snapshot atteint 80 %, l'étendre automatiquement de 20 %.
Redémarrer le service :
systemctl restart lvm2-monitor
Restaurer depuis un snapshot (merge)
# Fusionner le snapshot avec l'original (revenir en arrière)
lvconvert --merge /dev/vg_data/lv_app_snap
# Si le LV est monté, la fusion se fera au prochain reboot
# Sinon, elle s'exécute immédiatement
# Après merge, le snapshot n'existe plus
Supprimer un snapshot
lvremove /dev/vg_data/lv_app_snap
Resize à chaud : étendre et réduire des volumes
Étendre un Logical Volume (resize up)
Pour des stratégies complètes de sauvegarde utilisant les snapshots LVM, consultez notre guide backup avec rsync et LVM.
Cas 1 : Espace libre dans le VG
# Vérifier l'espace disponible
vgs -o +vg_free
# Étendre le LV de 20G
lvextend -L +20G /dev/vg_data/lv_app
# Redimensionner le filesystem (ext4)
resize2fs /dev/vg_data/lv_app
# Pour XFS
xfs_growfs /data
Pour une gestion propre du stockage, consultez notre guide sur les partitions et filesystems Linux.
Cas 2 : Ajouter un nouveau disque au VG
# Créer un PV sur le nouveau disque
pvcreate /dev/sdc
# Ajouter au VG
vgextend vg_data /dev/sdc
# Étendre le LV
lvextend -L +50G /dev/vg_data/lv_app
resize2fs /dev/vg_data/lv_app
Raccourci : resize automatique du filesystem
# -r fait le resize2fs automatiquement
lvextend -L +20G -r /dev/vg_data/lv_app
Réduire un Logical Volume (resize down)
Attention : La réduction nécessite de démonter le volume et peut entraîner une perte de données si mal faite.
Supporte uniquement ext2/ext3/ext4 (pas XFS).
# 1. Démonter le volume
umount /data
# 2. Vérifier le filesystem
e2fsck -f /dev/vg_data/lv_app
# 3. Réduire le filesystem à 30G
resize2fs /dev/vg_data/lv_app 30G
# 4. Réduire le LV à 30G
lvreduce -L 30G /dev/vg_data/lv_app
# 5. Remonter
mount /dev/vg_data/lv_app /data
Raccourci avec -r (fait les 2 opérations)
lvreduce -L 30G -r /dev/vg_data/lv_app
Migration avec pvmove : remplacer un disque sans arrêt
Cas d'usage
- Remplacer un disque défaillant
- Passer d'un disque lent (HDD) à un disque rapide (SSD)
- Réorganiser les données sans downtime
Étape 1 : Ajouter le nouveau disque
# Créer un PV sur le nouveau disque
pvcreate /dev/sdd
# Ajouter au VG
vgextend vg_data /dev/sdd
Étape 2 : Migrer les données avec pvmove
# Migrer TOUTES les données de /dev/sdb vers /dev/sdd
pvmove /dev/sdb /dev/sdd
# Migrer uniquement un LV spécifique
pvmove -n /dev/vg_data/lv_app /dev/sdb /dev/sdd
# Suivre la progression
pvmove -i 5 /dev/sdb /dev/sdd # Affiche progression toutes les 5s
En arrière-plan
pvmove -b /dev/sdb /dev/sdd
# Vérifier le statut
lvs -o +devices
Étape 3 : Retirer l'ancien disque
# Retirer le PV du VG
vgreduce vg_data /dev/sdb
# Supprimer le label LVM
pvremove /dev/sdb
# Retirer physiquement le disque si nécessaire
Vérification finale
pvs
lvs -o +devices
# Vérifier que les LV sont bien sur /dev/sdd
Troubleshooting et bonnes pratiques
Diagnostic rapide
# Voir l'utilisation détaillée des PV
pvs -o +pv_used,pv_free
# Voir quels PV contiennent quels LV
lvs -o +devices
# Historique des opérations LVM
vgcfgbackup -f - vg_data
# Vérifier la santé LVM
vgscan
lvscan
Erreurs courantes
1. "Insufficient free space"
# Vérifier l'espace libre
vgs -o +vg_free
# Solution : ajouter un nouveau disque ou étendre le PV existant
2. "Snapshot invalid"
Le snapshot a été rempli à 100 %. Il devient inutilisable.
# Supprimer et recréer avec plus d'espace
lvremove /dev/vg_data/lv_app_snap
lvcreate -L 20G -s -n lv_app_snap /dev/vg_data/lv_app
3. "Cannot resize to X extents"
Le PV est fragmenté. Utiliser pvmove pour défragmenter :
pvmove /dev/sdb
Bonnes pratiques
1. Toujours laisser de l'espace libre dans le VG
# Minimum 10-20% de free space pour snapshots et urgences
vgs -o +vg_free
2. Sauvegarder la configuration LVM
# Backup automatique dans /etc/lvm/backup/
vgcfgbackup vg_data
# Restaurer en cas de problème
vgcfgrestore vg_data
3. Nommer clairement VG et LV
# Bon
vgcreate vg_data /dev/sdb
lvcreate -n lv_postgresql -L 50G vg_data
# Éviter
vgcreate vg0 /dev/sdb
lvcreate -n lv0 -L 50G vg0
4. Tester les snapshots régulièrement
# Créer, monter, vérifier, supprimer
lvcreate -L 10G -s -n test_snap /dev/vg_data/lv_app
mount -o ro /dev/vg_data/test_snap /mnt/test
ls -lah /mnt/test
umount /mnt/test
lvremove /dev/vg_data/test_snap
5. Surveiller les snapshots en production
# Alerter si snapshot > 80%
lvs -o +snap_percent | awk '$NF > 80 {print $0}'
Conclusion
LVM offre une flexibilité exceptionnelle pour gérer le stockage Linux. Les snapshots permettent des backups rapides sans downtime. Le resize à chaud évite les interruptions de service. La migration avec pvmove remplace des disques en production sans arrêt.
Maîtriser ces techniques rend l'administration du stockage bien plus sûre au quotidien.


