hantera LVM Snapshots i LVM2

LVM Snapshots

vi kommer nu att börja titta på några mer avancerade lvm2 ämnen och den första upp är att hantera LVM Snapshots. I nästa blogg kommer vi att titta på tunn Provisioning i LVM. LVM Snapshots är punkt i tid kopior av LVM logiska volymer. De är utrymmeseffektiva genom att de börjar lagra Inga data, men när data chengeras på källan LV skrivs orignal-data till LVM-Ögonblicksvolymen. Användningsfallen för detta inkluderar:

  • säkerhetskopior: LVM-ögonblicksbilderna i sig är inte en effektiv säkerhetskopiering eftersom den måste lagras inom samma volymgrupp. Snapshots kan dock användas för att öka säkerhetskopior. Skapa bara en ögonblicksbild av målvolymen och säkerhetskopiera sedan ögonblicksvolymen för att övervinna eventuella problem med fil-samtidighet under säkerhetskopieringen. Ögonblicksbilden kan raderas i slutet av säkerhetskopieringsprocessen
  • testa och förstöra: LVM-ögonblicksbilder är en läs – / skrivkopia av den ursprungliga LV. Du kan skapa en LVM ögonblicksbilder av en LV som innehåller komplexa skript, ändra ansd testa dem så mycket du vill och sedan förstöra data när du är klar. Allt utan att påverka de ursprungliga skripten.
  • testa nya Programdistributioner: installationen av en ny version av programvaran kan innehålla många hundratals filer som finns genom många programkataloger. Om målplatsen för all programvara är på en enda LVM-logisk volym kan vi skapa en ögonblicksbild innan vi uppdaterar programvaran. Om programvaran inte fungerar på önskat sätt efter testning. Det är en enkel uppgift att återställa den ursprungliga LV till ögonblicksbilden. Ögonblicksbilden håller naturligtvis den tidpunkten kopia av den ursprungliga källvolymen vid den tidpunkt då ögonblicksbilden togs.

följ länken nedan för att ladda ner ‘Complete Guide to LVM2 in Linux’, kostar bara 1.99! När den har laddats ner kan e-boken skrivas ut om det behövs.

ladda ner eBook

förbereder för att skapa en LVM Snapshots

en LVM snapshot måste skapas i samma volym grupp som källan LV. Med hjälp av CoW (Copy on Write) – teknik måste den underliggande lagringen vara densamma. Låta oförändrade data i ögonblicksbilden läsas från den ursprungliga lv-källan. Vår volymgrupp är full, så vi tar bort den befintliga logiska volymen och återskapar den en mindre storlek. Vi kommer också att använda två monteringspunkter, / mnt / original och/mnt / snap.

efter allt detta arbete är vi nu tillbaka till situationen där vi har en nyformaterad logisk volym som vi har kallat lv1. Detta är nu monterat på/mnt / original för demonstrationens syfte. Vi har skapat lv1 på 600 MiB lämnar 392 MiB ledigt utrymme i Volymgruppen vg1. Kom ihåg att vi bara handlar om ledigt utrymme i samma volymgrupp som våra logiska volymer. Snapshot måste skapas i samma volymgrupp som källan LV. om vi kontrollerar utmatningen från kommandot vgs kan vi se tillgängligt ledigt utrymme:

# 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

detta kommando, som vi har sett tidigare, är ett utmärkt sätt att sammanfatta Volymgrupper. För att kunna skapa en ögonblicksbild av den logiska volymen, lv1, måste vi lägga till några data. Vi kopierar helt enkelt/etc /services-filen till/mnt / original.

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

vi kan också se att den här filen, på min Ubuntu-Server, har 612 linjer. Vi har nu data så låt oss knäcka på.

skapa LVM Snapshots i LVM2

LVM Snapshots är i huvudsak enkla logiska volymer med några extra godsaker bultade på. Så skapas de med kommandot lvcreate och-S-alternativet. Vi måste också ange källvolymen när du skapar ögonblicksbilden.

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

från kommandoalternativen kan vi se att vi först anger storleken för att vara 12 MiB. Vi behöver bara tillräckligt med utrymme för att lagra de ändringar vi gör i källan. Vi kunde ha fyllt källan lv med 600 MiB data men om bara 12 MiB sannolikt kommer att förändras behöver vi bara en 12 MiB ögonblicksbild volym. Vi storlekar ögonblicksbilden för att matcha storleken på ändringar som kommer att inträffa. Alternativet – S eller-snapshot anger källvolymen till snapshot. Som tidigare anger alternativet-n namnet på den LV vi skapar.Ögonblicksbilden läses / skrivs så att den kan monteras. Låt oss gå vidare och montera den i katalogen / mnt/snap:

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

vi kommer att kunna se samma innehåll i båda katalogerna även om inga ändringar har skett. LVM snapshots länkar till originaldata tills de ändras.

när vi tittar på detaljerna i både källan och ögonblicksvolymen kommer det att se lite annorlunda ut. För det första lv1_snap-volymen. 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

vi kanske kommer ihåg, Jag hoppas verkligen att du gör det, att vi skapade detta med en storlek på 12 MiB. LV-storleken visar dock som 600 MiB. Storleken vi ser är av originalet eller källan LV. ögonblicksbildstorleken visas i Ko-tabellstorleken. Kopiering på skrivning sker när data ändras i källan och originaldata kopieras sedan till ögonblicksbildsvolymen. Snapshot-volymen kommer alltid att lista de ursprungliga ögonblicksfilerna oavsett om de har ändrats eller inte. Vid skapandet av ögonblicksbilden finns det inga Koändringar att lagra så det tilldelade värdet är mycket lågt att starta och kommer att öka när ändringar görs i källdata. När vi tittar på displaydetaljerna nu för lv1 LV kommer det också att vara lite annorlunda:

# 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

vi kan se att det visas som källa till ögonblicksbilden för lv1_snap.

ändra LVM-Ögonblicksdata

om vi nu ändrar data i källvolymen börjar vi se en skillnad i data i ögonblicksvolymen. Ögonblicksvolymen kommer att hålla originaldata medan källan lv kommer att hålla ändringarna. Först lägger vi till en ny fil i källvolymen:

# cp /etc/hosts /mnt/original/

vi kan nu se att innehållet skiljer sig från källan till snaphot-volymerna

vi kan också se att vi börjar konsumera mer KOUTRYMME i den logiska volymen. Återgå till lvdisplay för lv1_snap kommer vi att se den tilldelade ögonblicksbildsprocenten öka.

# 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

även om vi inte har ändrat befintliga data kommer att lägga till nya data också att påverka ögonblicksbilden som ögonblicksvolymen måste visa data som det var när ögonblicksbilden togs. Om det behövs bör vi kunna återställa originalet till snapshotted-data.

därefter skriver vi över den ursprungliga/etc / services-filen:

# > /mnt/original/services

filen / mnt / original / services kommer nu att vara tom. Om vi kontrollerar snapshot-filen kommer den fortfarande att ha data. Med kommandot wc kan vi räkna antalet rader i varje fil:

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

om du kontrollerar utgången från lvdisplay för lv1_snap kommer det naturligtvis att visa att den tilldelade ögonblicksbildsprocenten har ökat med förändringen:

Allocated to snapshot 1.17%

volymändringar för LVM-ögonblicksbilder

attributen för både käll-och ögonblicksbilds-lv: er ändras när ögonblicksbilden skapas. Vi kan se detta i detalj med kommandot lvdisplay men sammanfattas bättre med kommandot lvs:

det finns 10 attribut som vi läser från vänster till höger:

för lv1 läser attributen:

  • Volymtyp: Ursprung. Källan till en ögonblicksbild
  • behörigheter: skrivbar
  • Allokeringspolicy: ärvt från Volymgruppen
  • Fast mindre nummer är inte inställt
  • tillstånd: är markerad som aktiv
  • enhet: är öppen eller monterad
  • måltyp: ögonblicksbild, dvs det deltar i en ögonblicksbild

för Lv1_snap attributen läsa:

  • Volymtyp: Snapshot volym
  • behörigheter: skrivbar
  • Allokeringspolicy: Ärvt från Volymgruppen
  • Fast mindre nummer är inte inställt
  • tillstånd: är markerad som aktiv
  • enhet: är öppen eller monterad
  • måltyp: Snapshot, dvs det deltar i en ögonblicksbild

originalet och mål-LVs måste vara i samma volymgrupp som vi redan har nämnt, men de vann inte nödvändigtvis dela samma enheter inom dessa Volymgrupper. Detta är normalt abstraherat från oss men vi kan lägga till alternativet till lvs-kommandot:

lägga till i –O för alternativ och +enheter visar de underliggande enheterna som utgör LV. vi kan se att lv1 är större än antingen /dev/sdc1 eller /dev/sdc2 och sträcker sig över båda. Vg1_snap kan använda det överblivna utrymmet i/dev / sdc2. Numret inom parentes efter enhetens namn anger det fysiska utsträckningsnummer som LV startar på från enheten. Vi kan se att lv1 börjar från den utsträckning 0 för både/dev /sdc1 och/dev /sdc2 och lv1_snap börjar på utsträckning 26 av/dev / sdc2. För att se alla tillgängliga alternativ med –o-alternativet, Använd kommandot:

# lvs -o help

eftersom listan är omfattande har vi inte inkluderat utmatningen.

förutom att titta på de logiska volymerna direkt kan vi också använda kommandot lsblk. Här kommer vi att se fler förändringar än du kanske tror:

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

vi är redan bekanta med VG1-lv1-enheten och VG1-lv1_snap-enheterna. Dessa har varit de underliggande LVs vi har arbetat med. Kärnans huvudnummer eller drivrutin som används med LVM2 är 252. Så vi ser detta för alla LVs vi har på plats. Den första LV var vg1-lv1 så detta har det mindre antalet 0. När vi tittar på vg1-lv1_snap har detta dock ett mindre antal 3 som indikerar det 4: e LV och inte 2: a som vi kan förvänta oss. Istället skapas två wrapper lv för snapshot, vg1-lv1-real och vg1-lv1_snap-cow. Dessa hanteras internt och vi blir inte involverade i dessa objekt som LVM2 använder för att hantera snapshotting-processen. Varje LV som vi ser här har också en motsvarande devmapper-enhet. Om vi listar / dev katalog och filer på dm-* vi kan visa dessa.

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

igen. vi ser 4-enheterna inte bara 2 som vi kan ha förväntat oss. Så i bakgrunden hanterar LVM2 mycket för oss och ger oss bara tillgång till de element som vi behöver.

återställa en volym till ögonblicksbilden

ett återhämtningsscenario med LVM-ögonblicksbilder gör att vi kan återgå till ögonblicksbilden.Om vi upptäcker att vi måste återställa den ursprungliga lv till ögonblicksbilden kan vi göra det. Kom ihåg att ögonblicksbilden kommer att vara en representation av den ursprungliga volymen vid tidpunkten för ögonblicksbilden. Vi kan göra detta efter att en mjukvaruuppgradering har testats och beslutet har fattats att återgå till ögonblicksbilden som borde ha tagits före programvaruuppgraderingsprocessen. För att säkerställa att vi kan se detta i realtid kommer vi först att avmontera båda lv: erna:

# umount /mnt/{original,snap}

om vi inte stänger enheterna måste vi vänta tills den ursprungliga LV, vg1 aktiveras nästa gång. Ofta är detta på omstart. Med båda de logiska volymerna nu omonterade och stängda använder vi kommandot lvconvert för att slå samman ögonblicksbilden med föräldern eller ursprunget. Detta återställer källans logiska volym till ögonblicksbildsinnehållet. Ögonblicksbilden tas automatiskt bort i slutet av processen.

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

beroende på storleken på data som ska slås samman och diskens hastighet är det möjligt att det kan ta lite tid. Du använder alternativet-b för att bakgrunda processen.

om vi nu monterar lv1 igen och kontrollerar innehållet. Vi kommer att sakna värdfilen som lades till efter att ögonblicksbilden togs. Tjänstefilen vi har nu det innehåll som vi skrev över.

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

Test och utveckling

en annan användning för LVM-ögonblicksbilder är i en testmiljö. Om du föredrar att arbeta direkt med snapshotted data så kan du. När du är klar behöver du bara avmontera snapshot LV och ta bort den. Den underliggande ursprungliga LV lämnas oförändrad. Det här är bra där du kanske vill arbeta med skript utan att påverka de ursprungliga produktionsskripten.

processen är ungefär densamma men vi arbetar bara med katalogen /mnt/snap nu. En sammanfattning av kommandona följer:

utöka Snapshot-storleken

när vi skapar en snapshot-volym bör vi ställa in en storlek som vi tycker är tillräcklig för att lagra alla ändringar som gjorts i den ursprungliga LV medan snapshot är på plats. Det är dock möjligt att automatiskt expandera en ögonblicksbild volym om det behövs.

det är viktigt att notera att om en ögonblicksbild fylls helt tas ögonblicksbilden automatiskt bort.

standardinställningarna tillåter inte att ögonblicksbilder växer automatiskt. Vi måste aktivera detta. Konfigurationen av LVM2 är i / etc/lvm / lvm.conf. Om vi söker efter de effektiva inställningarna med grep:

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

att ha snapshot_autoextend_threshold satt till 100% betyder att ögonblicksbilden aldrig kommer att växa. Så snart vi träffar tröskeln på 100% tas ögonblicksbilden bort. Om vi behöver autoextend aktiverat överväga att ställa in detta till något som 70. I vilket fall, när ögonblicksbilden blir 70% full, kommer storleken att ökas. Storleken på ökningen styrs av snapshot_autoexend_percent. Standardvärdet är inställt på 20% vilket innebär att storleken kommer att öka med 20% av sin nuvarande storlek varje gång tillväxt krävs.

Write a Comment

Din e-postadress kommer inte publiceras.