LVM (thin provisioning)

From DCEwiki
Jump to navigation Jump to search

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.

Upozornění 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 ...

Poznámka
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.

Poznámka
stroj:~# lvcreate -L 1G -n ThinMetaLV testovaci_skupina
  Logical volume "ThinMetaLV" created
Poznámka 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

Poznámka
stroj:~# lvcreate -L 100G -n ThinDataLV testovaci_skupina
  Logical volume "ThinDataLV" created
Poznámka
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

Poznámka
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
Poznámka Pool lze vytvořit také rovnou, bez konverze předpřipravených LV oddílů příkazem lvconvert
Poznámka
stroj:~# lvccreate -L 100G --poolmetadatasize 1G --type thin-pool --thinpool ThinDataLV testovaci_skupina

Ba lze při založení poolu vynechat i parametr --poolmetadatasize. V takovém případě bude vytvořen metadatový oddíl automaticky, a jeho velikost bude odpovídat počtu "chunků", na který bude rozdělen datový pool * 64 bajtů.

Výchozí velikost "chunku" je 64 KiB, ale jeho hodnota může být nastavena v rozmezí od 4 KiB do 1GiB. Větší velikost "chunku" je výhodnější pro rychlejší snapshotování, menší je úspornější z hlediska místa. Jakou máte nastavenou velikost "chunku" můžete zjistit následujícím příkazem:

Poznámka
stroj:~#  lvs -o name,chunksize
  LV       Chunk 
  ThinData 64,00k

4, Vytvoření virtuálního logického oddílu ThinLV o velikosti 200GB

Poznámka
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
Poznámka 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
Poznámka 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ů.
Upozornění 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!.

  1. 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.