Les sauvegardes avec une structure LVM
Partons maintenant dans ce chapitre à l'assaut des sauvegardes d'une structure LVM. En plus de toutes les fonctionnalités que l’on vient de décrire, le système LVM propose également deux commandes permettant de générer une sauvegarde ou une restauration de l’ensemble des modifications réalisées sur un groupe de volume, par comparaison des métadonnées de celui-ci.
ATTENTION : ici, on parle de sauvegarder un différentiel d’état et des métadonnées, par rapport à l’existant. Donc, on ne peut pas vraiment considérer ce mécanisme comme une véritable sauvegarde. Mais, il faut savoir que cela existe. Et je peux vous dire, que dans certains cas, cela peut éviter la réinstallation complète d’un système.
En effet, par défaut, toutes les modifications : créations, suppressions ou modifications réalisées au niveau d’un groupe de volumes sont systématiquement enregistrées sous forme de fichiers, dans le répertoire /etc/lvm/backup. Il est donc possible de revenir à un état particulier du système LVM, en utilisant alors la commande vgcfgrestore et en mentionnant le fichier à utiliser via l’option –f :
# vgcfgrestore –f /etc/lvm/backup/vg000015-3184029422.vg
Mais, ce qu’il est possible de restaurer, on peut également le sauvegarder, en forçant le nom du fichier en sortie et en utilisant la commande vgcfgbackup :
# vgcfgbackup –f /tmp/vg02 vg02
Ces commandes peuvent servir lorsque l’on s’est trompé dans l’allocation et que l’on dépasse la capacité physique du volume physique lui-même. Dans ce cas, on risque d’avoir des problèmes et le système pourrait même se figer ou ne plus fonctionner. On se retrouverait alors avec des erreurs de type ioctl provenant du contrôleur disque.
Mais, il est possible alors de restaurer l’environnement LVM initial, en utilisant l’un des fichiers d’archives se trouvant dans le répertoire /etc/lvm/backup (ou, dans certains cas, /etc/lvm/archive) à une date antérieure, selon les besoins.
REMARQUE : la configuration du choix du répertoire d’archive LVM est généralement précisé dans le fichier de configuration /etc/lvm.conf, ainsi que bien d’autres options de configuration.
IMPORTANT : pour pouvoir être restauré sur un système Linux, le système LVM ne doit avoir aucune transaction en cours et l’ensemble de ses volumes doivent être présents dans l’arborescence /dev. Si un volume manquait, il faudrait alors le recréer.
Mais, ce mécanisme de sauvegarde/restauration vise surtout un tout autre cadre. En effet, lorsque l’on envisage de déplacer un groupe de volumes d’une machine à une autre, on peut alors utiliser la commande vgcfgbackup afin de disposer d’un ensemble cohérent des données et des métadonnées d’un volume pour pouvoir l’initialiser sur un autre serveur.
La seule contrainte à ce genre de manipulation c’est celle que l’on a évoqué juste ci-dessus : aucune transaction ne doit être active. Aussi, le modus operandi doit être le suivant pour pouvoir déplacer un groupe de volumes d’un point à un autre :
1. On doit désactiver le groupe de volumes :
# vgchange n vg01
2. Puis, on sauvegarde les metadata du groupe de volumes :
# vgcfgbackup vg01
3. On retire alors le groupe de volume de la configuration du système :
# vgexport vg01
Il est alors possible d’arrêter la première machine, de transférer les disques sur le deuxième serveur et de redémarrer les machines. Dans le même esprit, la restauration des données et métadonnées sur la machine cible s’effectue de la façon suivante :
1. On peut restaurer les metadata, concernant le groupe de volumes vg01 sur la nouvelle machine :
# vgcfgrestore –f vg01.conf /dev/sdc3
REMARQUE : si le groupe de volumes possède plusieurs volumes physiques, il faut alors les restaurer un par un :
# vgcfgrestore –f vg01 /dev/sdc3
# vgcfgrestore –f vg01 /dev/sdh2
2. Ensuite, il faut déclarer le nouveau groupe de volumes sur la machine cible avant de l’activer :
# vgimport vg01 /dev/sdc3 /dev/sdh2
# vgchange y vg01
Pour finir, il ne faut surtout pas oublier de modifier le fichier /etc/fstab en conséquence : qu’il s’agisse d’un ajout ou d’un retrait de volumes.
Depuis la version LVM v2 il existe un système de clichés (ou snapshot) des partitions accessibles en lecture/écriture. Cette technique permet de conserver ainsi des instantanés de l’état d’une partition LVM à un instant t.
Le problème des sauvegardes auquel on est souvent confronté c’est la cohérence des données collectées. On doit souvent arrêter un ou plusieurs services pour pouvoir conserver cet état de cohérence, au niveau de l’ensemble des informations stockées sur un volume. Le fait de pouvoir réaliser un cliché de ces données répond pratiquement à tous les critères nécessaires d’une bonne sauvegarde, d’autant que l’espace occupé par un snapshot est moins important que celui de la volumétrie source.
ATTENTION : toutefois, pour pouvoir utiliser cette fonctionnalité il faut s’assurer de disposer des outils lvm (installables sous forme de packages sur la plupart des distributions), mais également d’avoir le support LVM au sein du noyau. Cela est généralement fourni par le module dm_snapshot à activer sur le noyau courant.
Les snapshots sont donc, eux aussi, des volumes logiques permettant d’effectuer une sauvegarde cohérente d’un autre volume logique, au sein du même groupe de volumes. Cela consiste donc à prendre une “photo“ du volume logique cible en enregistrant alors les modifications apportées dessus.
Le gros avantage de cette technique permettant de l’utiliser comme méthode de sauvegarde est que, cela permet de stocker une image statique d’un volume logique, à un instant précis. On peut, par la suite mettre ces images sur bande.
La taille d’un snapshot doit se calculer suivant l’estimation du volume de données écrit sur le lecteur cible, pendant la durée de la sauvegarde. Dans la majeure partie des cas, cela nécessite moins de 15%. Mais, il ne faut pas négliger, dans le calcul de l’espace disponible du snapshot, la quantité d’opérations d’écriture par seconde.
REMARQUE : on peut également créer des snapshots thin-provisionnés, c’est-à-dire des clichés pour lesquels, la taille disponible n'est pas spécifiée préalablement. Cela permet de prendre autant d’espace que nécessaire, durant l’extension du groupe de volumes sources, afin de faire face aux besoins de stockage supplémentaire.
La création d’un snapshot s'effectue via la commande lvcreate, mais en utilisant l’option –s (on devine pourquoi : -s comme snapshot). Pour évaluer la taille du snapshot, on peut alors calculer la différence de taille entre deux sauvegardes, que l’on multipliera par deux (par mesure de précaution).
Exemple : si la taille maximale d’un backup incrémental quotidien est de 10G, on allouera alors, une taille de 20G au snapshot LVM :
# lvcreate –s -L 20G –n snap-soft /dev/vg00/lv-soft
ATTENTION : cela signifie que l’on ne supportera que 20G de modifications. Au-delà, le snapshot ne sera plus valide. C’est pourquoi il faut estimer correctement la taille d’allocation de départ.
De plus, un autre problème dont il faut se méfier c’est le fait que le cliché est tellement fidèle à son modèle original, qu'il dispose ainsi du même n° de UUID de disque. Donc, si l’on est amené à monter un cliché, il faut impérativement positionner l’option nouuid lors de l’exécution de la commande, pour l’enregistrement du montage concerné :
# mount -onouuid /dev/vg00/snap-soft yesterday
La restauration des fichiers momentanément perdus revient donc à effectuer la copie des fichiers de la veille (montage de /yesterday) sur la partition courante. La commande lvs permet de suivre précisément l’encombrement du cliché grâce à l’affichage de la valeur dans le champ Snap%.
Lorsque l’on effectue un snapshot d’une partition en constante effervescence, il est conseillé de geler les modifications du système de fichiers, avant toute exécution du snapshot lui-même. Ceci dit, sur des systèmes de fichiers de type xfs, LVM2 effectue cette action de façon automatique. Si on avait à le faire, voici ce qu’il faudrait exécuter :
# xfs_freeze –f mount/
...
# xfs_freeze –u mount/
Lorsque l’on exécute la commande lvdisplay, on obtient la liste détaillée de tous les volumes logiques. On peut également remarquer un champ spécial appelé "Block Device" pour chacun de ces volumes. En fait, le contenu de ce champ fait référence à l’adresse mentionnée dans le résultat de la commande dmsetup suivante :