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í.
Vytvoření LVM svazku
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.
Rozšíření logického svazku
Úž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.
Zmenšení logického svazku
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.