Généralités système Linux

LVM Avancé : Les snapshots

Table des matières

Introduction



Dans cet article, nous allons explorer une fonctionalité avancée de LVM : Les snapshots.
Pour des informations générales sur LVM, je vous renvoie à l'article LVM sous Linux (Volumes Logiques)

Quelques informations sur les snapshots



LVM permet de réaliser des clichés instantanés de volumes logiques (snapshots).
Les snapshots sont des volumes logiques "spéciaux". Ce LV "snapshot" ne contient pas de système de fichiers et ne peut donc pas être monté. Il va stocker uniquement les modifications de données (ajout/suppressions).
On définira une taille à ce volume logique de type snapshot, mais cette valeur n'agrandira pas le volume logique initial évidemment

Il est repérable par le premier attribut de type s.
L'utilisation des données stockées depuis la réalisation du snapshot est représenté dans la colone Data%.
La colone Origin indique le LV original sur lequel le snapshot est appliqué
Et ce LV Original a le premier attribut de type o.

Voici un exemple pour le volume datalv d'une taille de 1Go avec un snapshot de celui-ci nommé datasnap de 1Go également :

Résultat de df :
Code :
Sys. de fichiers          Taille Utilisé Dispo Uti% Monté sur
devtmpfs                    4,0M       0  4,0M   0% /dev
tmpfs                       985M       0  985M   0% /dev/shm
tmpfs                       394M    5,5M  389M   2% /run
/dev/mapper/rootvg-root      31G    1,5G   30G   5% /
/dev/sda1                  1014M    207M  808M  21% /boot
tmpfs                       197M       0  197M   0% /run/user/0
/dev/mapper/rootvg-datalv  1014M    803M  212M  80% /data


Résultat de lvs :
Code :
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     rootvg -wi-ao---- 30,95g
  swap     rootvg -wi-ao---- <2,05g
  datalv   rootvg owi-aos---  1,00g
  datasnap rootvg swi-a-s---  1,00g      datalv 59,08


Créer un snapshot d'un LV



Dans un premier temps, vérifier qu'il y a de la place sur le VG :

Code BASH :
vgs

Code :
  VG     #PV #LV #SN Attr   VSize   VFree
  rootvg   1   3   0 wz--n- <49,00g <15,00g


Identifier le LV sur lequel on va réaliser le snapshot en les listant :
Code BASH :
lvs

Code :
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   rootvg -wi-ao---- 30,95g
  swap   rootvg -wi-ao---- <2,05g
  datalv rootvg -wi-a-----  1,00g


Si on utilise le mécanisme de snapshot LVM sur le volume logique qui est monté sur la racine (avant de réaliser une mise à jour par exemple), pensez à snapshoter les LV des autres systèmes de fichiers qui seraient impactés par les manipulations. Si parmis ces systèmes de fichiers, certains n'utilisent pas LVM (/boot par exemple) pensez à faire une archive des données de ceux-ci.

On crée le snapshot en lui donnant un nom exeplicite (par exemple le nom du lv avec snap en suffixe) et on lui définit une taille, par exemple ici 5Go :
Code BASH :
lvcreate -L 5G -s -n rootsnap /dev/rootvg/root


On vérifie que le snapshot a été créé :

Code BASH :
lvs

Code :
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     rootvg owi-aos--- 30,95g
  rootsnap rootvg swi-a-s---  5,00g      root   0,01
  swap     rootvg -wi-ao---- <2,05g
  datalv   rootvg -wi-a-----  1,00g


Restaurer un snapshot



Si on NE souhaite PAS conserver les modifications faites depuis la réalisation du snapshot (pour revenir au moment où le snapshot a été créé), on va restaurer le volume logique grâce à la commande lvconvert. Après les manipulations, le LV "snapshot" sera supprimé automatiquement

Il est à noter que le système de fichiers doit être démonté !


Cas d'un système de fichiers démontable



Démonstration avec le système de fichiers monté sur /data avec un LV datalv dans le VG root.

On démonte le système de fichiers :
Code BASH :
umount /data 


On revient au snapshot :
Code BASH :
lvconvert --mergesnapshot /dev/rootvg/datasnap

Code :
  Merging of volume rootvg/datasnap started.
  rootvg/datalv: Merged: 100,00%


Une fois l'opération terminée, on remonte le système de fichiers
Code BASH :
mount /data


Le LV "snapshot" étant supprimé, si on souhaite refaire des manipulations, ne pas oublier de recréer un snapshot.


Cas d'un système de fichiers non démontable



Dans le cas d'un snapshot de la racine par exemple, ou d'un volume utilisé par des processus qu'on ne peut stopper, on va lancer directement la commande lvconvert :

Code BASH :
lvconvert --mergesnapshot /dev/rootvg/rootsnap

Code :
  Delaying merge since origin is open.
  Merging of snapshot rootvg/rootsnap will occur on next activation of rootvg/root.


Pour terminer la restauration, on n'aura pas d'autre choix que de rebooter.

Comme dans le cas précédent, le LV "snapshot" étant supprimé, si on souhaite refaire des manipulations, ne pas oublier de recréer un snapshot.



Fusionner le snapshot



Si après nos manipulations on souhaite garder les données en l'état, on va supprimer le snapshot. Le LV d'origine et le LV snapshot seront fusionnés.

Pour cela, on supprime simplement le LV "snapshot" :

Code BASH :
lvremove /dev/rootvg/rootsnap

Code :
Do you really want to remove active logical volume rootvg/rootsnap? [y/n]: y
  Logical volume "rootsnap" successfully removed.


Nul besoin de démonter le système de fichiers ou rebooter dans ce cas.


A propos de la taille des snapshots



Lorsqu'on créé un volume logique de type snapshot, on définit une taille pour celui-ci. Si la taille du volume logique n'est pas assez grande, il peut y avoir des corruptions de données.

La taille va augmenter à chaque modification sur le système de fichier concerné : création, modification, suppression de fichiers. Il peut donc théoriquement avoir besoin de plus de place sur le LV "snapshot" que de place initiale sur le LV source. Il s'agit du même mécanisme que les snapshots de machine virtuelle.

Cependant, la taille du LV ne s'incrémente pas automatiquement.
On peut surveiller la taille du snapshot avec la colonne Data% :

Code BASH :
lvs


Code :
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     rootvg -wi-ao---- 30,95g
  swap     rootvg -wi-ao---- <2,05g
  datalv   rootvg owi-aos---  1,00g
  datasnap rootvg swi-a-s---  1,00g      datalv 95,51


Il existe des mécanisme dans LVM pour agrandir le LV "snapshot" automatiquement, grâce aux options :
snapshot_autoextend_threshold => Pourcentage d'occupation des données à partir duquel le LV "snapshot" sera agrandi. Si définit à 70, dès que 700Mo sont consommés, le volume sera agrandi.
snapshot_autoextend_percent => Pourcentage d'agrandissement du volume. Si définit à 20, un LV "snapshot" de 1Go sera agrandi à 1.2Go

Je vous donne juste mon avis sur ce dernier point, les snapshots doivent être utilisés ponctuellement, sans abus.
Je vous déconseille ce genre de modifications, car même si cela semble régler le souci du snapshot plein, vous devrez superviser régulièrement l'occupation du VG !
Cette page a été vue 7998 fois