LVM avancé : snapshots, resize à chaud et migration sans downtime

Publié le 15 janvier 2026

Linux
Stockage
Administration

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.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets.

Contactez-nous

Articles similaires qui pourraient vous intéresser