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 offre des fonctionnalités puissantes : 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
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)
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
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 et efficace au quotidien.


