Linux lemezkezelés 3. rész – LVM

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

A cikkben szereplő példákban közvetlenül root felhasználóként bejelentkezve adjuk ki a parancsokat azért, hogy az állandó sudo használata ne vonja el a figyelmet magáról a parancsok használatáról. Felhívjuk a figyelmet viszont arra, hogy éles rendszerekben biztonsági szempontokból a sudo használata erősen ajánlott!

This will close in 20 seconds