Az LVM (Logical Volume Manager)
A logikai kötetkezelő a Linux operációs rendszerben a diszkek kényelmesebb kezelésére szolgáló eszköz. Ismerjük meg most ezt.
Az LVM alapjai
Az eddig bemutatott fájlrendszer-kialakítás egyetlen hibája, hogy nagyon rugalmatlan. Tegyük fel, hogy létrehoztunk egy partíciót, kialakítottunk rajta egy fájlrendszert, majd becsatoltuk a /home könyvtár alá, és ezeken kerültek tárolásra a felhasználók könyvtárai. Az idő előrehaladtával viszont kinőttük a partíciónkat, és szeretnénk bővíteni ezt a tárterületet. Amennyiben egy új SSD-vel bővítjük a szerverünket, az eddig látott módszerekkel az azon kialakított fájlrendszerrel nem tudjuk kibővíteni rugalmasan a /home tárterületét. Az LVM használatával ezt a merev struktúrát lehet egy sokkal rugalmasabb rendszerrel felváltani. (Az LVM eredetileg 1998-ban a HP-UX operációs rendszer számára lett kifejlesztve, de később a Linux szerves részévé vált. Manapság ezt a Linux kernel device mapper alrendszere valósítja meg.)
Az LVM a következő 3 fogalmakat vezette be:
- Fizikai kötet (physical volumem, PV): A merevlemezen kialakított LVM típusú partíció
- Kötetcsoport (volume group, VG): A fizikai kötetekből kialakított csoport
- Logikai kötet (Logical Volume, LV): A kötetcsoportokon kialakított logikai kötet
Hogy jobban megértsük ezeket a fogalmakat, nézzünk egy példát. Tegyük fel, hogy a szerverünk rendelkezik 3 darab 1TB-os SSD-vel. Mindegyiken kialakítunk 1-1 db. 1TB-os partíciót. Ezeket nevezzük fizikai köteteknek. A 3 db. 1 TB-os partícióból kialakítunk egyetlen 3TB-os kötetcsoportot. Végül ebből a 3TB-os kötetcsoportból kialakítunk például 6 db. 500GB-os logikai kötetet, amelyeken kialakíthatjuk a fájlrendszereket, majd becsatoljuk azokat a Linux könyvtárstruktúrájába. Ezt eddig LVM nélkül is meg tudtuk volna csinálni, de tegyük fel, hogy az egyik 500GB-os logikai köteten elfogy a hely. Ilyenkor az LVM lehetőséget ad arra, hogy egy új 1TB-os SSD-n kialakított 1TB-os partícióval kibővítsük a kötetcsoportot, és ezzel a hellyel a megtelt 500GB-os logikai kötet méretét kiterjesszük. Arra is lenne lehetőség, hogy a többi 500GB-os logikai kötetekből valamelyiket felszabadítva növeljük meg a szükséges helyet.
Az LVM-ben három fő parancs áll rendelkezésünkre:
- pvcreate – fizikai kötetek létrehozása (Kijelöli, hogy mely partíciók legyenek fizikai kötetek.)
- vgcreate – kötetcsoportok létrehozása (A fizikai köteteket csoportosítja.)
- lvcreate – logikai kötetek létrehozása (A Kötetcsoportokból logikai köteteket hoz létre.)
Fizikai kötetek létrehozása
Egy LVM struktúra kialakítása azzal kezdődik, hogy a rendelkezésre álló háttértárolókon (merevlemezeken, SSD-ken) a hagyományos particionáló programunkkal (fdisk, parked) LVM típusú (0x8E) partíciókat hozunk létre. Tegyük fel, hogy ezek a partíciók az sdb1, sdb2, sdb3 és sdb4.
Ezután az egyes partíciókból (amelyeket szeretnénk, hogy részt vegyenek az LVM kialakításában) fizikai köteteket alakítunk ki a pvcreate paranccsal:
root@server:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
root@server:~# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
root@server:~# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
root@server:~# pvcreate /dev/sdb4
Physical volume "/dev/sdb4" successfully created.
Ezek a parancsok rövidebben így is kiadhatók lettek volna:
root@server:~# pvcreate /dev/sdb[1-4]
Kérdezzük le a rendszeren a pvdisplay paranccsal, hogy mely partíciók lettek LVM fizikai kötetek. (Itt most csak a /dev/sdb1 adatait jelenítjük meg, de természetesen hasonló adatokat látunk a többiről is.)
root@server:~# pvdisplay
...
"/dev/sdb1" is a new physical volume of "<4.66 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <4.66 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID XiBP19-OuOk-mBVn-rqCv-e7Km-9Kph-7d0gId
...
Kötetcsoportok létrehozása
Látható, a /dev/sdb1 már fizikai kötet (PV), de még nincsen egyetlen kötetcsoporthoz sem rendelve. (A VG neve üres.) Rendeljük a fizikai köteteket a data_vg nevű kötetcsoporthoz:
root@server:~# vgcreate data_vg /dev/sdb[1-4]
Volume group "data_vg" successfully created
Most listázzuk ki ismét a fizikai köteteket. (Megint csak a /dev/sdb1 adatait nézzük meg.)
root@server:~# pvdisplay
...
--- Physical volume ---
PV Name /dev/sdb1
VG Name data_vg
PV Size <4.66 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1191
Free PE 1191
Allocated PE 0
PV UUID XiBP19-OuOk-mBVn-rqCv-e7Km-9Kph-7d0gId
...
A parancs kimenetén láthatjuk a fizikai kötet nevét (PV Name), annak a kötetcsoportnak a nevét, amelyhez rendelve van (VG Name) és a méretét (PV Size), ebből 4MB nem használható. A PE Size (Physical Extent) megértéséhez azt kell tudnunk, hogy egy fizikai kötet minimálisan ebben az egységben foglalható le. Jelenleg ez az egység 4MB. Összesen 1191 4MB-os egységgel rendelkezik (Total PE), és ebből még az összes szabad (Free PE), egyetlen sincsen lefoglalva (Allocated PE). A Fizikai kötethez rendelt azonosító (PV UUID) is leolvasható.
Jelenítsünk meg információkat a kötetcsoportól a vgdisplay paranccsal. (Ha nem akarunk ennyi információt látni, elegendő a vgs parancs.)
root@server:~# vgdisplay
--- Volume group ---
VG Name data_vg
System ID
Format lvm2
Metadata Areas 4
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 4
Act PV 4
VG Size <18.61 GiB
PE Size 4.00 MiB
Total PE 4764
Alloc PE / Size 0 / 0
Free PE / Size 4764 / <18.61 GiB
VG UUID jMX4dt-p0sE-AT0r-MnNb-hBaC-kGTq-LiuY44
A kötetcsoport egyes paraméterei könnyen értelmezhetők az eddigiek szerint.
Logikai kötetek létrehozása
A harmadik lépésben hozzuk létre két logikai köteteket a rendszeren az lvcreate paranccsal Az első 10GB-os legyen, a második pedig az összes maradék hely. Meg kell adnunk a kötet nevét (-n), annak a kötetcsoportnak a nevét, amelyen létrehozzuk, és a méretét. A -L kapcsoló után abszolút, míg a -l kapcsoló után százalékos mértéket adhatunk meg.
root@server:~# lvcreate -L10GB -ndata_01 data_vg
Logical volume "data_01" created.
root@server:~# lvcreate -l100%FREE -ndata_02 data_vg
Logical volume "data_02" created.
Jelenítsük meg most a data_01 logikai kötetek információit az lvdisplay paranccsal. Ha nem akarunk ennyi információt látni, használjuk az lvs parancsot.
root@server:~# lvdisplay /dev/data_vg/data_01
--- Logical volume ---
LV Path /dev/data_vg/data_01
LV Name data_01
VG Name data_vg
LV UUID bjTVBD-elE0-a9sk-Zl2M-7KdW-UBy1-f3IhIC
LV Write Access read/write
LV Creation host, time server, 2023-07-08 06:14:22 +0000
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
...
A parancs kimenetének egy része könnyen értelmezhető (útvonala, neve, azonosítója, olvasható/írható, elérhető, készítés dátuma, stb.), de pár információ magyarázatra szorul. Ahogyan a fizikai kötet fizikai szegmensekből áll (PE), addig a logikai kötet logikai szegmensekből (LE). Ebből 2560 van, és a mérete 4MB, hiszen 2560*4MB=10GB. A PE és az LE mérete nem szükségszerűen azonos. Mik azok a szegmensek? Tudni kell, hogy egy logikai kötet több részből (szegmensből) épül fel, itt most 3-ból. Ezek a szegmensek akár különálló fizikai köteteken is lehetnek. (Ki lehet úgy alakítani például, hogy az egyik szegmens egy gyorsabb, a másik egy lassabb fizikai háttértárolón helyezkedjen el.) Annak érdekében, hogy lássuk ezeket a szegmenseket adjuk ki a korábban már használt lsblk parancsot. Jól látható, a data_01 3, míg a data_02 2 fizikai köteten helyezkedik el, vagyis 3 és 2 szegmensből állnak.
root@server:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4.7G 0 part
│ └─data_vg-data_01 253:1 0 10G 0 lvm
├─sdb2 8:18 0 4.7G 0 part
│ └─data_vg-data_01 253:1 0 10G 0 lvm
├─sdb3 8:19 0 4.7G 0 part
│ ├─data_vg-data_01 253:1 0 10G 0 lvm
│ └─data_vg-data_02 253:2 0 8.6G 0 lvm
└─sdb4 8:20 0 4.7G 0 part
└─data_vg-data_02 253:2 0 8.6G 0 lvm
Ha a saját kezükbe akarjuk venni a szegmensek kezelését is, akkor a logikai kötet létrehozásakor meg kell adnunk, hogy a logikai kötetek mely fizikai köteteken jöjjön létre. Ha például az 5GB méretű data_01 logikai kötetet úgy akarjuk létrehozni, hogy a /dev/sdb1 és /dev/sdb2-n jöjjön létre, akkor így kell kiadni az lvcreate parancsot:
lvcreate -L 5G -n data_01 data_vg /dev/sdb1 /dev/sdb2
Fájlrendszer létrehozása, felcsatolása
Utolsó lépésben a fájlrendszert kell kialakítanunk a logikai köteteken. Mindegyik logikai kötethet létrejött egy eszközfájl, ezt kell az mkfs parancsnak átadni:
root@server:~# mkfs.ext4 /dev/data_vg/data_01
root@server:~# mkfs.ext4 /dev/data_vg/data_02
Ezután már csak fel kell csatolnunk a fájlrendszereket:
root@server:~# mount /dev/data_vg/data_01 /mnt/adatok1
root@server:~# mount /dev/data_vg/data_02 /mnt/adatok2
Kérdezzük le ezeken a köteteken a szabad helyet:
root@server:~# df -h | grep adatok
/dev/mapper/data_vg-data_01 9.8G 24K 9.3G 1% /mnt/adatok1
/dev/mapper/data_vg-data_02 8.4G 24K 8.0G 1% /mnt/adatok2
Logikai kötet méretének növelése
De miben nyilvánul meg az LVM előnye? Abban, hogy rugalmasan kezelhetők a kötetek. Tegyük fel, hogy a data_01 logikai köteten elfogy a szabad hely, és bővítjük a szerverünket egy új 20GB-os SSD-vel, amelyet teljes egészében a data_01 tárhelyének növelésére szeretnénk szánni. (Most ne akadjunk fenn azon, hogy nincsen 20GB-os SSD.) Ehhez a következő lépéseket kell végrehajtanunk: Először particionáljuk az új háttértárat (egyetlen 20GB-os LVM típusú elsődleges partícióval), létrehozunk ebből egy fizikai kötetet, utána kiterjesztjük vele a data_vg kötetcsoportot a vgextend paranccsal, majd megnöveljük a data_01 logikai kötet méretét az lvextend paranccsal úgy, hogy lefedje a teljes új területet.
root@server:~# fdisk /dev/sdc
root@server:~# pvcreate /dev/sdc1
root@server:~# vgextend data_vg /dev/sdc1
root@server:~# lvextend -l +100%FREE /dev/data_vg/data_01
Kérdezzük le a logikai kötet új méretét. Látható, hogy megnövekedett ezzel az új 20GB-tal.
root@server:~# lvdisplay /dev/data_vg/data_01 | grep Size
LV Size <30.00 GiB
Most viszont kérdezzük le a data_01-en lévő szabad helyeket. Azt várnánk, hogy elérte ez is a 30GB-ot, de azt látjuk, hogy maradt az eredeti méreten:
root@server:~# df -h /mnt/adatok1
FFilesystem Size Used Avail Use% Mounted on
/dev/mapper/data_vg-data_01 9.8G 28K 9.3G 1% /mnt/adatok1
Miért van ez? Azért, mert a logikai kötet mérete ugyan megnőtt, de a fájlrendszer erről még nem tud. Át kell méreteznünk azt is a resize2fs paranccsal. Mielőtt ezt megtennénk, javítsuk ki a fájlrendszer esetleges hibát, csatoljuk le, méretezzük át, majd csatoljuk vissza. A visszacsatolás előtt akár újra leellenőrizhetjük. (Meg kell jegyezni, hogy a mai kernelek már képesek lecsatolás nélkül, az úgy nevezett online átméretezésre, de jegyezzük meg, hogy egy éles rendszeren mindig óvatosan bánjunk a fájlrendszert érintő változtatásokkal. Biztonságosabb, ha lecsatoljuk az átméretezés előtt. Ugyanígy nem kötelező a fájlrendszer hibáinak a javítása, de az óvatosság soha nem árt!)
root@server:~# umount /dev/data_vg/data_01
root@server:~# fsck.ext4 -f /dev/data_vg/data_01
e2fsck 1.46.5 (30-Dec-2021)
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_vg/data_01: 12/655360 files (0.0% non-contiguous), 66754/2621440 blocks
root@server:~# resize2fs /dev/data_vg/data_01
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/data_vg/data_01 to 7863296 (4k) blocks.
The filesystem on /dev/data_vg/data_01 is now 7863296 (4k) blocks long.
root@server:~# mount /dev/data_vg/data_01 /mnt/adatok1
Ezután kérdezzük le újra a méretet. Most már minden rendben, a fájlrendszerünk elérte a 30GB-os méretet.
root@server:~# df -h /mnt/adatok1
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data_vg-data_01 30G 28K 29G 1% /mnt/adatok1
Természetesen megtehettük volna, hogy mindkét logikai kötet kap az új területből hasonló módon.
Egyszerű biztonsági mentés készítése
Felmerülhet a kérdés, hogy ilyenkor az adatainkkal mi történik? Ugyan a parancsok úgy vannak megvalósítva, hogy nagy valószínűséggel nem veszítünk adatokat, de mivel az adatmentés állandó része kell, hogy legyen az életünknek, ilyenkor is gondoskodni illik egy új biztonsági mentésről. Ez roppant egyszerű. Tegyük fel, hogy a /dev/sdd1 eszközünkön van annyi szabad hely, hogy a /dev/data_vg/data_01 eszköz teljes tartalma ráfér, akkor csak a dd parancsot kell használnunk, mielőtt belekezdünk a bővítésbe, Fontos, hogy a dd parancs esetén nem a logikai kötet nevét kell megadni, hanem /dev/mapper könyvtárban található nevét, mivel fájlműveleteknél ezen a néven érhető el az eszköz. A parancsnak bitről bitre átmásolja az if-ben megadott eszköz tartalmát az of-ben megadott eszközre jelen esetben 4MByte-os blokkokban.
dd if=/dev/mapper/data_vg-data_01 of=/dev/sdd bs=4M
Logikai kötet méretének csökkentése
Szükség esetén nem csak növelni, hanem csökkenteni is lehet a logikai kötetek méretét, illetve törölni is lehet a logikai kötetet, illetve a kötetcsoportból is el lehet távolítani a fizikai kötetet. Nézzük meg, hogy hol tartunk az eddigi LVM-ünkkel. (Most csak a példában létrehozott köteteket nézzük, a rendszer LVM-jét, ami az sda-n van, nem bántjuk.)
root@server:~# lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4.7G 0 part
│ └─data_vg-data_01 253:1 0 30G 0 lvm /mnt/adatok1
├─sdb2 8:18 0 4.7G 0 part
│ └─data_vg-data_01 253:1 0 30G 0 lvm /mnt/adatok1
├─sdb3 8:19 0 4.7G 0 part
│ ├─data_vg-data_01 253:1 0 30G 0 lvm /mnt/adatok1
│ └─data_vg-data_02 253:2 0 8.6G 0 lvm /mnt/adatok2
└─sdb4 8:20 0 4.7G 0 part
└─data_vg-data_02 253:2 0 8.6G 0 lvm /mnt/adatok2
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
└─data_vg-data_01 253:1 0 30G 0 lvm /mnt/adatok1
Jól látható, hogy az LVM az sdb és sdc háttértárolókra terjed ki, egyetlen kötetcsoportot tartalmaz (data_vg), és összesen két logikai köteten (data_01 és data_02) tárolja az adatokat.
Tegyük fel, hogy a data_02 köteten is elfogyott a szabad hely, és mivel a data_01-en még van szabad kapacitás, úgy döntünk, hogy ugyan itt minden szabad helyet a data_01 foglal el, átcsoportosítunk 5 GB-ot a data_02-höz. Ezt az elrendezést szeretnénk elérni:
Ennek érdekében első lépésben a data_01 méretét 5GB-tal csökkentjük. ELőször csatoljuk le a kötetet, ellenőrizzük le a fájlrendszert (most a változatosság kedvéért az e2fsck parancsot használjuk), és csak ezután méretezhetjük át. (Érdemes megfigyelni, hogy itt most a kiterjesztéshez képest fordított sorrendben alkalmazzuk az átméretező parancsokat. Először a fájlrendszert redukáljuk, és csak utána a logikai kötetet.)
root@server:~# umount /dev/data_vg/data_01
root@server:~# e2fsck -f /dev/data_vg/data_01
root@server:~# resize2fs /dev/data_vg/data_01 25G
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/data_vg/data_01 to 6553600 (4k) blocks.
The filesystem on /dev/data_vg/data_01 is now 6553600 (4k) blocks long.
Ezután már csökkenthetjük a logikai kötet méretét az lvreduce paranccsal:
root@server:~# lvreduce -L 25GB /dev/data_vg/data_01
WARNING: Reducing active logical volume to 25.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce data_vg/data_01? [y/n]: y
Size of logical volume data_vg/data_01 changed from <30.00 GiB (7679 extents) to 25.00 GiB (6400 extents).
Logical volume data_vg/data_01 successfully resized.
Ellenőrizzük le, hogy tényleg lecsökkent-e a mérete. Igen, már 25GB.
root@server:~# lvs /dev/data_vg/data_01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data_01 data_vg -wi-a----- <25.00g
A biztonság kedvéért ismét ellenőrizzük le a fájlrendszert:
root@server:~# e2fsck -f /dev/data_vg/data_01
Majd csatoljuk fel, és nézzük meg a fájlrendszer méretét is:
root@server:~# mount /dev/data_vg/data_01 /mnt/adatok1
root@server:~# df -h /dev/data_vg/data_01
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data_vg-data_01 25G 28K 24G 1% /mnt/adatok1
Most pedig már van helyünk, hogy a data_02 kötetünket kibővítsük a felszabadult 5GB-tal, a korábban látott lépésekben:
root@server:~# umount /dev/data_vg/data_02
root@server:~# lvextend -L 10G /dev/data_vg/data_02
root@server:~# e2fsck -f /dev/data_vg/data_02
root@server:~# resize2fs /dev/data_vg/data_02 10G
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/data_vg/data_02 to 2621440 (4k) blocks.
The filesystem on /dev/data_vg/data_02 is now 2621440 (4k) blocks long.
root@server:~# mount /dev/data_vg/data_02 /mnt/adatok2
Nagyon fontos ügyelni arra, hogy amikor ilyen szinten belenyúlunk a fájlrendszerünkbe, akkor mindig fennáll az adatvesztés lehetősége. Mindig gondoskodjunk a biztonsági mentésről! Arra is nagyon ügyeljünk, hogy a logikai kötet és a fájlrendszer mérete mindig szinkronban legyen! Figyeljük meg, hogy mind a resize2fs parancsban, mind az lvreduce parancsban abszolút értékben adtuk meg a méretet (25G). Ha az lvreduce parancsban relatíven adtuk volna meg (-5G), akkor pár blokknyi eltérés lett volna a két méret között (sajnos pont a logikai fájlrendszer lógott volna ki a logikai kötetről), és a fájlrendszer ellenőrzésünk hibát eredményezett volna. Ha a minél nagyobb biztonságra törekszünk, a logika kötet mérete mindig legyen egy kicsit nagyobb, mint a rajta lévő fájlrendszeré.
Logikai kötetek mozgatása
Tegyük fel, hogy örömmel használjuk a rendszert, de a /dev/sdc eszközünket megvalósító SSD olyan jeleket mutat, amely miatt gyanakodni kell arra, hogy meg fog hibásodni. A rajta lévő rendszert át kell költöztetni egy másik háttértárolóra. Beszereztünk egy 40GB-os SSD-t, beszereltük a szerverünkbe (/dev/sde eszközfájlként jelent meg) és nekilátunk a munkának.
Első lépésben létrehozunk rajta egy partíciót, majd abból egy fizikai kötetet, és hozzáadjuk a kötetcsoporthoz. (Itt most nem hajtjuk végre a biztonsági mentést, és a művelet előtti és utáni ellenőrzéseket, de ne feledjük, hogy ezek nagyon fontos lépések!)
root@server:~# fdisk /dev/sde
root@server:~# vgextend data_vg /dev/sde1
Physical volume "/dev/sde1" successfully created.
Volume group "data_vg" successfully extended
Ezután lecsatoljuk azokat a köteteket, amelyeket érint a mozgatás:
root@server:~# umount /dev/data_vg/data_01
root@server:~# umount /dev/data_vg/data_02
Ezután a /dev/sdc1 fizikai kötetet átmozgatjuk a /dev/sde1 kötetbe. Ez a művelet akár sokáig is eltarthat.
root@server:~# pvmove /dev/sdc1 /dev/sde1
/dev/sdc1: Moved: 1.12%
/dev/sdc1: Moved: 95.57%
/dev/sdc1: Moved: 100.00%
Majd a kötetcsoportból eltávolítjuk a forráskötetet:
root@server:~# vgreduce data_vg /dev/sdc1
Nézzük meg, hogy most hogy alakul az LVM szerkezete. Jól látható, a fizikai kötetek átkerültek az új helyükre. A régi SDD már kiszerelhető.
root@server:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4.7G 0 part
│ └─data_vg-data_01 253:1 0 25G 0 lvm
├─sdb2 8:18 0 4.7G 0 part
│ └─data_vg-data_02 253:2 0 10G 0 lvm
├─sdb3 8:19 0 4.7G 0 part
│ └─data_vg-data_02 253:2 0 10G 0 lvm
└─sdb4 8:20 0 6G 0 part
└─data_vg-data_01 253:1 0 25G 0 lvm
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
sde 8:64 0 40G 0 disk
└─sde1 8:65 0 40G 0 part
├─data_vg-data_01 253:1 0 25G 0 lvm
└─data_vg-data_02 253:2 0 10G 0 lvm
Ezután csatoljuk fel a köteteket, és folytathatjuk is a munkát.
root@server:~# mount /dev/data_vg/data_01 /mnt/adatok1
root@server:~# mount /dev/data_vg/data_02 /mnt/adatok2
LVM költöztetése
Tegyük fel, hogy adott egy szerverünk, benne három tárolóeszköz, sda, sdb és sdc. Az sda-n van a rendszer, míg az sdb-n és az sdc-n kialakítunk egy tetszőleges kötetrendszert LVM-mel adatok tárolására. Az idő elteltével ezt az sdb-t és sdc-t szeretnénk átköltöztetni egy másik gépbe, akár másik disztribúció alá. Ilyenkor nem elegendő csak a háttértárolókat átszerelni, hanem velük együtt kell az LVM konfigurációjukat is vinni. Erre szolgálnak az vgexport és vgimport parancsok.
Exportálni csak lecsatolt és inaktív kötetcsoportot lehet, így először lecsatoljuk a logikai köteteket, majd a vgchange paranccsal inaktívvá tesszük, ami gyakorlatilag annyit jelent, hogy a kivesszük a kernel felügyelete alól. Ezután már exportálhatunk:
root@server:~# umount /dev/data_vg/data_01
root@server:~# umount /dev/data_vg/data_02
root@server:~# vgchange -an data_vg
0 logical volume(s) in volume group "data_vg" now active
root@server:~# vgexport data_vg
Volume group "data_vg" successfully exported
Az inaktívvá tett kötetcsoport nem érhető el, ezt akár le is tesztelhetjük az lsblk paranccsal, vagy egyszerűen próbáljuk meg felcsatolni, nem fog sikerülni.
Ezután átszerelhetjük az eszközöket a másik gépbe, ott először be kell importálnunk, majd aktívvá kell tennünk. (Kipróbálhatjuk ugyanazon a gépen is, ahol exportáltuk.)
root@server:~# vgimport data_vg
Volume group "data_vg" successfully imported
root@server:~# vgchange -ay data_vg
2 logical volume(s) in volume group "data_vg" now active
root@server:~# mount /dev/data_vg/data_01 /mnt/adatok1
root@server:~# mount /dev/data_vg/data_02 /mnt/adatok2
Az aktívvá tétel után az lsblk kimenetén újra megjelenik az LVM kötetcsoport.
A parancsok összefoglalása
Foglaljuk most össze az eddig használt parancsokat, illetve egészítsük ki néhánnyal azokat.
Fizikai kötetekhez kapcsolódó parancsok
pvcreate Fizikai kötet létrehozása
pvremove Fizikai kötet visszaállítása "normál" kötetté
pvdisplay Részletes információk megjelenítése fizikai kötetről
pvs Összefoglaló információ megjelenítése fizikai kötetről
pvmove Fizikai kötet mozgatása
pvscan Megkeresi a fizikai köteteket, és információkat ír ki róluk
Kötetcsoportokkal kapcsolódó parancsok
vgcreate Kötetcsoport létrehozása
vgdisplay Részletes információk megjelenítése kötetcsoportról
vgs Összefoglaló információ megjelenítése kötetcsoportról
vgextend Kötetcsoportba új fizikai kötet felvétele
vgreduce Kötetcsoportból fizikai kötet elvétele
vgmerge Több kötetcsoportot egy kötetcsoporttá alakít
vgsplit Egy kötetcsoportot két részre oszt
vgck Leellenőrzi a kötetcsoport konzisztenciáját (érvényességét)
vgchane Megváltoztatja a kötetcsoportok attribútumait
Logikai kötetekhez kapcsolódó parancsok
lvcreate Logikai kötetek létrehozása
lvdisplay Részletes információk megjelenítése logikai kötetről
lvs Összefoglaló információ megjelenítése logikai kötetről
lvextend Logikai kötet méretének növelése
lvreduce Logikai kötet méretének csökkentése
Fájlrendszerrel kapcsolatos parancsok
resize2fs Fájlrendszer átméretezése
mount Fájlrendszer felcsatolása
umount Fájlrendszer lecsatolása
df Fájlrendszer helyfoglalási információk
fsck.ext4 Ext4-es fájlrendszer hibáinak ellenőrzése
e2fsck Ext(2,3,4) fájlrendszerek leellenőrzése