LVM - Logical Volume Management

Z HKfree wiki
Přejít na: navigace, hledání

http://www.tldp.org/HOWTO/LVM-HOWTO/

LVM v Linuxu vychází z HP-UX LVM, takže můžete použít i materiály od HP.

Hinty

pvmove hlásí "mirror: Required device-mapper target(s) not detected in your kernel"

Při migraci extentů z physical-volume (který chceme odebrat) do zbytku volných extentů v rámci volume-group, hlásí pvmove zmíněnou hlášku.
Řešení (jádro 2.4, LVM2): nutno zavést modul dm-mirror

insmod dm-mirror


LVM

Jak již bylo řečeno, pevné disky se rozdělují na oddíly (partitions). Oddíl musí tvořit na disku souvislou oblast. Díky tomu je jakákoliv manipulace značně nepohodlná. Většina operací se nesmí dělat za běhu systému. Už i přesunutí oddílu na jiný disk může být problém. Dále nejdou jednoduše spojit dva oddíly na dvou různých discích a používat jako jeden. Z tohoto důvodu se nad tuto vrstvu zavádí další abstrakce LVM (logical volume manager). Pro porozumění je třeba znát následující pojmy:

  • Fyzický svazek (physical volume, PV) je místo, kam se fyzicky ukládají data. Většinou se jedná o běžný diskový oddíl naformátovaný speciálním způsobem.
  • Fyzický extent (physical extent, PE) je nejmenší adresovatelná alokační jednotka ve fyzickém svazku.
  • Skupina svazků (volume group, VG) je množina několika fyzických svazků, která zpřístupňuje jejich fyzické extenty jako logické. Tato vrstva zajišťuje překlad z fyzického umístění (PE) na logické (LE) a naopak.
  • Logický svazek (logical volume, LV) odpovídá oddílům běžných disků. Skládá se z několika logických extentů.
  • Logický extent (logical extent, LE) je nejmenší adresovatelná jednotka v logickém svazku. Každému logickému extentu odpovídá alespoň jeden fyzický, ale například při zrcadlení nebo snímku jich může být i víc. Toto přiřazení lze změnit (tj. LE je stále stejný, ale odpovídá mu jiný PE).

O vlastní realizaci v Linuxu 2.6 se stará tzv. device mapper. Toto speciální zařízení umožňuje na sebe namapovat úseky dat z jiných blokových zařízení. Veškerá práce nástrojů pro LVM v Linuxu se sestává z úpravy tohoto mapování. To se provádí pomocí nástroje lvm2. Všechny příkazy, které pracují s fyzickým svazkem začínají na pe, s logickým na lv a se skupinou překapivě na vg.

Předeme jednoduchý příklad pro dva disky. Na prvním disku (hda) vytvoříme diskový oddíl pro /, /boot, swapování a PV (hda1hda4). Oddíl /boot nemůže z pochopitelných důvodů být na LVM (nešel by nastartovat systém) a u oddílu / se to nedoporučuje, protože musíme pomocí uživatelských utilit spustit LVM. Je sice možné použít startování z ramdisku (initrd), ale to způsobí příliš velké komplikace. Navíc oddíl / obsahuje typicky pouze základní systémové programy (obvykle kolem 200 MiB). Oddíl, na kterém je swap, se také nedoporučuje mít na LVM, protože není zaručeno, že nenastane uváznutí (deadlock). Navíc tento oddíl lze přesunout za běhu systému pomocí swapon a swapoff. Druhý disk (hdb) celý využijeme pro LVM, a proto bude obsahovat pouze oddíl hdb1.

  • 1. Nejprve je potřeba naformátovat disky hda4 a hdb1 jako PV (pvcreate zařízení).
  • 2. Následně inicalizujeme skupinu svazků příkazem vgcreate -s 16M data /dev/hda4 /dev/hdb1. Tímto jsme vytvořili skupinu se jménem data, která obsahuje dva fyzické svazky s velikostí fyzického extentu 16 MiB. O úspěšném vytvoření se můžeme přesvědčit pomocí příkazu vgdisplay data.
  • 3. Nyní stačí vytvořit logické svazky. Provedeme to pomocí lvcreate -n var -L 1G data . Tímto vytvoříme ve skupině data svazek s názvem var a velikostí 1 GiB. Je-li třeba uvést velikost v extentech, použijeme volbu -l 64. V adresáři dev se vytvoří soubor /dev/data/var, který reprezentuje odkaz na vzniklé blokové zařízení. Obdobně bychom postupovali i pro další svazky. Přehled o všech logických svazcích ve skupině lze získat pomocí příkazu lvdisplay data.

Na první pohled by se mohlo zdát, že jde pouze o mírné zjednodušení oproti vytváření diskových oddílů. Teč přijdou na řadu mnohem zajímavější operace:

  • Logický svazek odstraníme pomocí lvremove /dev/data/svazek, nevyužitý fyzický ze skupiny pvremove /dev/svazek či skupinu svazků vgremove data.
  • V okamžiku, kdy do počítače bude přidán další fyzický svazek, jej lze připojit do skupiny pomocí vgextend data /dev/hdc1.
  • Logický svazek zvětšíme asi o 100 MiB příkazem lvextend -L +100M /dev/data/var. Zmenšení se provede pomocí lvreduce -L -100M /dev/data/opt. Před touto operací nesmíme zapomenout také zmenšit (případně zvětšit po ní) souborový systém. Výhodné je použít systém xfs, který toto umožňuje během provozu.
  • Příkaz pvmove /dev/svazek1 /dev/svazek2 bezpečně přesune extenty z jednoho fyzického svazku na druhý.
  • Některé operace se naopak staly obtížnějšími, jako například přenos skupiny svazků na jiný počítač. Pro tento úkon musíme deaktivovat všechny logické svazky ve skupině pomocí vgchange -a n data a poté exportovat metadata skupiny vgexport data. Na druhém počítači poté se skupina importuje (vgimport data) a aktivují se logické svazky (vgchange -a y data).

Všechny tyto příkazy lze provést za plného běhu systému! Například při výměně disku lze minimalizovat výpadek pouze na dobu instalace.