Zrcadlení v rámci LVM
Ačkoliv LVM vyniká flexibilitou práce s úložným prostorem, jeho velkým problémem je možné selhání fyzických svazků (physical volume), na kterých je LVM postaveno. Pokud tedy vytvořím skupinu svazků (volume group) z několika pevných disků, je sice na jednu stranu hezké, že k tomu prostoru mohu přistupovat jako ke spojitému úložnému prostoru, se kterým mohu zacházet jako s jedním velkým pevným diskem, který mohu dále libovolně dělit, ale co když některý z těch disků selže? LVM se v tomto ohledu chová podobně jako RAID 0, nemá žádnou redundanci a selhání fyzického svazku znamená ztrátu dat.
LVM v Linuxu však redundance přeci jen schopen je. V rámci LVM je totiž možné vytvořit logický svazek (logical volume), který bude fyzicky zrcadlen nad dvěma nebo více fyzických svazích. To je totéž, co provádí RAID 1. Předpokladem pro vytvoření zrcadleného svazku jsou alespoň tři (ano, opravdu tři) fyzické svazky. Je tomu tak kvůli nutnosti uložení diskového logu na třetí, nezávislé zařízení.
Na úvod vám ukážu tu nejjednodušší situaci, do které se můžete dostat:
[root@debian ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb vg lvm2 a- 10.00g 10.00g /dev/sdc vg lvm2 a- 10.00g 10.00g /dev/sdd vg lvm2 a- 10.00g 10.00g
Zde jsou vidět tři potřebné fyzické svazky s dostatečnou kapacitou. V takovém případě postačí vytvořit zrcadlený logický svazek, takto:
[root@debian ~]# lvcreate -L 9G -n zrcadlo -m 1 vg Logical volume "zrcadlo" created
Jakmile dojde k vytvoření zrcadleného oddílu, dojde i k zahájení úvodní synchronizace jednotlivých zrcadel. Je to proces velmi podobný jako v případě klasického RAIDu 1. Třetí disk, respektive malý kousek na něm, pak slouží jako synchronizační log, díky kterému bude možné udržet synchronizaci i po deaktivaci skupiny svazků (k té dojde třeba při restartu, apod.). Průběh synchronizace je možné sledovat pomocí nástroje lvs
:
[root@debian ~]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert zrcadlo vg mwi-a- 9.00g zrcadlo_mlog 1.39
Pokud byste chtěli sledovat situaci v reálném čase, můžete si pomoci nástrojem watch
:
watch -n 1 lvs
Tento příkaz bude de facto spouštět nástroj lvs
každou sekundu. Můžete samozřejmě použít i časy kratší, i když v tomto případě to patrně nebude nutné.
Co dělat, pokud máte pouze dva fyzické svazky
První komplikací, která může nastat, je absence třetího fyzického svazku pro uložení mirror logů. V takovém případě, nevadí-li vám nutnost opětovné synchronizace při každém restartu počítače, můžete použít následující trik:
lvcreate -L 5G -n zrcadlo -m 1 vg --mirrorlog core
Můžete použít i kratší zápis --corelog
místo --mirrorlog core
. Obojí zajistí možnost vytvořit daný logický svazek pouze na dvou fyzických svazcích místo třech.
Nedostatek souvislého prostoru na fyzických svazích
Druhou možnou komplikací může být nedostatek souvislého prostoru na fyzických svazcích. Pro lepší ilustraci, uvažte následující situaci:
[root@debian ~]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert root vg -wi-a- 8.00g storage vg -wi-a- 8.00g [root@debian ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb vg lvm2 a- 10.00g 2.00g /dev/sdc vg lvm2 a- 10.00g 10.00g /dev/sdd vg lvm2 a- 10.00g 2.00g
Pokud se podíváte na dostupnou kapacitu skupiny svazků, zjistíte, že je možné vytvořit až 7GB velký zrcadlený logický svazek, ale volné místo na discích sdb
a sdd
je po dvou GB. Pokud předpokládáte, že v této konfiguraci postačí zadat LVM vytvoření zrcadleného oddílu a on potřebné místo uvolní, pak vás musím zklamat, tohle LVM automaticky provést neumí:
[root@debian ~]# lvcreate -L 6G -n zrcadlo -m 1 vg Insufficient suitable allocatable extents for logical volume : 1025 more required Unable to allocate extents for mirror(s).
Dejme tomu, že vám bude stačit 6GB. Abyste tedy mohli zrcadlený svazek vytvořit, musíte uvolnit potřebné místo na jednotlivých fyzických svazcích ručně. K tomu použijete nástroj pvmove
. Chcete-li 6GB velký svazek a máte-li v dané skupině svazků velikost fyzického extentu (PE) 4MB, budete potřebovat alespoň 1536 PE na dvou fyzických svazcích, neboť:
(6 * 1024) / 4 = 1536
Zjistit konkrétně hodnoty alokace PE můžete pomocí nástroje vgdisplay
:
[root@debian ~]# pvdisplay /dev/sdb --- Physical volume --- PV Name /dev/sdb PE Size 4.00 MiB Total PE 2559 Free PE 511 Allocated PE 2048
Jelikož v tomto případě potřebujete 1536 volných PE, přesunete PE od extentu 1022 až po poslední alokovaný extent, tedy 2048, ze svazku sdb
na svazek sdc
:
pvmove /dev/sdb:1022-2048 /dev/sdc
Totéž provedu se svazkem sdd
:
pvmove /dev/sdd:1022-2048 /dev/sdc
Výsledek bude vypadat takto:
[root@debian ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb vg lvm2 a- 10.00g 6.00g /dev/sdc vg lvm2 a- 10.00g 1.99g /dev/sdd vg lvm2 a- 10.00g 6.00g
Nyní již můžete konečně vytvořit požadovaný zrcadlený logický svazek:
[root@debian ~]# lvcreate -L 6G -n zrcadlo -m 1 vg Logical volume "zrcadlo" created
Ruční žonglování s PE a nutnost řešit související matematické úlohy asi není to pravé ořechové, ale bohužel mi kromě možnosti napsat si za tímto účelem nějaký pomocný shellový skript není znám žádný rychlejší postup.
Když disk selže...
Pokud disk selže, projeví se to ve výpisu fyzických svazků takto:
[root@debian ~]# pvs Couldn't find device with uuid 'fM74J2-9Utu-jvCL-mGVg-7xJW-iiQd-l0Lvgf'. PV VG Fmt Attr PSize PFree /dev/sdc vg lvm2 a- 10.00g 1.98g /dev/sdd vg lvm2 a- 10.00g 0 unknown device vg lvm2 a- 10.00g 0
Pokud samotný zápis na zrcadlený svazek nevyvolá automatickou konverzi zrcadleného svazku na lineární (nezrcadlený), lze to učinit ručně, odebráním chybějících zařízení ze skupiny svazků:
[root@debian ~]# vgreduce --removemissing vg --force Couldn't find device with uuid 'fM74J2-9Utu-jvCL-mGVg-7xJW-iiQd-l0Lvgf'. WARNING: Bad device removed from mirror volume, vg/zrcadlo WARNING: Mirror volume, vg/zrcadlo converted to linear due to device failure. Wrote out consistent volume group vg WARNING: dev_open(/etc/lvm/cache/.cache) called while suspended
Po výměně disku postačí nový disk vložit do skupiny svazků:
[root@debian ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created [root@debian ~]# vgextend vg /dev/sdb Volume group "vg" successfully extended
A následně provést konverzi nyní lineárního svazku "zrcadlo" na svazek zrcadlený:
lvconvert -m1 vg/zrcadlo
Přístup k LVM ze záchranného/cizího systému
LVM si uchovává podstatné údaje jednak v /etc/lvm
a jednak v hlavičkách fyzických svazků. Pokud máte celý systém na LVM a dojde k nějaké havárii a systém vám nenastartuje, pak musíte LVM připojit ručně.
Nástroje pvscan
, vgscan
a lvscan
po svém spuštění bez parametru osahají všechny dostupné disky a najdou všechny fyzické svazky (physical volumes), skupiny svazků (volume groups) a logické svazky (logical volumes).
Abyste vytvořili všechna potřebná zařízení v /dev
, použijte následující příkaz:
vgchange -ay
Pak budete moci přistupovat ke všem logickým svazkům, připojit je a provést případnou záchranou operaci.
Strategie použití LVM na serveru
Pokud budete spravovat server (a nejenom v tomto případě), pak se rozhodně vyplatí alokovat jednotlivým logickým svazkům co nejméně, nechat si ve skupině svazků volné místo a spíše logické svazky rozšiřovat dle potřeby, než alokovat celý dostupný prostor a pak přemýšlet, co zmenšit. Volný prostor je nutný nejen k vytváření dalších logických svazků, ale i k vytváření snapshotů.
Zrcadlit pomocí LVM nebo RAIDem 1?
Podle mého názoru je nejideálnější schéma nasazení LVM nad nějakým RAIDem, ať už RAIDem 1, 5, 6 nebo třeba 10. Samotné zrcadlení v rámci LVM je zajímavé, ale trpí jistými drobnými nedostatky, počínaje nutností mít tři fyzické svazky. Také je nutné počítat s tím, že LVM je co do funkčnosti podstatně rozsáhlejší a složitější než samotný RAID 1, ať už softwarový či hardwarový. V případě problémů (hardwarových i softwarových) je RAID 1 přeci jen jednodušší v případě záchranných operací.
Když už zmiňuji RAID a zrcadlení, neodpustím si zopakovat svou obligátní poznámku, že tyto technologie nejsou náhražkou zálohování, ba právě naopak. S každou funkcionalitou navíc rostou možnosti nějakého selhání či problému. V souvislosti s LVM je určitě dobré zmínit jeden velice zajímavý článek o jeho vztahu k souborovým systémům.
Tím bych problematiku LVM uzavřel. V příštím dílu seriálu se podívám na dm-crypt/LUKS z praktického hlediska.