LVM (thin provisioning)
Tzv. Thin Provisioning se u LVM objevil relativně nedávno, kolem r. 2009. Je to technologie, která umožňuje vytvářet a používat logické disky o větší kapacitě, než je dostupná kapacita fyzických blokových zařízení. Tato technologie využívá v principu toho, že jen výjimečně zabírají data na vyhrazeném logickém disku jeho plnou kapacitu.
U klasických "plnotučných" logických LVM oddílů, má každá z nich vyhrazen pro své extenty pevný rozsah, v jehož rámci si pak již souborový systém ukládá data po libosti. Většina datového prostoru ale zůstává nevyužita. Z hlediska ceny za jednotku datové kapacity je tento způsob hospodaření s datovým prostorem zbytečně rozmařilý, byť má svoje přednosti - označuje se jako tzv. fat či thick provisioning.
Thin Provisioning používajá COW mechanismus, co ukládá extenty s daty bezprostředně těsně za sebou, tak jak se postupně plní daty. Ovšem souborový systém, který je nad takovým logickým LVM oddílem, o tom neví. Díky tomu lze dělat logické oddíly s virtuální kapacitou, která je větší než skutečně dostupný fyzický datový prostor, aniž by bylo nutné předem řešit otázku hardwarové kapacity.
Data těchto logických oddílů jsou umístěna v tzv. poolu, což je ve své podstatě klasický logický LVM oddíl s přiděleným rozsahem extentů. Který lze v případě potřeby operativně zvětšit.
Velikost thin oddílů je (na rozdíl od velikosti poolu) čistě virtuální a tak se pochopitelně může stát, že některý z nich "zbobtná" do té míry, že už není kam data jiných přírůstkových oddílů uložit, a to i přes to, že stále vykazují dostatek volného místa.
V takovém případě lze situaci operativně vyřešit roztažením poolu - je-li to ovšem fyzicky možné. Pokud to možné není, nezbývá než:
- zmenšit, nebo úplně zrušit některý z plnotučných logických disků a tím uvolnit extenty pro roztažení poolu
- zrušit nějaký nepotřebný snapshot přírůstkového logického oddílu - pokud existuje, případně rovnou celý přírůstkový oddíl, je-li zbytečný.
- odstranit data některého z přírůstkových logických oddílů v rámci poolu.
ThinDataLV | velký logický oddíl, který bude konvertován na pool, do kterého se budou ukládat datové extenty virtuálních logických oddílů |
ThinMetaLV | malý logický oddíl pro metadata budoucího poolu, ve kterých se udržují informace o tom, ke kterému virtuálnímu logickému oddílu extent patří a zda-li má být jeho datový prostor na fyzickém disku stále obsazen, či zda se může uvolnit |
ThinLV | virtuální logický oddíl v rámci poolu |
Základní logický oddíl ThinDataLV, který bude tvořit základ poolu bude součástí LVM skupiny testovaci_skupina
, umístěné na klasickém HDD zařízení /dev/sdb
.
Příprava LVM skupiny testovaci_skupina
...
1, Vytvoření logického oddílu ThinMetaLV kde budou metadata extentů spravovaných v poolu.
stroj:~# lvcreate -L 1G -n ThinMetaLV testovaci_skupina
Logical volume "ThinMetaLV" created
|
2, Vytvoření logického oddílu ThinDataLV pro datové extenty virtuálních logických oddílů, jehož název se stane po konverzi názvem poolu
stroj:~# lvcreate -L 100G -n ThinDataLV testovaci_skupina
Logical volume "ThinDataLV" created
|
3, Vytvoření poolu
4, Vytvoření virtuálního logického oddílu ThinLV o velikosti 200GB
stroj:~# lvcreate --thinpool testovaci_skupina/ThinDataLV --virtualsize 200G -n ThinLV
Logical volume "ThinLV" created
stroj:~# lvs testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ThinDataLV testovaci_skupina twi-a-tz-- 100.00g 0.00 0.05
ThinLV testovaci_skupina Vwi-a-tz-- 200.00g ThinDataLV 0.00
|
Podrobný výpis obsazených extentů:
stroj:~# lvs -a -o +seg_pe_ranges testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert PE Ranges
ThinDataLV testovaci_skupina twi-a-tz-- 100.00g 0.00 0.05 ThinDataLV_tdata:0-25599
[ThinDataLV_tdata] testovaci_skupina Twi-ao---- 100.00g /dev/sdb:256-25855
[ThinDataLV_tmeta] testovaci_skupina ewi-ao---- 1.00g /dev/sdb:0-255
ThinLV testovaci_skupina Vwi-a-tz-- 200.00g ThinDataLV 0.00
[lvol0_pmspare] testovaci_skupina ewi------- 1.00g /dev/sdb:25856-26111
|
U podrobného výpisu si povšimněte, že u virtuálního logického oddílu 'ThinLV není uveden rozsah přidělených extentů. |
Také si všimněte logického oddílu lvol0_pmspare, který je rovněž součástí vytvořeného poolu. Tento automaticky vytvořený skrytý logický oddíl (pool metadata spare), je určen pro kontrolu a rekonstrukci dat v případě poškození metadat v rámci výchozího konvertovaného metadatového logického oddílu ThinDataLV_tmeta. I když lze vytvoření lvol0_pmspare při vytvoření poolu potlačit, je to z praktického hlediska nežádoucí.
Pokud by totiž k takovému poškození došlo, lze následujícím příkazem vynutit sestavení nové, opravené kopie metadatového logického oddílu: stroj:~# lvconvert --repair testovaci_skupina/ThinDataLV
Při této operaci bude utilita lvconvert postupně číst metadata ze stávajícího poškozeného metadatového logického oddílu ThinDataLV_tmeta, průběžně kontrolovat se stávajícím stavem datového logického oddílu ThinDataLV_tdata a v případě chyby se pokusí o jejich rekonstrukci. Takto rekonstruovaná kopie se bude zapisovat právě do logického oddílu lvol0_pmspare. Po skončení této operace se původní metadatový logický oddíl ThinDataLV_tmeta' nahradí tímto logickým oddílem s opravenými metadaty, který se stane viditelný pod novým názvem ThinDataLV_tmetaN (kde N může být číslo od nuly výše ). Pokud dopadla oprava úspěšně, pak může být původní logický oddíl s metadaty odstraněn. Pokud ovšem musíme přistoupit k opravě metadat, tak se zpravidla jedná o situaci, kdy se na původním blokovém zařízení začaly objevovat chyby. Proto je vysoce žádoucí v takovém případě zavčas celý pool přesunout na nový fyzický disk. V případě, že se metadata nepodaří obnovit, budou všechna data z poolu v háji!. |