Správa linuxového serveru: LVM prakticky
LVM byl v tomto seriálu představen na teoretické úrovni v jednom z prvních dílů. Nyní převedu teorii do praxe a ukážu vám, jak se s LVM pracuje. V tomto dílu proberu základní operace s LVM.
Abyste se v následujícím článku neztratili, doporučujeme si nejdříve přečíst předchozí díly seriálu, především však článek Správa linuxového serveru: LVM a diskové šifrování.
Základem pro LVM jsou fyzické svazky (physical volumes). Nejprve tedy musíte vytvořit fyzické svazky, které později začleníte do skupiny svazků (volume group), kterou pak rozdělíte na jednotlivé logické svazky (logical volumes).
Ukážu vám to na příkladu. Řekněme, že máte v počítači tři pevné disky, na každém jeden oddíl vyplňující celý disk:
debian:~# cat /proc/partitions
major minor #blocks name
3 0 5242880 hda
3 1 5237158 hda1
3 64 5242880 hdb
3 65 5237158 hdb1
22 64 5242880 hdd
22 65 5237158 hdd1
Prvním krokem je vytvoření fyzického svazku. Vytvoříte tedy fyzický svazek z oddílu hdb1
:
debian:~# pvcreate /dev/hdb1
Physical volume "/dev/hdb1" successfully created
debian:~#
Tímto byl vytvořen fyzický svazek. Podrobné informace o fyzickém svazku, který byl právě vytvořen, lze zobrazit s použitím nástroje pvdisplay
, který vypíše informace o konkrétním fyzickém svazku, pokud mu jako parametr zadáte nějaký konkrétní, nebo vypíše informace o všech fyzických svazcích, o kterých ví (v tomto případě pouze o tom jednom), pokud jej spustíte bez parametrů:
debian:~# pvdisplay
"/dev/hdb1" is a new physical volume of "4.99 GB"
--- NEW Physical volume ---
PV Name /dev/hdb1
VG Name
PV Size 4.99 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 3wvOQk-M0uS-XJN6-nlrl-x8Uz-CJDF-in2fEs
Velikost svazku je 4.99GB, většina ostatních hodnot je poznamenána tím, že fyzický svazek není součástí žádné skupiny svazků (volume group). Abyste mohli fyzický svazek využít, musíte jej začlenit do skupiny svazků. Jelikož v tuto chvíli není k dispozici žádná skupina svazků, vytvoříte novou, třeba s názvem "data", s pomocí právě tohoto fyzického svazku:
debian:~# vgcreate data /dev/hdb1
Volume group "data" successfully created
debian:~#
Pro zjišťování informací o skupině svazků je k dispozici podobný nástroj - vgdisplay
, jehož výpis v tuto chvíli vypadá takto:
debian:~# vgdisplay
--- Volume group ---
VG Name data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.99 GB
PE Size 4.00 MB
Total PE 1278
Alloc PE / Size 0 / 0
Free PE / Size 1278 / 4.99 GB
VG UUID SmBDKH-iTL3-K3aM-I4e6-qgyZ-XL05-wxG7P1
debian:~#
Z výpisu je vidět použitý formát (lvm2
), počet fyzických svazků přiřazených do skupiny, dále celkovou velikost skupiny svazků i její obsazení. Všimněte si také zkratky PE, jejíž význam odhaluje jádro fungování LVM.
LVM pracuje na fyzické úrovni tak, že si rozdělí fyzické svazky do bloků určité velikosti, které pak přiděluje jednotlivým logickým svazkům. Tyto bloky jsou nazývány jako "physical extent" (dále PE). Ve výpisu je vidět, že jeden PE má v tomto případě velikost 4MB a skupina svazků jich má k dispozici celkem 1278, z nichž žádný není dosud alokován (přiřazen logickému svazku).
Ještě než se vrátím k vytváření logického svazku, upozorním ještě na to, čeho si pozorný čtenář jistě všiml, a sice nápadné podobnosti jednotlivých příkazů pro správu LVM, které se liší pouze úvodními dvěma písmeny. V případě LVM je dobré si v paměti uchovat anglické názvy všech pojmů jako "physical volume", "volume group" a "logical volume", protože počáteční písmena daných názvů tvoří prefix pro sadu příkazů, kterými je lze spravovat. Tudíž, pokud operujete s fyzickými svazky, použijete prefix pv
následovaný slovíčky jako display
, create
, extend
, atd., a analogický postup použijete v případě ostatních komponent LVM.
Avšak zpět k vytváření LVM. V tuto chvíli je tedy vytvořena skupina svazků z jednoho fyzického svazku. Zbývá poslední krok, a sice vytvoření logického svazku:
debian:~# lvcreate -L 4.99G data -n zalohy
Rounding up size to full physical extent 4.99 GB
Logical volume "zalohy" created
Parametr -L
udává velikost logického svazku, v tomto případě 4.99G
, kde G
značí gigabyty. Parametr -n
umožňuje dát příslušnému logickému svazku jméno, v tomto případě "zalohy
".
Příslušný logický svazek je k dispozici jako blokové zařízení /dev/mapper/data-zalohy
a lze s ním zacházet jako s kterýmkoliv diskovým oddílem (nebo blokovým zařízením obecně). Příslušné zařízení má i symbolický odkaz /dev/data/zalohy
, tudíž je k němu možné přistupovat i takto, o něco málo pohodlněji.
Pokud byste nyní použili nástroj lvdisplay
k zobrazení informací o nově vytvořeném logickém svazku, dostali byste výpis podobný tomuto:
debian:~# lvdisplay
--- Logical volume ---
LV Name /dev/data/zalohy
VG Name data
LV UUID hf1rYC-1ECA-PopX-AVwx-qquW-jOHI-EOnWDl
LV Write Access read/write
LV Status available
# open 0
LV Size 4.99 GB
Current LE 1278
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
Na příslušném logickém svazku nyní zbývá už jen vytvořit souborový systém, v tomto případě ext3
:
mkfs.ext3 /dev/data/zalohy
Souborový systém na novém logickém svazku lze nyní připojit a začít na něj kopírovat data.
Úžasnou výhodou LVM je kromě nezávislosti logického členění svazků na fyzických svazcích také možnost provádět různé změny, a to klidně i za běhu systému. Mezi tu nejjednodušší změnu patří zvětšení logického svazku, kterou nyní předvedu.
Podívejte se nejprve na to, co vypíše vgdisplay
o skupině svazků (z výpisu jsem vybral pouze relevantní řádky):
debian:~# vgdisplay
--- Volume group ---
VG Name data
...
Total PE 1278
Alloc PE / Size 1278 / 4.99 GB
Free PE / Size 0 / 0
...
Jak je vidět, všechny PE (physical extents) byly již alokovány, to znamená, že v tuto chvíli již není z čeho vytvořit nový logický svazek. Skupina svazků se ale může sestávat z více než jednoho fyzického svazku. Je tedy možné přidat další blokové zařízení (ať už disk, oddíl, diskové pole, apod.) a rozšířit dostupnou kapacitu skupiny svazků:
debian:~# pvcreate /dev/hdd1
Physical volume "/dev/hdd1" successfully created
debian:~# vgextend data /dev/hdd1
Volume group "data" successfully extended
Prvním příkazem byl z diskového oddílu hdd1
vytvořen fyzický svazek, ve druhém kroku byla rozšířena skupina svazků "data
" o nový fyzický svazek. Nástroj vgdisplay
nyní potvrzuje navýšení kapacity skupiny svazků:
...
VG Size 9.98 GB
PE Size 4.00 MB
Total PE 2556
Alloc PE / Size 1278 / 4.99 GB
Free PE / Size 1278 / 4.99 GB
...
V tuto chvíli již tedy je z čeho rozšířit stávající logický svazek "zalohy
". Jak rozšíření skupiny svazků, tak rozšíření logického svazku je možné provádět za běhu systému. Není ani potřeba odpojit souborový systém na daném zařízení:
debian:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data-zalohy 5.0G 374M 4.3G 8% /mnt
debian:~# lvextend -L +2G /dev/data/zalohy
Extending logical volume zalohy to 6.99 GB
Logical volume zalohy successfully resized
debian:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data-zalohy 5.0G 374M 4.3G 8% /mnt
Výstup příkazu df
jsem uvedl pro lepší pochopení toho, co se stalo. Jak je patrné, ačkoliv byl logický svazek zvětšen o 2GB, tedy na 7GB celkem, souborový systém stále hlásí kapacitu 5GB. Logický svazek se v tomto směru chová jako diskový oddíl, který byl rozšířen, ale souborový systém na něm nebyl nijak pozměněn, tudíž hlásí stejnou kapacitu jako před tím. Aby mohl souborový systém nově vzniklý extra prostor využít, je třeba jej rozšířit ručně.
V případě souborového systému ext3
lze použít nástroje resize2fs
, který umí změnit jeho velikost a roztáhnout jej na celý oddíl. Tuto změnu je o něco lepší provádět na odpojeném souborovém systému, jelikož se jedná o mírně riskantní operaci, ale lze ji samozřejmě provést i na připojeném souborovém systému přímo za běhu:
debian:~# resize2fs /dev/data/zalohy
resize2fs 1.41.3 (12-Oct-2008)
Filesystem at /dev/data/zalohy is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/data/zalohy to 1832960 (4k) blocks.
The filesystem on /dev/data/zalohy is now 1832960 blocks long.
debian:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data-zalohy 6.9G 375M 6.2G 6% /mnt
Nyní již souborový systém vykazuje správnou velikost, a tím byl proces rozšíření skupiny svazků i logického svazku dokončen.
Redukovat velikost souborového systému i logického svazku možné je, ale v tomto případě se již patrně nevyhnete nutnosti daný souborový systém odpojit, alespoň v případě ext3
.
Postup je třeba provést ve správném pořadí (špatné pořadí povede skoro jistě ke ztrátě dat) - nejprve je třeba změnit velikost souborového systému, a teprve poté lze bezpečně změnit velikost logického svazku. Nástroj resize2fs
se naštěstí chová opatrně a nepředpokládá, že uživatel vždy ví, co dělá:
debian:~# resize2fs /dev/data/zalohy 6G
resize2fs 1.41.3 (12-Oct-2008)
Filesystem at /dev/data/zalohy is mounted on /mnt; on-line resizing required
On-line shrinking from 1832960 to 1572864 not supported.
Při pokusu zmenšit připojený souborový systém začal resize2fs
protestovat. Odpojíte tedy příslušný souborový systém a zkusíte to znovu:
debian:~# umount /dev/data/zalohy
debian:~# resize2fs /dev/data/zalohy 6G
resize2fs 1.41.3 (12-Oct-2008)
Please run 'e2fsck -f /dev/data/zalohy' first.
V tuto chvíli resize2fs
zjistil, že souborový systém není označen jako "čistý" (patrně kvůli dřívějšímu zvětšení), tudíž doporučuje nechat souborový systém prověřit nástrojem fsck
:
debian:~# e2fsck -f /dev/data/zalohy
e2fsck 1.41.3 (12-Oct-2008)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/data/zalohy: ***** FILE SYSTEM WAS MODIFIED *****
/dev/data/zalohy: 16269/458752 files (0.1% non-contiguous), 124768/1832960 blocks
Je vidět, že skutečně k nějaké úpravě, respektive opravě souborového systému došlo. Následuje třetí a poslední pokus o zmenšení souborového systému:
debian:~# resize2fs /dev/data/zalohy 6G resize2fs 1.41.3 (12-Oct-2008) Resizing the filesystem on /dev/data/zalohy to 1572864 (4k) blocks. The filesystem on /dev/data/zalohy is now 1572864 blocks long.
Operace proběhla úspěšně a souborový systém je nyní možné opět připojit. Po opětovném připojení lze ověřit, že byl opravdu zmenšen:
debian:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data-zalohy 6.0G 374M 5.3G 7% /mnt
Úplně posledním krokem celého procesu je zmenšení samotného logického svazku:
debian:~# lvreduce -L 6G /dev/data/zalohy
WARNING: Reducing active and open logical volume to 6.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce zalohy? [y/n]: y
Reducing logical volume zalohy to 6.00 GB
Logical volume zalohy successfully resized
Zde je třeba si dát velký pozor na to, aby velikost logického svazku nebyla nikdy menší než velikost souborového systému. Varování programu lvreduce
je v tomto ohledu dobré brát velmi vážně.
Tím bych pro dnešek skončil. Příště se podívám na to, jak za běhu data přesouvat mezi fyzickými svazky a proberu také práci se snapshoty.