LVM Avancé : Les snapshots
Table des matières
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)
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 :
Résultat de lvs :
Dans un premier temps, vérifier qu'il y a de la place sur le VG :
Identifier le LV sur lequel on va réaliser le snapshot en les listant :
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 :
On vérifie que le snapshot a été créé :
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é !
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 :
On revient au snapshot :
Une fois l'opération terminée, on remonte le système de fichiers
Le LV "snapshot" étant supprimé, si on souhaite refaire des manipulations, ne pas oublier de recréer un snapshot.
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 :
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.
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" :
Nul besoin de démonter le système de fichiers ou rebooter dans ce cas.
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% :
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 !
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
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 !