Gestion des Instantanés LVM dans LVM2

Instantanés LVM

Nous allons maintenant commencer à examiner des sujets LVM2 plus avancés et le premier est la gestion des Instantanés LVM. Dans le prochain blog, nous examinerons le provisionnement mince dans LVM. Les instantanés LVM sont des copies ponctuelles des Volumes logiques LVM. Ils sont efficaces dans l’espace en ce sens qu’ils commencent à ne stocker aucune donnée, mais au fur et à mesure que les données sont transférées sur le LV source, les données d’origine sont écrites dans le volume d’instantané LVM. Les cas d’utilisation pour cela incluent:

  • Sauvegardes: Les instantanés LVM en eux-mêmes ne sont pas une sauvegarde efficace car ils doivent être stockés dans le même groupe de volumes. Cependant, les instantanés peuvent être utilisés pour augmenter les sauvegardes. Créez simplement un instantané du volume cible, puis sauvegardez le volume instantané pour résoudre tous les problèmes liés à la concurrence des fichiers pendant la sauvegarde. L’instantané peut être supprimé à la fin du processus de sauvegarde
  • Test et destruction : Les instantanés LVM sont une copie en lecture/écriture du LV d’origine. Vous pouvez créer des instantanés LVM d’un LV contenant des scripts complexes, modifier les tests ansd autant que vous le souhaitez, puis détruire les données lorsque vous avez terminé. Le tout sans impacter les scripts originaux.
  • Tester de nouveaux déploiements logiciels : L’installation d’une nouvelle version d’un logiciel peut inclure plusieurs centaines de fichiers situés dans de nombreux répertoires logiciels. Si l’emplacement cible de tous les logiciels se trouve sur un seul volume logique LVM, nous pouvons créer un instantané avant de mettre à jour le logiciel. Si, après le test, le logiciel ne fonctionne pas de la manière souhaitée. C’est une tâche simple de rétablir le LV d’origine dans l’instantané. L’instantané, bien sûr, contient cette copie ponctuelle du volume source d’origine au moment où l’instantané a été pris.

Suivez le lien ci-dessous pour télécharger le “Guide complet de LVM2 sous Linux”, coûtant seulement 1,99 £! Une fois téléchargé, l’eBook peut être imprimé si nécessaire.

Télécharger l’eBook

Préparation à la création d’instantanés LVM

Un instantané LVM doit être créé dans le même groupe de volumes que le LV source. En utilisant la technologie CoW (Copie sur écriture), le stockage sous-jacent doit être le même. Permettre la lecture des données inchangées de l’instantané à partir de la source BT d’origine. Notre groupe de volumes est plein, nous allons donc supprimer le volume logique existant et le recréer d’une taille plus petite. Nous utiliserons également deux points de montage, /mnt/original et /mnt/snap.

Après tout ce travail, nous sommes maintenant de retour à la situation où nous avons un volume logique nouvellement formaté que nous avons appelé lv1. Ceci est maintenant monté sur /mnt/original pour les besoins de la démonstration. Nous avons créé lv1 à 600 MiO laissant 392 MiO d’espace libre dans le groupe de volumes vg1. N’oubliez pas que nous ne sommes concernés que par l’espace libre dans le même Groupe de volumes que nos Volumes logiques. Les snapshots doivent être créés dans le même groupe de volumes que le LV source. Si nous vérifions la sortie de la commande vgs, nous pouvons voir l’espace libre disponible:

# vgs VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 992.00m 392.00m vg2 2 0 0 wz--n- 192.00m 192.00m

Cette commande, comme nous l’avons vu précédemment, est un excellent moyen de résumer les groupes de volumes. Afin de pouvoir créer un instantané ponctuel du volume logique, lv1, nous devrons ajouter des données. Nous allons simplement copier le fichier /etc/services dans /mnt/original.

 # cp /etc/services /mnt/original/ # wc -l /mnt/original/services 612 /mnt/original/services

Nous pouvons également voir que ce fichier, sur mon serveur Ubuntu, comporte 612 lignes. Nous avons maintenant des données, alors allons-y.

Création d’instantanés LVM dans LVM2

Les instantanés LVM sont, par essence, de simples volumes logiques avec quelques goodies supplémentaires boulonnés. Ils sont donc créés à l’aide de la commande lvcreate et de l’option –s. Nous devons également spécifier le volume source lors de la création de l’instantané.

 # lvcreate -L 12m -s /dev/vg1/lv1 -n lv1_snap Logical volume "lv1_snap" created.

À partir des options de commande, nous pouvons voir que nous spécifions d’abord la taille à 12 MiB. Nous avons seulement besoin de suffisamment d’espace pour stocker les modifications que nous apportons à la source. Nous aurions pu remplir le BT source avec 600 MiO de données, mais si seulement 12 MiO sont susceptibles de changer, nous n’avons besoin que d’un volume d’instantané de 12 MiO. Nous dimensionnons l’instantané pour qu’il corresponde à la taille des modifications qui se produiront. L’option -s ou -snapshot spécifie le volume source à snapshot. Comme avant l’option -n définit le nom du LV que nous créons.L’instantané est en lecture / écriture et peut donc être monté. Allons-y et montons-le dans le répertoire /mnt/snap:

# mount /dev/vg1/lv1_snap /mnt/snap/

Nous pourrons voir le même contenu dans les deux répertoires même si aucun changement n’a eu lieu. Les instantanés LVM sont liés aux données d’origine jusqu’à ce qu’elles soient modifiées.

Lorsque nous examinerons les détails de la source et du volume de l’instantané, cela sera un peu différent. Tout d’abord, le volume lv1_snap. L’instantané LV.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.36% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

Nous pouvons nous rappeler, j’espère certainement que vous le faites, que nous l’avons créé avec une taille de 12 MiB. La taille de BT, cependant, s’affiche comme 600 MiO. La taille que nous voyons est celle du LV d’origine ou de la source. La taille de l’instantané s’affiche dans la taille de la table COW. La copie sur écriture se produit lorsque les données sont modifiées dans la source et que les données d’origine sont ensuite copiées dans le volume de l’instantané. Le volume d’instantané répertorie toujours les fichiers d’instantané d’origine, qu’ils aient été modifiés ou non. Lors de la création de l’instantané, il n’y a pas de modifications CoW à stocker, donc la valeur allouée est très faible pour démarrer et augmentera à mesure que des modifications seront apportées aux données source. Quand nous regardons les détails d’affichage maintenant pour le lv1 LV, ce sera aussi un peu différent:

# lvdisplay /dev/vg1/lv1 --- Logical volume --- LV Path /dev/vg1/lv1 LV Name lv1 VG Name vg1 LV UUID dmVaWm-kA9V-xouM-OZBR-b7Id-aMUh-EWymB0 LV Write Access read/write LV Creation host, time yogi, 2017-08-21 18:51:57 +0000 LV snapshot status source of lv1_snap LV Status available # open 1 LV Size 600.00 MiB Current LE 150 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0

Nous pouvons voir qu’il s’affiche comme la source de l’instantané pour lv1_snap.

Modification des données d’instantané LVM

Si nous modifions maintenant les données du volume source, nous commencerons à voir une différence dans les données du volume d’instantané. Le volume de l’instantané contiendra les données d’origine tandis que le LV source contiendra les modifications. Tout d’abord, nous allons ajouter un nouveau fichier au volume source:

# cp /etc/hosts /mnt/original/

Nous pouvons maintenant voir que le contenu diffère pour la source des volumes snaphot

Nous pouvons également voir que nous commençons à consommer plus d’espace de VACHE dans le volume logique. En revenant à lvdisplay pour lv1_snap, nous verrons le pourcentage Alloué à l’instantané augmenter.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.98% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

Même si nous n’avons pas modifié les données existantes, l’ajout de nouvelles données affectera également l’instantané, car le volume de l’instantané doit afficher les données telles qu’elles étaient lors de la prise de l’instantané. Si nécessaire, nous devrions pouvoir rétablir l’original aux données instantanées.

Ensuite, nous écraserons le fichier /etc/services d’origine:

# > /mnt/original/services

Le fichier /mnt/original/services sera maintenant vide. Si nous vérifions le fichier d’instantané, il aura toujours les données. En utilisant la commande wc, nous pouvons compter le nombre de lignes dans chaque fichier:

 # wc -l /mnt/original/services /mnt/snap/services 0 /mnt/original/services 612 /mnt/snap/services 612 total

Bien sûr, revérifier la sortie de lvdisplay pour lv1_snap montrera que le pourcentage Alloué à l’instantané a augmenté avec le changement:

Allocated to snapshot 1.17%

Changements de volume pour les instantanés LVM

Les attributs des LVs source et instantané changeront lors de la création de l’instantané. Nous pouvons le voir en détail avec la commande lvdisplay mais il est mieux résumé avec la commande lvs :

Il y a 10 attributs que nous lisons de gauche à droite :

Pour lv1 les attributs lus:

  • Type de volume: Origine. La source d’un instantané
  • Permissions : Inscriptible
  • Politique d’allocation : Héritée du groupe de volumes
  • Le nombre mineur fixe n’est pas défini
  • État : Est marqué comme actif
  • Périphérique : Est ouvert ou monté
  • Type de cible : Instantané, c’est-à-dire qu’il participe à un instantané

Pour lv1_snap, les attributs se lisent:

  • Type de volume : Volume instantané
  • Autorisations : Accessible en écriture
  • Stratégie d’allocation: Hérité du Groupe de volumes
  • Le nombre mineur fixe n’est pas défini
  • État: Est marqué comme actif
  • Périphérique: Est ouvert ou monté
  • Type de cible: Instantané, c’est-à-dire qu’il participe à un instantané

Les LVs d’origine et cible doivent être dans le même Groupe de volumes que nous l’avons déjà mentionné, mais ils ont gagné pas nécessairement partager les mêmes appareils au sein de ces groupes de volumes. Ceci est normalement extrait de nous, mais nous pouvons ajouter l’option à la commande lvs:

L’ajout des périphériques –o pour les options et + affichera les périphériques sous-jacents qui composent le LV. Nous pouvons voir que lv1 est plus grand que /dev/sdc1 ou /dev/sdc2 et est réparti sur les deux. Alors que, vg1_snap peut utiliser l’espace restant dans /dev/sdc2. Le nombre entre parenthèses après le nom du périphérique indique le numéro d’étendue physique sur lequel le BT démarre à partir du périphérique. Nous pouvons voir que lv1 commence à partir de l’étendue 0 pour /dev/sdc1 et /dev/sdc2 et lv1_snap commence à partir de l’étendue 26 de /dev/sdc2. Pour voir toutes les options disponibles avec l’option –o, utilisez la commande:

# lvs -o help

Comme la liste est longue, nous n’avons pas inclus la sortie.

En plus de regarder directement les volumes logiques, nous pouvons également utiliser la commande lsblk. Ici, nous verrons plus de changements que vous ne le pensez peut-être:

 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 100M 0 loop sdb 8:16 0 256M 0 disk loop0 7:0 0 100M 0 loop sdc 8:32 0 1000M 0 disk ├─sdc2 8:34 0 500M 0 part │ ├─vg1-lv1-real 252:1 0 600M 0 lvm │ │ ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original │ │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap │ └─vg1-lv1_snap-cow 252:2 0 12M 0 lvm │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap └─sdc1 8:33 0 499M 0 part └─vg1-lv1-real 252:1 0 600M 0 lvm ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap sda 8:0 0 9.8G 0 disk /

Nous connaissons déjà le périphérique vg1-lv1 et les périphériques vg1-lv1_snap. Ce sont les LVs sous-jacents avec lesquels nous avons travaillé. Le numéro majeur du noyau ou le pilote utilisé avec LVM2 est 252. Donc, nous voyons cela pour tous les LVs que nous avons en place. Le premier LV était vg1-lv1 donc cela a le nombre mineur de 0. Lorsque nous regardons vg1-lv1_snap, cependant, il y a un nombre mineur de 3 indiquant le 4ème LV et non le 2ème comme nous pouvons nous y attendre. Au lieu de cela, deux LVS wrapper sont créés pour l’instantané, vg1-lv1-real et vg1-lv1_snap-cow. Ceux-ci sont gérés en interne et nous ne sommes pas impliqués dans ces objets que LVM2 utilise pour gérer le processus de snapshotting. Chaque BT que nous voyons ici a également un périphérique devmapper correspondant. Si nous listons le répertoire /dev et le filer sur dm-*, nous pouvons les afficher.

# ls /dev/dm-* /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3

Encore une fois. nous voyons les appareils 4 pas seulement les 2 auxquels nous nous attendions peut-être. Donc, en arrière-plan, LVM2 gère beaucoup pour nous et ne nous permet d’accéder qu’aux éléments dont nous avons besoin.

Rétablir un volume dans l’instantané

Un scénario de récupération avec des instantanés LVM nous permet de revenir à l’instantané.Si nous constatons que nous devons rétablir le LV d’origine à l’instantané ponctuel, nous pouvons le faire. N’oubliez pas que l’instantané sera une représentation du volume d’origine au moment de l’instantané. Nous pouvons le faire après qu’une mise à niveau logicielle a été testée et que la décision a été prise de revenir à l’instantané qui aurait dû être pris avant le processus de mise à niveau logicielle. Pour nous assurer que nous pouvons voir cela en temps réel, nous démonterons d’abord les deux LVs:

# umount /mnt/{original,snap}

Si nous ne fermons pas les appareils, nous devrons attendre que le BT d’origine, vg1 soit ensuite activé. Souvent, c’est sur un redémarrage. Avec les volumes logiques maintenant démontés et fermés, nous utilisons la commande lvconvert pour fusionner l’instantané avec le parent ou l’origine. Il s’agit de rétablir le volume logique source au contenu de l’instantané. L’instantané est automatiquement supprimé à la fin du processus.

# lvconvert --merge /dev/vg1/lv1_snap Merging of volume lv1_snap started. lv1: Merged: 99.2% lv1: Merged: 100.0%

Selon la taille des données à fusionner et la vitesse des disques, il est possible que cela prenne un certain temps. Vous utilisez l’option -b pour mettre en arrière-plan le processus.

Si nous montons à nouveau lv1 et vérifions le contenu. Il nous manquera le fichier hosts qui a été ajouté après la prise de l’instantané. Le fichier de services que nous avons maintenant le contenu que nous avons réécrit.

 # mount /dev/vg1/lv1 /mnt/original/ # ls /mnt/original/ lost+found services # wc -l /mnt/original/services 612 /mnt/original/services

Test et développement

Une autre utilisation des instantanés LVM est dans un environnement de test. Si vous préférez travailler directement avec les données instantanées, vous pouvez le faire. Lorsque vous avez terminé, il vous suffit de démonter l’instantané LV et de le supprimer. Le VG d’origine sous-jacent reste inchangé. C’est génial où vous voulez peut-être travailler sur des scripts sans affecter les scripts de production originaux.

Le processus est à peu près le même mais nous travaillons uniquement avec le répertoire /mnt/snap maintenant. Un résumé des commandes suit:

Extension de la taille de l’instantané

Lorsque nous créons un volume d’instantané, nous devons définir une taille qui nous semble adéquate pour stocker toutes les modifications apportées au LV d’origine pendant que l’instantané est en place. Cependant, il est possible d’étendre automatiquement un volume d’instantané si nécessaire.

Il est important de noter que si un instantané se remplit complètement, l’instantané est automatiquement supprimé.

Les paramètres par défaut ne permettent pas la croissance automatique des instantanés. Nous devons permettre cela. La configuration de LVM2 se trouve dans le fichier /etc/lvm/lvm.conf. Si nous recherchons les paramètres efficaces à l’aide de grep:

 # grep -E '^\s*snapshot_auto' /etc/lvm/lvm.conf snapshot_autoextend_threshold = 100 snapshot_autoextend_percent = 20

Avoir le snapshot_autoextend_threshold défini à 100% signifie que l’instantané ne se développera jamais. Dès que nous atteignons le seuil de 100%, l’instantané est supprimé. Si nous avons besoin d’activer autoextend, envisagez de définir ceci sur quelque chose comme 70. Auquel cas, lorsque l’instantané devient plein à 70%, la taille sera augmentée. La taille de l’augmentation contrôlée par le snapshot_autoexend_percent. La valeur par défaut est définie sur 20%, ce qui signifie que la taille augmentera de 20% de sa taille actuelle chaque fois qu’une croissance est requise.

Write a Comment

Votre adresse e-mail ne sera pas publiée.