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