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.
|
Ačkoliv s balíčkem lvm2 u Debianu nainstalujete i knihovny protřebné pro práci s těmito tzv. thin disky, narazíte při jejich praktickém použití na problém, pokud nenainstalujete také balíček thin-provisioning-tools. Ten totiž není standardní součástí lvm2, ale je velmi důležitý, neboť obsahuje nástroje pro kontrolu a případnou opravu těchto thin oddílů.
|
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
...
|
stroj:~# cat /proc/partitions
major minor #blocks name
...
8 64 244198584 sdb
stroj:~# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
stroj:~# vgcreate -d -v testovaci_skupina /dev/sdb
DEGRADED MODE. Incomplete RAID LVs will be processed.
Wiping cache of LVM-capable devices
Adding physical volume '/dev/sdb' to volume group 'testovaci_skupina'
Archiving volume group "testovaci_skupina" metadata (seqno 0).
Creating volume group backup "/etc/lvm/backup/testovaci_skupina" (seqno 1).
Volume group "testovaci_skupina" successfully created
|
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
|
|
Bude-li logický oddíl ThinMetaLV pro metadata vytvořen dříve, než logický oddíl ThinDataLV, pak bude pro jeho extenty vyhrazen 1G datového prostoru fyzického disku /dev/sdb začleného do skupiny testovaci_skupina . Což je u klasických rotačních disků oblast s nejrychlejším přístupem.
Pokud ale ve skupině testovaci_skupina bude kombinace rychlých SSD disků s klasickým rotačním, pak lze tento oddíl umístit na SSD disky
|
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
|
|
charlie-brown (AMD) :~# 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 -wi-a----- 100.00g /dev/sdb:256-25855
ThinMetaLV testovaci_skupina -wi-a----- 1.00g /dev/sdb:0-255
|
3, Vytvoření poolu
|
stroj:~# lvconvert --type thin-pool --thinpool testovaci_skupina/ThinDataLV --poolmetadata testovaci_skupina/ThinMetaLV
WARNING: Converting logical volume testovaci_skupina/ThinDataLV and testovaci_skupina/ThinMetaLV to pool's data and metadata volumes.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert testovaci_skupina/ThinDataLV and testovaci_skupina/ThinMetaLV? [y/n]: y
Logical volume "lvol0" created
Converted testovaci_skupina/ThinDataLV to thin pool.
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
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
[lvol0_pmspare] testovaci_skupina ewi------- 1.00g /dev/sdb:25856-26111
|
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!.
|