Úvod do LVM

5. 8. 2008
Doba čtení: 6 minut

Sdílet

Od jádra 2.4 je tu s námi dynamická správa diskových oddílů známá jako LVM (Logical Volume Management). Jedná se o nástroj, díky kterému můžeme jednoduše pracovat s diskovými oddíly a nemusíme se ohlížet na fyzické rozložení prostoru na discích. LVM se dneska používá hlavně na serverech, ale najde si svou cestu i na desktop.

Úvod

Oddíly na discích se vytvářejí od nepaměti a za dobu své existence se příliš nezměnily. Tento koncept přestal být dostačující například u serverů poskytujících velmi oblíbené virtuální hostingy. Představte si situaci, kdy si zákazník pronajme virtualní stroj s určitou kapacitou disku. Za půl roku mu bude disk malý, a tak se rozhodne si připlatit další. Pokud by poskytovatel těchto služeb nepoužíval LVM, měl by velmi omezené možnosti pro rozšíření a celá operace by byla velmi zdlouhavá a složitá. LVM naštěstí celý proces značně usnadňuje.

Druhá situace, která může nastat, je například zálohování běžícího systému. Představte si obyčejný počítač, který jste konfigurovali několik dní a je vyladěn do posledního detailu. Náhle je potřeba vytvořit zálohu kvůli různým neočekávaným vlivům, jenže počítač už je na svém místě, běží a nelze jej vypnout. Použít na běžící systém cp -ax / /mnt/kamkoli je prakticky nereálné. Nástroj rsync by v tomto případě také moc nepomohl. Nicméně LVM nabízí možnost vytvoření tzv. snapshotu, který jakoby vytvoří kopii oddílu, který chceme zálohovat a od té chvíle si oba oddíly žijí svým životem a na povrch jeden neovlivňuje druhý. Teď ten nový oddíl můžeme zálohovat a nebude nám dělat problémy měnící se systém. Této vlastnosti se dá využít, například i pokud zkoušíte nový postup nebo verzi softwaru, protože snapshot se chová jako plnohodnotný oddíl.

Základ LVM

LVM se skládá ze tří hlavních částí. Jsou to Physical volume (PV), Volume group (VG). Logical volume (LV). Pokud začínáme vytvářet LVM oddíly, první, co musíme udělat, je přidat fyzické disky (PV) pod správu LVM. Takto můžeme přidat jak jednotlivé oddíly, jako /dev/sda1, nebo i celé disky bez oddílů, např. /dev/sda. Výpis fyzických oddílů vypadá pak podobně jako tady:

  PV         VG      Fmt  Attr PSize   PFree
  /dev/sda2  mydisks lvm2 a-   111,72G    0
  /dev/sdb2  mydisks lvm2 a-   298,02G 1,52G
  /dev/sdc2  mydisks lvm2 a-   298,02G    0

Ve výpisu si všimneme sloupce VG. Jedná se o tzv. Volume groupy. To jsou skupiny fyzických oddílů a z pohledu LVM se pak tato VG chová podobně jako normální disk v Linuxu. Přehled VG vypadá takto:

  VG      #PV #LV #SN Attr   VSize   VFree
  mydisks   3   8   0 wz--n- 707,77G 1,52G

Na svém počítači mám pouze jednu VG, která spojuje většinu kapacity ze třech fyzických disků. Když máme vytvořené VG a v nich dostatečné množství místa, můžeme vytvořit již samotné dynamické oddíly nazývané Logical volume. Krom toho, že se označují jinak (např. /dev/mydisks/home), jsou to klasická linuxová bloková zařízení a lze s nimi pracovat jako s kterýmkoli jiným oddílem. Můžeme je formátovat, zvětšovat, zmenšovat nebo z nich vytvářet snapshoty. LV mohou být také vytvořeny jako RAID 0 a RAID 1. Výpis LV vypadá takto:

  LV      VG      Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  data    mydisks -wi-ao  40,00G
  disk    mydisks -wi-ao 640,00G
  home    mydisks -wi-ao   8,00G
  portage mydisks -wi-ao   3,00G
  root    mydisks -wi-ao  10,00G
  swap    mydisks -wi-ao 800,00M
  swap2   mydisks -wi-ao   1,46G
  test    mydisks -wi-a-   3,00G

Struktura

Při přidávání fyzických disků či oddílů pod správu LVM se udělá mapa tzv. physical extents (PE). Tím se rozdělí fyzické místo na malé bloky (výchozí nastavení je 4 MiB) a to se pak mapuje jednotlivým LV. Jeden LV se skládá také s extentů nazývaných Logical extents (LE). Když se vytvoří LV, tak se jeho LE namapují na PE. Pokud se jedná o RAID 1, tak se jeden LE namapuje na dva PE ze dvou disků. Pokud jde o RAID 0, tak se LE namapují střídavě na PE také obou disků. Bohužel se nemůžeme spolehnout na to, že toto střídavé namapování u RAID 0 bude opravdu fyzicky umístěno tak, jak je zamýšleno, protože disky svoji vnitřní strukturu schovávají za logiku, která se snaží optimalizovat chod disku. Celé LVM je tedy jen přemapování fyzického prostoru na prostor virtuální. To nám dává mnohem větší možnosti.

Možnosti LVM

Dynamická správa oddílů

S vytvořenými LV je možné dále pracovat. Velmi jednoduše může uživatel zvětšit či zmenšit oddíl nebo ho úplně smazat a dát na jeho místo jiný. Tím se řeší například situace, kdy svému /home přidělíte při instalaci málo místa a o rok později se tam už nevejdou nové fotky z dovolené. S LVM není problém třeba zmenšit oddíl pro filmy a toto místo přidat do /home. Všechny tyto operace lze dělat za běhu systému a pokud se umí zvětšovat/zmenšovat použitý souborový systém také za běhu, tak se při této akci nemusí stroj vůbec vypínat. Je také možné přesunout běžící systém na úplně jiný fyzický disk. To se hodí, pokud se ve S.M.A.R.T. začnou objevovat chyby a rozhodnete se disk vyměnit.

Snapshoty

LVM využívá tzv. copy-on-write postupu. Na něm jsou založeny snapshoty a funguje to velmi jednoduše a spolehlivě. Pokud si vytvoříte například snapshot pro svůj /, tak oba oddíly budou prakticky stejné a prostor, který snapshot využívá, nebude větší, než by zabrala potřebná metadata. Pokud se pak v původním oddíle něco změní, tak se nejprve před provedením této změny zkopíruje původní stav do snapshotu a až poté se zapíše změna, o kterou bylo jádro požádáno. Do snapshotu se tedy zapisují bloky, které se v původním oddíle změnily. Díky tomu zůstává snapshot beze změny od doby, co byl vytvořen. Vytvořený snapshot nedělá problémy v zálohování.

S jádrem řady 2.6, se kterým přišlo LVM 2, se snapshoty staly zapisovatelné. Je tedy možné snapshot připojit a používat ho jako normální oddíl a testovat si na něm nové verze softwaru a nastavení. Pokud se něco nepovede, není nic lehčího než snapshot odstranit a udělat si nový.

Boot z LVM a jak se k němu staví distribuce

Každá distribuce se k LVM chová jinak. Ve výchozím stavu ho používá snad jen Fedora, ale Debian/Ubuntu by také nemělo mít problém s instalací sebe sama na LVM oddíly. Archlinux a Gentoo mají na svých wiki návody s postupem jak přidat podporu LVM do systému. V ostatních distribucích jsem s LVM nepracoval.

Obecně se jedná vždy o podporu v jádře a při následném nabíhání systému najít včas oddíly. Pokud se rozhodnete mít systém, do kterého se bootuje z LV, tak toto hledání se přesouvá do initrd. Zjednodušeně řečeno je initrd mini-systém, který připraví hardware k dalšímu použití. V initrd se zavolá program vgscan a ten najde VG a umístí jednotlivé LV do /dev. Poté může jádro nabootovat do „velkého“ systému. Občas se dá najít live distribuce, která není nic jiného než initrd, takže jeho možnosti jsou mnohem dále než nějaká příprava hardwaru.

ict ve školství 24

Shrnul bych to tedy následovně. Pokud to vaše distribuce neudělá za vás, musíte si do jádra přidat podporu pro device-mapper a LVM 2. Pak je nutné vytvořit initrd s podporou LVM, který najde a přístupní LV.

Závěr

V tomto úvodu jsme si vysvětlili základní vlastnosti LVM. V dalším díle se budeme věnovat praktickým ukázkám. LVM je velmi dobrý pomocník při práci s disky a není vhodný pouze pro servery, ale i pro vývojáře nebo uživatele, kteří třeba provozují více distribucí nebo jen chtějí využít možnosti, které jim LVM nabízí. Bohužel s LVM přichází i nutnost používat initrd. Na distribucích jako je Ubuntu to nevadí, protože se o to uživatel nemusí vůbec starat, ale u mého Gentoo musím pro každé nové jádro vytvářet nový initrd, a to není nejpohodlnější a brzdí to nabíhání systému.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.