LVM v Linuxu
LVM (Logical Volume Management) je v Linuxu nástroj, jak spojovat logická zařízení do větších celků. Využívá se pro vytváření velkých souborových systémů, pro možnost plynulého zvyšování kapacity souborových systémů bez nutnosti kopírování dat, pro možnost vyměňování disků, vytváření snímků souborových systémů a podobně.
Struktura LVM v Linuxu
LVM operuje s PV (Physical Volume), VG (Volume Group) a LV (Logical Volume). Základem LVM jsou bloková zařízení (PV), ze kterých se pak sestavují svazky (VG) a na nich se vytvářejí logické jednotky (LV), která vystupují jako bloková zařízení a lze je tedy snadno naformátovat a použít jako nosné médium pro souborový systém.
PV – Physical Volume
PV jsou bloková zařízení (nejčastěji oddíl, ale může to být třeba i celý disk, případně RAID pole). Vytváří se příkazem:
pvcreate /dev/hda3
Dostupné PV lze vypsat příkazy:
pvscan pvdisplay
Velikost PV je udána v bajtech nebo v PE (Physical Extent).
VG – Volume Group
Svazky sdružují PV do větších celků. Parametrem příkazu vgcreate
je název nového svazku a pak seznam PV, které budou do VG zařazeny. Další PV lze samozřejmě do svazku přidávat dodatečně, případně je i odebírat (vše za provozu). Vytvoření svazku:
vgcreate NAZEV_VG /dev/hda3
Dostupné VG lze vypsat příkazy:
vgscan vgdisplay
Druhý příkaz zobrazí též velikost dostupného místa v bajtech a v PE.
VG svazky je nutné aktivovat (při startu systému je provedeno obvykle automaticky), k čemuž slouží příkaz:
vgchange -a y
LV – Logical Volume
Na VG svazku lze vytvořit logickou jednotku (LV), se kterou se dále může pracovat jako s běžným blokovým zařízením (např. oddílem na pevném disku). Následující příkaz vytvoří 1500 MB velkou logickou jednotku:
lvcreate -L1500 -nNAZEV_LV NAZEV_VG
Velikost vytvářeného LV je možné zadat v MB (přepínač -L
) nebo v počtu PE, který se pak uvádí pomocí přepínače -l
.
Seznam dostupných LV lze zobrazit příkazem:
lvscan lvdisplay
Vytvořené logické zařízení se nachází v adresáři /dev
podobně, jako ostatní bloková zařízení (např. /dev/NAZEV_VG/NAZEV_LV
). Lze ho naformátovat a připojit do systému.
Administrace LVM v Linuxu
Vytvoření PV
PV lze vytvořit příkazem:
pvcreate /dev/hda4
Změna velikosti PV
Velikost PV lze zvětšit i v případě, že je na něm aktivní LV. Zmenšování funguje jen za předpokladu, že odebíraná PE nejsou alokována. V budoucnosti bude možná příkaz schopen alokované bloky přesunout podobně, jako to dělá příkaz pvmove
. Pokud je příkaz uveden bez parametru, je velikost PV přizpůsobena velikosti blokového zařízení, na kterém je PV umístěno (tj. velikosti disku, oddílu, md zařízení a podobně). Pomocí parametru --setphysicalvolumesize
může být uvedena velikost.
pvresize /dev/sda1 pvresize --setphysicalvolumesize 40G /dev/sda1
Po zvětšení PV je změna automaticky promítnuta do VG, do něhož je PV přiřazeno, takže lze vzápětí zvětšit vybraný LV příkazem lvresize
, případně vytvořit další LV příkazem lvcreate
.
Vytvoření VG
Jsou-li k dispozici PV, je možné vytvořit VG níže uvedeným příkazem. Vytvořený VG se automaticky aktivuje.
vgcreate NAZEV_VG SEZNAM_PV
Aktivace VG
Aktivace se provádí automaticky při startu počítače. Ručně ji lze provést příkazem:
vgchange -a y
Deaktivace VG
Deaktivace VG se provádí automaticky při ukončování běhu počítače. Ručně ji lze provést příkazem:
vgchange -a n NAZEV_VG
Odstranění VG
VG lze odstranit příkazem:
vgremove NAZEV_VG
Zvětšení VG
Do VG lze přidat další PV, čímž dojde ke zvětšení VG. Následně je možné zvětšit LV, případně data přemístit a odebrat jiný PV a podobně. Přidávaný PV musí být samozřejmě nejprve vytvořen příkazem pvcreate
. Další PV lze do VG přidat příkazem:
vgextend NAZEV_VG /dev/hda4
Po zvětšení VG jsou v něm dostupné volné PE, které lze příkazem lvresize
přidat do vybraného LV (a tím LV zvětšit). Po zvětšení LV lze použít příkaz ext2online
nebo resize2fs
, kterým je možné zvětšit souborový systém.
Zmenšení VG
Z VG lze odstranit PV jen pokud PV není součástí nějakého LV. V takovém případě není z PV alokováno žádné PE, což lze zjistit pomocí příkazu:
pvdisplay
V případě, že žádný PE z vybraného PV není alokováno, lze ho z VG vyjmout příkazem:
vgreduce NAZEV_VG /dev/hda4
Vytvoření LV
LV lze na existujícím VG vytvořit pokud jsou k dispozici nealokované PE. Níže uvedený první příkaz vytvoří LV o velikosti 1500 MB. Ve druhém řádku je pomocí přepínače -l
vytvořen LV o velikosti 999 PE jednotek (viz např. výstup příkazu vgdisplay -v
):
lvcreate -L1500 -nNAZEV_LV NAZEV_VG lvcreate -l999 -nNAZEV_LV NAZEV_VG
Odstranění LV
LV svazek může být po odpojení příkazem umount zrušen:
umount /dev/NAZEV_VG/NAZEV_LV lvremove /dev/NAZEV_VG/NAZEV_LV
Zvětšení LV
Logickou jednotku (dále jen LV) lze zvětšit jen pokud je v příslušném VG svazku volné místo. Pokud volné PE ve VG nejsou, je možné je dodat například tím, že doplníme do VG další volné PV. Nebo je možné stávající PV zvětšit (viz výše), což je obvykle navazující činnost na zvětšení RAID zařízení, na kterém PV leží. Volné PE zjistíme příkazem (tučně zvýrazněný text zadává uživatel):
$ vgdisplay | grep Free Free PE / Size 6778 / 211,81 GiB
V tomto případě je volných 6778 PE jednotek. Velikost LV lze zvětšit na maximum pomocí příkazu lvextend
s přepínačem -l
, kterému jako parametr předáme požadovaný počet PE jednotek. Znaménkem +
a -
lze přidávat nebo odebírat od aktuální velikosti:
lvextend -l+6778 /dev/NAZEV_VG/NAZEV_LV
Následující příkaz zvětšuje LV o 12 GB:
lvextend -L12G /dev/NAZEV_VG/NAZEV_LV
Po zvětšení LV (logické jednotky) je ještě nutné zvětšit souborový systém, který je na ní umístěn:
resize2fs -p /dev/NAZEV_VG/NAZEV_LV
Přepínač -p
zapíná vypisování průběhu změnu velikosti (v procentech). V příkazu resize2fs
není při zvětšování nutné uvádět cílový počet bloků (jako při zmenšování), protože v případě nepřítomnosti této hodnoty je automaticky souborový systém zvětšen na maximální možnou velikost v rámci zmíněného nosného blokového zařízení. V systému RHEL 4 se pro online zvětšení používá příkaz ext2online
. Pokud není přítomna podpora pro online zvětšení, je nutné nejprve souborový systém odpojit příkazem umount.
Zmenšení LV
Při zmenšování LV svazku je nutné nejprve zmenšit souborový systém, který je na něm umístěn. Velikost souborového systému nemusí přesně odpovídat velikosti oddílu (partition) nebo logického svazku – může být o něco menší. Přesnou informaci získáme výpisem informací o souborovém systému pomocí příkazu tune2fs
(v případě souborových systémů ext2, ext3 nebo ext4). Velikost zjistíme vynásobením velikosti bloku a počtu bloků:
tune2fs -l /dev/NAZEV_VG/NAZEV_LV | grep Block Block count: 4608639 Block size: 4096 Blocks per group: 32768
Ve výše uvedeném výpisu je velikost bloku 4096 bajtů (Block size), a protože je počet bloků 4608639, je celková velikost souborového systému 18.876.985.344 bajtů (17,58 GiB). Příkaz resize2fs
přijímá jako parametr počet bloků, který má mít výsledný zmenšený souborový systém. Zmenšování lze provést pouze na odpojeném souborovém systému, a proto je jako první použit příkaz umount
:
umount /dev/NAZEV_VG/NAZEV_LV resize2fs -p /dev/NAZEV_VG/NAZEV_LV početbloků
Po zmenšení souborového systému je možné zmenšit logickou jednotku (LV) na stejnou (nebo o kousek větší) velikost. V žádném případě není možné zmenšit LV na menší velikost, než má souborový systém. Příkaz lvreduce
přijímá různé parametry velikosti (včetně relativních nebo násobků jednotek). V tomto případě zjistíme informace o svazku (VG), kde nás zajímá velikost PE (PE Size), protože jejich požadovaný počet předáváme příkazu lvreduce
(nezapomeňte, že zaokrouhlit se musí směrem nahoru). Obvyklá velikost PE je například 4 MiB (tj. 4×1024×1024 = 4194304 bajtů).
vgdisplay -v NAZEV_VG lvreduce -lpočetPE /dev/NAZEV_VG/NAZEV_LV
Odstranění PV
Pokud je ve VG svazku dostatek volného místa (PE jednotek), je možné do nich přemístit obsazené jednotky zvoleného PV pomocí příkazu:
pvmove -v /dev/hda4
Výše uvedeným příkazem budou všechny obsazené PE jednotky na PV svazku /dev/hda4 přemístěny do volného místa příslušného VG svazku. Parametr -v
zajistí vypisování informací o průběhu přesunu. Jako dodatečné parametry lze určit PV, na který bude přesun uskutečněn (a též čísla PE). Příkaz lze spustit i když jsou logické jednotky LV na tomto VG svazku používány. Po dokončení přesunu se můžeme pomocí příkazu pvdisplay /dev/hda4 ujistit, že na tomto PV nejsou žádné obsazené PE jednotky. Pak je možné uvolněnou PV z VG svazku odstranit příkazem:
vgreduce NAZEV_VG /dev/hda4
PV svazky mají na sobě označení (label), pomocí kterého jsou v systému nalezeny. Pokud chcete označení odstranit, aby daný oddíl již nebyl identifikován jako PV (viz výstup příkazu pvscan
).
pvremove /dev/hda4
Pokud přesun není dokončen a chcete se vrátit k původnímu stavu, je možné zrušit všechny probíhající přesuny pomocí příkazu:
pvmove --abort
Přesun LV do jiného VG
vgsplit -n source_group/volume_to_copy source_group target_group vgsplit source_group target_group /dev/sdy99 /dev/sdz99
TODO