Linux E X P R E S

Facebook

Správa linuxového serveru: Ještě trocha LVM

debain_notext.png

V tomto díle vám přiblížím zrcadlení v rámci LVM a téma LVM v rámci tohoto seriálu uzavřu.


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.

Diskuze (2) Nahoru