LVM v Linuxu

Z Milan Kerslager
Verze z 22. 12. 2016, 06:26, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (Přesun LV do jiného VG: příkazy)
Přejít na: navigace, hledání

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

Externí odkazy