Správa LVM momentky v LVM2

LVM momentky

nyní se začneme dívat na některé pokročilejší témata LVM2 a první je správa LVM momentky. V dalším blogu se podíváme na tenké Provisioning v LVM. LVM snímky jsou bod v čase kopie LVM logických svazků. Jsou prostorově efektivní v tom, že začínají ukládat žádná data, ale jak jsou data chengedována na zdrojovém LV, původní data jsou zapsána do svazku LVM Snapshot. Případy použití zahrnují:

  • zálohy: Samotné snímky LVM nejsou efektivní zálohou, protože musí být uloženy ve stejné skupině svazků. Snímky však lze použít k rozšíření záloh. Stačí vytvořit snímek cílového svazku a poté zálohovat svazek snímku, abyste během zálohování překonali všechny problémy spojené se souběžností souborů. Snímek může být odstraněn na konci procesu zálohování
  • Test a zničit: LVM snímky jsou čtení / zápis kopie původního LV. Můžete vytvořit LVM snímky LV, který obsahuje složité skripty, změnit ansd testovat je tolik, kolik chcete, a pak zničit data, když jste dokončili. To vše bez ovlivnění původních skriptů.
  • testování nasazení nového softwaru: instalace nové verze softwaru může zahrnovat mnoho stovek souborů umístěných v mnoha softwarových adresářích. Pokud je cílové umístění pro veškerý software na jednom logickém svazku LVM, můžeme před aktualizací softwaru vytvořit snímek. Pokud po testování software nefunguje požadovaným způsobem. Je to jednoduchý úkol vrátit původní LV na snímek. Snímek, samozřejmě, drží tuto časovou kopii původního zdrojového svazku v době, kdy byl Snímek pořízen.

klikněte na odkaz níže a stáhněte si “kompletní průvodce LVM2 v Linuxu”, který stojí jen £ 1.99! Jakmile je stažen eBook lze vytisknout v případě potřeby.

stáhnout eBook

příprava na vytvoření snímků LVM

snímek LVM musí být vytvořen ve stejné skupině svazků jako zdroj LV. Pomocí technologie CoW (Copy on Write) musí být základní úložiště stejné. Umožnění čtení nezměněných dat ve snímku z původního zdroje LV. Naše skupina svazků je plná, takže odstraníme existující logický svazek a znovu jej vytvoříme menší velikost. Použijeme také dva mountpointy, /mnt/original a /mnt/snap.

po této práci jsme nyní zpět do situace, kdy máme nově naformátovaný logický svazek, který jsme nazvali lv1. Toto je nyní připojeno k /mnt/original pro účely demonstrace. Vytvořili jsme lv1 na 600 MiB a ponechali 392 MiB volného místa ve skupině objemů vg1. Nezapomeňte, že se zabýváme pouze volným prostorem ve stejné skupině svazků jako naše logické svazky. Snapshot musí být vytvořen ve stejné skupině svazků jako zdrojový LV. pokud zkontrolujeme výstup z příkazu VGS, uvidíme dostupné volné místo:

# 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

tento příkaz, jak jsme viděli dříve, je skvělý způsob, jak shrnout skupiny svazků. Abychom mohli vytvořit momentový snímek logického svazku lv1, budeme muset přidat některá data. Jednoduše zkopírujeme soubor/etc / services do / mnt / original.

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

můžeme také vidět, že tento soubor na mém serveru Ubuntu má řádky 612. Nyní máme data, tak pojďme na to.

vytváření LVM snímků v LVM2

LVM snímky jsou v podstatě jednoduché logické svazky s některými extra dobroty přišroubovanými. Takže jsou vytvořeny pomocí příkazu lvcreate a volby –s. Při vytváření snímku musíme také určit zdrojový svazek.

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

z možností příkazu vidíme, že nejprve určíme velikost 12 MiB. Potřebujeme pouze dostatek místa pro uložení změn, které provedeme ve zdroji. Mohli jsme naplnit zdroj LV 600 MiB dat, ale pokud se pravděpodobně změní pouze 12 MiB, potřebujeme pouze snímek 12 MiB. Velikost snímku odpovídá velikosti změn, ke kterým dojde. Volba –s nebo-snapshot určuje zdrojový svazek snímku. Stejně jako předtím volba-n nastaví název LV, který vytváříme.Snímek je čtení / zápis, takže lze připojit. Pojďme do toho a připojte jej do adresáře / mnt / snap:

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

budeme moci vidět stejný obsah v obou adresářích, i když nedošlo k žádným změnám. LVM snapshoty odkazy na původní data, dokud se nezmění.

když se podíváme na detail zdrojového i snímkového svazku, bude to vypadat trochu jinak. Za prvé, svazek lv1_snap. Snímek 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

můžeme si vzpomenout, doufám, že ano, že jsme to vytvořili s velikostí 12 MiB. Velikost LV, ačkoli, ukazuje jako 600 MiB. Velikost, kterou vidíme, je původní nebo zdrojová LV. velikost snímku se zobrazuje ve velikosti tabulky krav. Copy-on-Write nastane, když jsou data změněna ve zdroji a původní data jsou poté zkopírována do svazku snapshot. Svazek snímek bude vždy seznam původní snímek soubory bez ohledu na to, zda se změnily, nebo ne. Při vytváření snímku nejsou žádné změny CoW pro ukládání, takže přidělená hodnota je velmi nízká pro spuštění a bude se zvyšovat se změnami ve zdrojových datech. Když se nyní podíváme na podrobnosti o displeji lv1 LV, bude to také trochu jiné:

# 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

vidíme, že se zobrazuje jako zdroj snímku pro lv1_snap.

změna dat LVM Snapshot

pokud nyní provedeme změnu dat ve zdrojovém svazku, začneme vidět rozdíl v datech ve svazku snapshot. Svazek snímku bude obsahovat původní data, zatímco zdrojový LV bude obsahovat změny. Nejprve přidáme nový soubor do zdrojového svazku:

# cp /etc/hosts /mnt/original/

Nyní můžeme vidět, že obsah se liší pro zdroj na svazky snaphot

můžeme také vidět, že začneme spotřebovávat více prostoru krávy v logickém svazku. Vrátíme-li se k lvdisplay pro lv1_snap, uvidíme zvýšení procenta přiděleného snímku.

# 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

i když jsme nezměnili stávající data přidání nových dat také ovlivní snímek, protože svazek snímku musí zobrazovat data tak, jak byla při pořízení snímku. V případě potřeby bychom měli být schopni vrátit originál k datům snapshotted.

dále přepíšeme původní soubor / etc / services:

# > /mnt/original/services

soubor / mnt / original / services bude nyní prázdný. Pokud však zkontrolujeme soubor snímku, bude mít data stále. Pomocí příkazu wc můžeme spočítat počet řádků v každém souboru:

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

samozřejmě, překontrolování výstupu lvdisplay pro lv1_snap ukáže, že přidělené procento snímku se se změnou zvýšilo:

Allocated to snapshot 1.17%

změny hlasitosti pro snímky LVM

atributy pro zdrojové i snapshotové LVs se změní, když je snímek vytvořen. Můžeme to vidět podrobně s příkazem lvdisplay, ale je lépe shrnuto s příkazem lvs:

existuje 10 atributů, které čteme zleva doprava:

pro lv1 jsou atributy čteny:

  • Typ Svazku: Původ. Zdroj snímku
  • oprávnění: zapisovatelný
  • zásady přidělování: zděděné ze skupiny svazků
  • pevné vedlejší číslo není nastaveno
  • stav: je označen jako aktivní
  • zařízení: je otevřeno nebo připojeno
  • typ cíle: Snímek, tj. účastní se snímku

pro lv1_snap atributy, které jsou čteny:

  • typ svazku: Snapshot volume
  • oprávnění: zapisovatelné
  • zásady přidělování: Zděděno ze skupiny svazků
  • pevné vedlejší číslo není nastaveno
  • stav: je označen jako aktivní
  • zařízení: je otevřeno nebo připojeno
  • cílový typ: Snímek, tj. účastní se snímku

původní a cílové LVs musí být ve stejné skupině svazků, jak jsme již zmínili, ale nemusí nutně sdílet stejná zařízení v těchto skupinách svazků. Toto je obvykle abstrahováno od nás, ale můžeme přidat možnost do příkazu lvs:

přidáním –o pro volby a +zařízení se zobrazí základní zařízení, která tvoří LV. vidíme, že lv1 je větší než /dev / sdc1 nebo / dev / sdc2 a je rozložena napříč oběma. Zatímco vg1_snap může využít levý prostor v /dev / sdc2. Číslo v závorkách za názvem zařízení označuje číslo fyzického rozsahu, na kterém se LV spustí ze zařízení. Vidíme, že lv1 začíná na rozsahu 0 pro oba /dev / sdc1 a /dev / sdc2 a lv1_snap začíná na rozsahu 26 z /dev / sdc2. Chcete –li zobrazit všechny Dostupné možnosti s volbou-o, použijte příkaz:

# lvs -o help

vzhledem k tomu, že seznam je rozsáhlý, nezahrnuli jsme výstup.

stejně jako při pohledu na logické svazky přímo můžeme také použít příkaz lsblk. Zde uvidíme více změn, než si možná myslíte:

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

již jsme obeznámeni se zařízením vg1-lv1 a zařízeními VG1-lv1_snap. To byly základní LV, se kterými pracujeme. Hlavní číslo jádra nebo ovladač, který se používá s LVM2, je 252. Tak, vidíme to pro všechny LV, které máme na svém místě. První LV byl vg1-lv1, takže to má menší číslo 0. Když se podíváme na vg1-lv1_snap, ačkoli to má menší počet 3 označující to 4. LV a ne 2., Jak můžeme očekávat. Místo toho jsou pro snímek vytvořeny dva lv s wrapperem, vg1-lv1-real a vg1-lv1_snap-cow. Ty jsou interně spravovány a my se nezapojujeme do těchto objektů, které LVM2 používá ke správě procesu snapshottingu. Každá LV, kterou zde vidíme, má také odpovídající devmapper zařízení. Pokud uvedeme adresář /dev a filer na dm -*, můžeme je zobrazit.

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

znovu. vidíme 4 zařízení nejen 2, které jsme možná očekávali. Takže v pozadí LVM2 pro nás hodně spravuje a umožňuje nám přístup pouze k prvkům, které potřebujeme.

vrácení svazku na snímek

scénář obnovení se snímky LVM nám umožňuje vrátit se k snímku.Pokud zjistíme, že musíme vrátit původní LV na momentový snímek, můžeme tak učinit. Nezapomeňte, že snímek bude reprezentací původního svazku v době snímku. Můžeme to udělat poté, co byla testována aktualizace softwaru a bylo rozhodnuto vrátit se ke snímku, který měl být pořízen před procesem upgradu softwaru. Abychom to mohli vidět v reálném čase, nejprve odpojíme obě LV:

# umount /mnt/{original,snap}

pokud zařízení nezavřeme, budeme muset počkat, až se aktivuje původní LV, vg1. Často se jedná o restart. S oběma logickými svazky, které jsou nyní odpojeny a uzavřeny, použijeme příkaz lvconvert ke sloučení snímku s rodičem nebo původem. Tím se vrátí zdrojový logický svazek k obsahu snímku. Snímek se automaticky odstraní na konci procesu.

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

v závislosti na velikosti dat, která mají být sloučena, a rychlosti disků je možné, že to může nějakou dobu trvat. K pozadí procesu použijete volbu –b.

Pokud nyní znovu připojíme lv1 a zkontrolujeme obsah. Bude nám chybět soubor hosts, který byl přidán po pořízení snímku. Soubor služeb nyní máme obsah, který jsme přepsali.

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

testování a vývoj

další použití pro LVM snímky je v testovacím prostředí. Pokud byste raději pracovali přímo s daty snapshotted, můžete. Po dokončení stačí odpojit snímek LV a odstranit jej. Základní původní LV zůstává nezměněn. To je skvělé, kde chcete možná pracovat na skriptech, aniž byste ovlivnili původní produkční skripty.

proces je v podstatě stejný, ale nyní pracujeme pouze s adresářem/mnt / snap. Následuje shrnutí příkazů:

rozšíření velikosti snímku

když vytvoříme svazek snímku, měli bychom nastavit velikost, o které se domníváme, že je dostatečná pro uložení všech změn provedených v původním LV, zatímco je snímek na místě. V případě potřeby je však možné automaticky rozšířit svazek snímku.

je důležité si uvědomit, že pokud se snímek zcela zaplní, snímek se automaticky odstraní.

výchozí nastavení neumožňuje automaticky růst snímků. Musíme to povolit. Konfigurace LVM2 je v / etc/lvm / lvm.conf. Pokud hledáme efektivní nastavení pomocí grep:

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

nastavení snapshot_autoextend_threshold na 100% znamená, že snímek nikdy neroste. Jakmile narazíme na prahovou hodnotu 100%, snímek se odstraní. Pokud potřebujeme autoextend povoleno zvážit nastavení na něco jako 70. V takovém případě, když se snímek stane 70% plný, velikost se zvýší. Velikost nárůstu řízena snapshot_autoexend_percent. Výchozí hodnota je nastavena na 20%, což znamená, že velikost se zvýší o 20% své aktuální velikosti pokaždé, když je vyžadován růst.

Write a Comment

Vaše e-mailová adresa nebude zveřejněna.