LVM-Snapshots beheren in LVM2

LVM-Snapshots

we zullen nu beginnen met het bekijken van enkele meer geavanceerde lvm2-onderwerpen en de eerste is het beheren van LVM-Snapshots. In de volgende blog zullen we kijken naar Thin Provisioning in LVM. LVM Snapshots zijn Point in Time kopieën van LVM logische Volumes. Ze zijn ruimte-efficient in die zin dat ze beginnen met het opslaan van geen data, maar als data wordt chenged op de bron LV de oorspronkelijke data wordt geschreven naar de LVM Snapshot volume. De use cases hiervoor zijn onder andere:

  • Backups: De LVM snapshots zelf is geen efficiënte back-up omdat het binnen dezelfde volumegroep moet worden opgeslagen. Snapshots kunnen echter worden gebruikt om back-ups te vergroten. Maak gewoon een snapshot van het doelvolume en maak vervolgens een back-up van het snapshotvolume om eventuele problemen met File-concurrency tijdens de back-up te overwinnen. De snapshot kan worden verwijderd aan het einde van het back-upproces
  • Test and Destroy: LVM snapshots zijn een lees / schrijf kopie van de originele LV. Je kunt een LVM snapshots maken van een LV die complexe scripts bevat, ansd veranderen om ze zoveel te testen als je wilt en dan de data vernietigen als je klaar bent. Dit alles zonder de originele scripts te beïnvloeden.
  • testen van nieuwe Softwareimplementaties: de installatie van een nieuwe versie van software kan vele honderden bestanden bevatten die zich in vele softwaremappen bevinden. Als de doellocatie voor alle software zich op één LVM logische Volume bevindt, kunnen we een snapshot maken voordat we de software updaten. Als na het testen van de software niet op de gewenste manier functioneert. Het is een eenvoudige taak om de originele LV terug te zetten naar de snapshot. De snapshot, natuurlijk, bevat dat punt in de tijd kopie van de oorspronkelijke bron volume op het moment dat de snapshot werd genomen.

Volg de link hieronder om de ‘Complete Guide to Lvm2 in Linux’ te downloaden, kost slechts £ 1,99! Zodra het is gedownload kan het eBook worden afgedrukt indien nodig.

download eBook

voorbereiden om een LVM-Snapshots te maken

een LVM-snapshot moet worden gemaakt in dezelfde volumegroep als de bron-LV. Met behulp van CoW (Copy on Write) technologie moet de onderliggende opslag hetzelfde zijn. Toestaan dat ongewijzigde gegevens in de snapshot worden gelezen van de originele LV bron. Onze Volume Groep is vol, dus we zullen het bestaande logische Volume te verwijderen en opnieuw een kleiner formaat. We zullen ook twee mountpoints gebruiken, /mnt / original en/mnt / snap.

na al dit werk zijn we nu terug bij de situatie waar we een nieuw geformatteerd logisch Volume hebben dat we lv1 hebben genoemd. Deze is nu gemonteerd op /mnt/original voor de demonstratie. We hebben lv1 gemaakt op 600 MiB waardoor 392 MiB vrije ruimte overblijft in de volumegroep vg1. Vergeet niet dat we alleen bezig zijn met vrije ruimte in dezelfde volumegroep als onze logische Volumes. Snapshot moet worden gemaakt in dezelfde Volume groep als de bron LV. als we de uitvoer van het commando vgs controleren kunnen we de beschikbare vrije ruimte zien:

# 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

dit commando, zoals we eerder hebben gezien, is een geweldige manier om Volumegroepen samen te vatten. Om een point in time snapshot van het logische Volume, lv1, te kunnen maken, moeten we wat gegevens toevoegen. We kopiëren gewoon het bestand / etc / services naar / MNT / original.

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

we kunnen ook zien dat dit bestand, op mijn Ubuntu Server, 612 regels heeft. We hebben nu gegevens, dus laten we verder gaan.

LVM-Snapshots maken in LVM2

LVM-Snapshots zijn in wezen eenvoudige logische Volumes met een aantal extra goodies erop. Ze worden dus gemaakt met het lvcreate commando en de optie –s. We moeten ook het bronvolume opgeven bij het maken van de snapshot.

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

uit de commando opties, kunnen we zien dat we eerst de grootte opgeven om 12 MiB te zijn. We hebben alleen genoeg ruimte nodig om de veranderingen die we aan de bron aanbrengen op te slaan. We hadden de bron LV kunnen vullen met 600 MiB aan gegevens, maar als slechts 12 MiB waarschijnlijk zal veranderen dan hebben we slechts een 12 MiB snapshot volume nodig. We passen de snapshot aan op de grootte van de veranderingen die zullen optreden. De optie-s of-snapshot specificeert het bronvolume voor snapshot. Net als voorheen stelt de optie-n de naam in van de LV die we aan het maken zijn.De snapshot is lees / schrijf dus kan worden gemount. Laten we doorgaan en het aankoppelen naar de directory / mnt / snap:

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

we zullen dezelfde inhoud in beide mappen kunnen zien, ook al hebben er geen wijzigingen plaatsgevonden. LVM snapshots linkt naar de oorspronkelijke gegevens totdat deze worden gewijzigd.

wanneer we kijken naar de details van zowel de bron als snapshot volume zal het er een beetje anders uitzien. Ten eerste, het lv1_snap volume. De snapshot 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

We kunnen ons herinneren, Ik hoop dat je dat doet, dat we dit hebben gemaakt met een grootte van 12 MiB. De LV grootte, hoewel, toont als 600 MiB. De grootte die we zien is van de originele of bron LV. de snapshot grootte wordt weergegeven in de koe-Tabel grootte. De Copy-on-Write treedt op wanneer de gegevens in de bron worden gewijzigd en de oorspronkelijke gegevens vervolgens worden gekopieerd naar het snapshotvolume. Het snapshot volume zal altijd een lijst van de originele snapshot bestanden, ongeacht of ze zijn veranderd of niet. Bij het maken van de snapshot zijn er geen koe wijzigingen op te slaan, zodat de toegewezen waarde is zeer laag om te beginnen en zal toenemen als er wijzigingen worden aangebracht in de brongegevens. Als we nu kijken naar de display details voor de lv1 LV, zal het ook een beetje anders zijn:

# 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

We kunnen zien dat het wordt weergegeven als de bron van de snapshot voor lv1_snap.

LVM-Snapshotgegevens wijzigen

als we nu een wijziging aanbrengen in de gegevens in het bronvolume, zullen we een verschil zien in de gegevens in het snapshotvolume. Het snapshot volume zal de oorspronkelijke gegevens bevatten, terwijl de bron LV de wijzigingen zal bevatten. Eerst zullen we een nieuw bestand toevoegen aan het bronvolume:

# cp /etc/hosts /mnt/original/

We kunnen nu zien dat de inhoud verschilt voor de bron van de snaphot volumes

we kunnen ook zien dat we beginnen om meer koe ruimte te consumeren in de logische Volume. Terugkerend naar de lvdisplay voor lv1_snap zullen we het toegewezen snapshot percentage zien stijgen.

# 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

hoewel we de bestaande gegevens niet hebben gewijzigd, zal het toevoegen van nieuwe gegevens ook effect hebben op de snapshot, omdat het snapshotvolume de gegevens moet tonen zoals het was toen de snapshot werd genomen. Indien nodig, moeten we in staat zijn om het origineel terug te keren naar de snapshotted data.

hierna zullen we het originele /etc/services bestand overschrijven:

# > /mnt/original/services

het bestand / mnt / original / services zal nu leeg zijn. Als we het snapshot-bestand echter controleren, zal het nog steeds de gegevens bevatten. Met het commando wc kunnen we het aantal regels in elk bestand tellen:

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

natuurlijk, het opnieuw controleren van de uitvoer van lvdisplay voor lv1_snap zal laten zien dat het toegewezen aan snapshot percentage is toegenomen met de verandering:

Allocated to snapshot 1.17%

Volumewijzigingen voor LVM Snapshots

de attributen voor zowel de bron-als snapshot-lv ‘ s zullen veranderen wanneer de snapshot wordt gemaakt. We kunnen dit in detail zien met het commando lvdisplay maar is beter samengevat met het commando lvs:

er zijn 10 attributen die we van links naar rechts lezen:

voor lv1 worden de attributen gelezen:

  • Volumetype: Oorsprong. De bron van een snapshot
  • Machtigingen: Beschrijfbaar
  • toewijzingsbeleid: Overgenomen uit de Volume Groep
  • Vaste nummer is niet ingesteld
  • Staat: als actief Is gemarkeerd
  • Apparaat: open of gemonteerd
  • Target type: Snapshot, dat wil zeggen dat het deelnemen aan een snapshot

Voor lv1_snap de kenmerken lezen:

  • Volume Type: Momentopname van het volume
  • Machtigingen: Beschrijfbaar
  • toewijzingsbeleid: Overgenomen van de volumegroep
  • Fixed minor number is not set
  • State: is gemarkeerd als actief
  • Device: is open of aangekoppeld
  • Target type: Snapshot, dat wil zeggen dat het deelneemt aan een snapshot

de originele en doel lv ‘ s moeten in dezelfde volumegroep zijn als we al hebben vermeld, maar ze zullen niet noodzakelijkerwijs dezelfde apparaten delen binnen die Volumegroepen. Dit wordt normaal gesproken van ons geabstraheerd, maar we kunnen de optie Toevoegen aan het LVS Commando:

het toevoegen van de-o voor options en +devices zal de onderliggende devices tonen die deel uitmaken van de LV. we kunnen zien dat lv1 groter is dan /dev/sdc1 of /dev/sdc2 en over beide is gespreid. Terwijl vg1_snap gebruik kan maken van de overgebleven ruimte in /dev/sdc2. Het nummer tussen haakjes na de apparaatnaam geeft het fysieke extentnummer aan waarop de LV vanaf het apparaat begint. We kunnen zien dat lv1 start vanaf extent 0 voor zowel /dev/sdc1 als /dev/sdc2 en lv1_snap start op extent 26 van /dev/sdc2. Om alle beschikbare opties met de –o optie te zien, gebruik je het commando:

# lvs -o help

omdat de lijst uitgebreid is, hebben we de output niet opgenomen.

naast het direct bekijken van de logische Volumes kunnen we ook het lsblk commando gebruiken. Hier zullen we meer veranderingen zien dan je misschien denkt:

 # 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 /

We zijn al bekend met het VG1-lv1 apparaat en de VG1-lv1_snap apparaten. Dit zijn de onderliggende lv ‘ s waar we mee hebben gewerkt. Het kernel hoofdnummer of stuurprogramma dat wordt gebruikt met LVM2 is 252. We zien dit voor alle lv ‘ s die we hebben. De eerste LV was vg1-lv1 dus dit heeft het kleine getal 0. Als we naar vg1-lv1_snap kijken, Heeft dit echter een klein getal van 3 dat aangeeft dat het de 4e LV is en niet de 2e zoals we mogen verwachten. In plaats daarvan worden twee wrapper lv ‘ s gemaakt voor de snapshot, vg1-lv1-real en vg1-lv1_snap-cow. Deze worden intern beheerd en we raken niet betrokken bij deze objecten die LVM2 gebruikt om het snapshotproces te beheren. Elke LV die we hier zien heeft ook een bijbehorende devmapper apparaat. Als we een lijst van de / dev directory en filer op dm – * kunnen we deze laten zien.

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

opnieuw. we zien de 4 apparaten niet alleen de 2 die we kunnen verwachten. Op de achtergrond beheert LVM2 dus veel voor ons en geeft ons alleen toegang tot de elementen die we nodig hebben.

een Volume terugzetten naar de Snapshot

een herstelscenario met LVM snapshots stelt ons in staat om terug te keren naar de snapshot.Als we vinden dat we de originele LV moeten terugzetten naar de point in time snapshot kunnen we dat doen. Vergeet niet dat de snapshot een representatie zal zijn van het oorspronkelijke volume op het moment van de snapshot. We kunnen dit doen nadat een software-upgrade is getest en de beslissing is genomen om terug te keren naar de snapshot die vóór het software-upgradeproces had moeten worden genomen. Om ervoor te zorgen dat we dit in realtime kunnen zien, zullen we eerst beide lv ‘ s ontkoppelen:

# umount /mnt/{original,snap}

als we de apparaten niet sluiten, moeten we wachten tot de originele LV, vg1 wordt geactiveerd. Vaak is dit op een reboot. Met zowel de logische Volumes nu unmounted als closed gebruiken we het lvconvert commando om de snapshot te mergen met de ouder of origin. Dit is het terugzetten van het logische Volume van de bron naar de inhoud van de snapshot. De snapshot wordt automatisch verwijderd aan het einde van het proces.

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

afhankelijk van de grootte van de gegevens die moeten worden samengevoegd en de snelheid van de schijven is het mogelijk dat dit enige tijd kan duren. U maakt gebruik van de –b optie om de achtergrond van het proces.

als we nu lv1 opnieuw mounten en de inhoud controleren. We zullen het hosts-bestand missen dat is toegevoegd nadat de snapshot is gemaakt. Het dienstenbestand hebben we nu de inhoud die we overschreven.

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

Test en ontwikkeling

een ander gebruik voor LVM-snapshots is in een testomgeving. Mocht u liever direct werken met de snapshotted gegevens dan kunt u. Als je klaar bent hoef je alleen maar de snapshot LV te ontkoppelen en te verwijderen. De onderliggende originele LV blijft ongewijzigd. Dit is geweldig waar je misschien wilt werken aan scripts zonder het effect van de originele productie scripts.

het proces is vrijwel hetzelfde, maar we werken nu alleen met de map /mnt/snap. Een samenvatting van de commando ‘ s volgt:

de Snapshotgrootte uitbreiden

wanneer we een snapshot-volume maken, moeten we een grootte instellen die volgens ons voldoende is om alle wijzigingen in de originele LV op te slaan terwijl de snapshot op zijn plaats is. Het is echter mogelijk om een snapshot volume automatisch uit te breiden indien nodig.

het is belangrijk op te merken dat als een snapshot volledig wordt opgevuld, de snapshot automatisch wordt verwijderd.

de standaardinstellingen staan niet toe dat snapshots automatisch groeien. We moeten dit mogelijk maken. De configuratie van LVM2 is in de /etc/lvm / lvm.conf. Als we zoeken naar de effectieve instellingen met behulp van grep:

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

het hebben van de snapshot_autoextend_threshold ingesteld op 100% betekent dat de snapshot nooit zal groeien. Zodra we de drempel van 100% hebben bereikt, wordt de snapshot verwijderd. Als we autoextend ingeschakeld moeten hebben, overweeg dan om dit op ongeveer 70 te zetten. In dat geval, wanneer de snapshot 70% vol wordt, wordt de grootte vergroot. De grootte van de toename gecontroleerd door de snapshot_auto-exend_percentage. De standaard is ingesteld op 20% wat betekent dat de grootte zal toenemen met 20% van de huidige grootte elke keer groei is vereist.

Write a Comment

Het e-mailadres wordt niet gepubliceerd.