Aller au contenu
Administration Linux medium

Snapshots LVM : sauvegarder à chaud et revenir en arrière

8 min de lecture

Un snapshot LVM est une photo instantanée d'un volume à un instant précis, prise à chaud, sans arrêter le service. Il sert à deux choses : sauvegarder un volume en cours d'utilisation de façon cohérente, et revenir en arrière après une opération risquée. Ce guide montre comment créer un snapshot, l'utiliser pour une sauvegarde, et surtout restaurer un état antérieur avec lvconvert --merge. Pour administrateurs Linux intermédiaires, sur Debian/Ubuntu et RHEL/AlmaLinux. Toutes les sorties proviennent d'un test réel.

  • Créer un snapshot d'un volume logique avec lvcreate -s
  • Comprendre le mécanisme copy-on-write et dimensionner le snapshot
  • Sauvegarder un volume à chaud sans incohérence
  • Restaurer un état antérieur (rollback) avec lvconvert --merge
  • Éviter qu'un snapshot saturé ne soit invalidé

Une pile LVM en place avec au moins un volume logique formaté et monté (voir le guide LVM). Le Volume Group doit disposer d'espace libre (vgs, colonne VFree) pour accueillir le snapshot.

Un snapshot est une image figée d'un volume logique (l'origine) à l'instant de sa création. Le mécanisme s'appelle le copy-on-write (COW) : au lieu de copier tout le volume, LVM ne stocke que les blocs modifiés depuis la prise du snapshot. Tant que rien ne change sur l'origine, le snapshot ne consomme presque rien.

C'est ce qui rend le snapshot rapide et léger à créer, même sur un gros volume. La taille que vous réservez (-L) ne sert qu'à stocker ces différences : elle se dimensionne selon le volume d'écritures attendu pendant la durée de vie du snapshot, pas selon la taille de l'origine.

On crée un snapshot avec l'option -s (--snapshot), en réservant une taille pour les blocs modifiés :

  1. Créer le snapshot d'un volume lvdata, avec 256 Mio réservés :

    Fenêtre de terminal
    sudo lvcreate -s -L 256M -n lvdata-snap vg_data/lvdata
    Logical volume "lvdata-snap" created.
  2. Modifier l'origine (le volume continue de servir normalement), puis observer le remplissage du snapshot :

    Fenêtre de terminal
    sudo lvs -o lv_name,origin,data_percent vg_data
    LV Origin Data%
    lvdata
    lvdata-snap lvdata 0.02

Le snapshot lvdata-snap pointe vers son origine lvdata, et son Data% grimpe à mesure que l'origine est modifiée. Ici, après une petite écriture, il n'est rempli qu'à 0,02 % : seuls les blocs réellement changés sont copiés.

Sauvegarder un volume à chaud de façon cohérente

Section intitulée « Sauvegarder un volume à chaud de façon cohérente »

Le premier usage du snapshot est la sauvegarde cohérente. Sauvegarder un volume pendant qu'il est écrit produit des fichiers incohérents (à moitié modifiés). Le snapshot résout ce problème : on fige l'état à un instant T, puis on sauvegarde le snapshot pendant que l'origine continue de tourner.

Fenêtre de terminal
# 1. Figer l'état actuel
sudo lvcreate -s -L 1G -n db-snap vg_data/lv_db
# 2. Sauvegarder le snapshot (l'origine reste en service)
sudo mount -o ro /dev/vg_data/db-snap /mnt/snap
sudo tar czf /backup/db-$(date +%F).tar.gz -C /mnt/snap .
sudo umount /mnt/snap
# 3. Libérer le snapshot une fois la sauvegarde terminée
sudo lvremove -y vg_data/db-snap

La base de données ne subit aucune interruption : elle écrit sur l'origine, vous sauvegardez l'image figée.

Restaurer un état antérieur avec lvconvert --merge

Section intitulée « Restaurer un état antérieur avec lvconvert --merge »

Le second usage, souvent oublié, est le rollback. Avant une mise à jour risquée, on prend un snapshot ; si l'opération tourne mal, on fusionne le snapshot dans l'origine pour revenir à l'état d'avant, avec lvconvert --merge.

  1. Démonter l'origine (le merge immédiat exige qu'elle soit fermée) :

    Fenêtre de terminal
    sudo umount /mnt/data
  2. Fusionner le snapshot dans l'origine :

    Fenêtre de terminal
    sudo lvconvert --merge vg_data/lvdata-snap
    Merging of volume vg_data/lvdata-snap started.
    vg_data/lvdata: Merged: 99.99%
  3. Remonter : l'origine est revenue à l'état du snapshot, et le snapshot est consommé puis supprimé automatiquement :

    Fenêtre de terminal
    sudo mount /dev/vg_data/lvdata /mnt/data
    cat /mnt/data/fichier.txt
    # contenu version 1 (les modifications postérieures ont disparu)

La parade : dimensionner large la zone du snapshot quand l'origine est très active, et surveiller son Data% pendant sa durée de vie. Un snapshot n'a pas vocation à vivre longtemps : créez-le, utilisez-le, supprimez-le.

Le snapshot décrit ici est le snapshot classique : il préalloue une taille fixe et devient invalide s'il déborde. Quand on multiplie les snapshots (sauvegardes fréquentes, environnements de test), les snapshots fins (thin snapshots) sont plus efficaces : ils ne préallouent aucun espace fixe et partagent les blocs du pool.

Fenêtre de terminal
# Snapshot d'un thin volume : pas de taille -L à réserver
sudo lvcreate -s -n lvdata-snap vg_data/thin_lvdata

Le risque se déplace alors vers la saturation du thin pool plutôt que du snapshot lui-même. Voir le guide thin provisioning LVM.

SymptômeCause probableSolution
lvcreate -s refuse : espace insuffisantVG pleinvgs (VFree), libérer ou ajouter un disque
Snapshot invalidé / disparusnapshot saturé (Data% à 100)le recréer plus grand, surveiller le remplissage
lvconvert --merge ne fait rien tout de suiteorigine encore montéedémonter l'origine, ou la fusion s'applique au reboot
Le merge ne rend pas la mainorigine en cours d'utilisationfermer tous les accès au volume

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Un snapshot (lvcreate -s) fige un volume à un instant T, en copy-on-write (seuls les blocs modifiés sont copiés).
  • Il sert à la sauvegarde cohérente (sauvegarder le snapshot pendant que l'origine tourne) et au rollback.
  • Le rollback se fait avec lvconvert --merge ; démonter l'origine pour un effet immédiat, sinon il s'applique au redémarrage.
  • Un snapshot saturé est invalidé : dimensionner sa zone selon les écritures attendues et surveiller son Data%.
  • Pour des snapshots nombreux, préférer les snapshots fins sur un thin pool.
  • Un snapshot est temporaire : créer, utiliser, supprimer.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn