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. Je zde ale zvýšený počet IO operací, takže thin provisioning snižuje IO výkon LVM až o 30%![1].
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žívá 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!. |
- ↑ https://www.redhat.com/archives/dm-devel/2012-January/msg00048.html - Dokládají to testy, které počátkem r. 2012 dělal Jagan Reddy. Teoreticky je možné výkon zlepšit tím, že se do Thin VG skupiny přidají rychlá SSD zařízení, na které se umístí extenty vyhrazené pro metadata. Měly by být pokud možno dvě, a každá skupina metadat by měla být na jednom z nich, aby zůstala v případě selhání SSD disku zachována alespoň jedna kopie.