Logikai kötetkezelő

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez

A logikai kötetkezelő (logikai volume manager, LVM) egy eszköz a linux operációs rendszerben a diszkek (blokkos tárolóeszközök) kényelmesebb kezelésére.

A legfőbb probléma a hagyományos diszkkezeléssel az, hogy fájlrendszert csak folytonos merevlemez-területen lehet létrehozni, és a diszkterület (partíció) méretváltoztatása nem megoldott. Ugyancsak probléma két nem szomszédos, vagy különböző diszkeken található partíció területének egyesítése.

GPT és LVM[szerkesztés]

A PC-n a hagyományos, DOS alapú partícionálás (MBR-partíciók) legfeljebb 15 partíció létrehozását teszi lehetővé, melyek egyike – az extended partíció – adatot nem, csak másik partíciós táblát tartalmazhat. Egy fájlrendszer egy partícióban van, és sok előnye van a különböző típusú adatok külön fájlrendszerben tárolásának.[1] A mai terabájtos méretű diszkeknél kevés a 14 partíció, és az is gond, hogy a hagyományos partíciós tábla legfeljebb 2 TByte méretű diszkek felosztására alkalmas. Az LVM legalább 2.6-os 32 bites kernellel 16 TByte, 64 bites kernellel 8 exabájt méretű fizikai kötet kezelésére képes,[2] ehhez azonban a teljes diszket LVM-területté kell tenni, így csak linuxból lehet elérni, más operációs rendszer nem kaphat területet belőle.

A diszkméret és partíciószám korlátja megoldható egy viszonylag új partícionálással, a GUID partíciós táblával(en) (GPT), mely tetszőleges számú partíciót és gyakorlatilag (belátható időn belül) végtelen méretű diszket képes részekre osztani. A GPT-t az újabb változatú BIOS-ok és Windows-ok is ismerik. Ez megoldja a diszkméret és partíciószám problémáját is, de nem segít a nem szomszédos ill. különböző diszkeken levő területek egyesítésén és a partícióméretek változtatásán.

Az LVM és GPT együtt is alkalmazható: az LVM képes GPT-partíciókat is diszkterületként (fizikai kötetként) használni.

Az LVM működése[szerkesztés]

Az LVM képes diszkterületeket (teljes diszkeket vagy partíciókat, LVM-terminológiával fizikai köteteket) egy vagy több területté (kötetcsoporttá, volume group-pá) szervezni, e területekből folytonos területeket (logikai köteteket) kijelölni, melyeken fájlrendszereket lehet létrehozni. A területek számára nincs megkötés, és átmérezhetők folytonos kisebb vagy nagyobb területté.

Az LVM a kernelben a fájlrendszer és a diszk között helyezkedik el, a device mapper(en) driverben. (A device mappernek az LVM mellett más funkciói is vannak, pl. szoftver RAID, fájlrendszer titkosítás.) Megfeleltetést hoz létre a fájlrendszer és a diszk blokkjai között, és egyszerűsége okán igen hatékony: sebességben és input/output terhelésben nem lehet észrevenni a használatát.

Utasítások[szerkesztés]

Az utasításokat tartalmazó csomag neve lvm2 a legtöbb disztribúcióban.

Az utasítások első két betűje a kötetet adja meg:

  • pv: fizikai kötet (physical volume)
  • vg: kötetcsoport (volume group)
  • lv: logikai kötet (logical volume)

A harmadik betűtől kezdődik a művelet neve:

  • s: rövid lista
  • display: részletes lista
  • create: létrehozás
  • remove: törlés
  • extend: méretnövelés
  • reduce: méretcsökkentés
  • rename: átnevezés
  • scan: keresés az összes diszken
  • change: (de)aktiválás

Az utasítások paraméterei már a kötettől függően különbözőek.

Logikai kötet létrehozása[szerkesztés]

Tegyük fel, hogy az sda diszk 6-os partíciója üres, és ezen akarunk logikai kötetet létrehozni.

Felírjuk az információt a partícióba, hogy mostantól fizikai kötetként fogjuk használni:

pvcreate /dev/sda6

Létrehozzuk a kötetcsoportot, melyből később területeket lehet kérni:

vgcreate volg /dev/sda6

volg a kötetcsoport neve. A létrehozáskor egy vagy több fizikai kötetet kell megadni. Minden fizikai kötet legfeljebb egy kötetcsoporthoz tartozik. Diszkek utólag is hozzáadhatók, és bizonyos korlátok között kivehetők.

1 gigabájt területet kérünk a logikai kötet számára a kötetcsoportból ter1g néven:

lvcreate -L 1G -n ter1g volg

A terület kétféleképpen érhető el: /dev/mapper/volg-ter1g vagy /dev/volg/ter1g, amit mostantól úgy használhatunk, mint a partíciót. Fájlrendszer létrehozása és csatolása:

mkfs.ext4 /dev/volg/ter1g
mount /dev/volg/ter1g /mnt

Ellenőrzés:

root@sid64:~# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda6  volg lvm2 a--  3.94g 2.94g
root@sid64:~# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  volg   1   1   0 wz--n- 3.94g 2.94g
root@sid64:~# lvs
  LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ter1g volg -wi-ao---- 1.00g                                                    

Méretnövelés[szerkesztés]

A fenti területet 500M-mel meg akarjuk növelni. Először a logikai kötet méretét kell növelni, majd ezt tudatni a fájlrendszerrel is. Az előbbi mehet menet közben, az utóbbi fájlrendszerfüggő. Az ext4 fájlrendszer mérete menet közben is növelhető, nem kell lecsatolni.

lvextend -L +500M /dev/volg/ter1g
resize2fs /dev/volg/ter1g

Ellenőrzés:

root@sid64:~# lvs
  LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ter1g volg -wi-ao---- 1.49g                                                    
root@sid64:~# df -h /mnt
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/volg-ter1g  1.5G  1.5M  1.4G   1% /mnt

Méret csökkentésekor először a fájlrendszert kell csökkenteni (ext3 és ext4 fájlrendszerben csak lecsatolt állapotban lehet méretet csökkenteni), majd a logikai kötetét az lvreduce paranccsal, ügyelve arra, hogy annak méretébe beleférjen a fájlrendszer. Célszerű három lépésben csinálni: a fájlrendszert minimális méretűre összehúzni (resize2fs -M), csökkenteni a logikai kötet méretét, majd a fenti módon megnövelni a fájlrendszert, hogy a teljes csökkentett területet elfoglalja.

Kötetcsoportok használata[szerkesztés]

A diszkterületek kötetcsoportba rendezésekor két szempontot kell figyelembe venni. Egyrészt a kötetcsoportban levő szabad hely nem használható más kötetcsoportból. Másrészt a kötetcsoport működéséhez valamennyi diszkje elérhető kell legyen.[3] Ez azt jelenti, hogy a cserélhető tárolókon levő fizikai kötetek számára (pl. USB diszk) külön kötetcsoportot kell létrehozni. Ha két kötetcsoport neve azonos lenne, az LVM az egyiket a memóriában átnevezi (ezzel az eszközfájlok neve is megváltozik).

A cserélhető diszk behelyése után a pvs, vgs, lvs mutatja az adatokat, de az eszközfájlok nem jönnek létre automatikusan, így a kötetek nem csatolhatók fel.[4] Az eszközfájlokat a vgchange -a y kötetcsoportnév utasítás hozza létre (egy kötet számára ugyanerre az lvchange szolgál).

A pvmove fizikai_diszk felszabadítja a fizikai diszket: a rajta levő adatokat a kötetcsoport többi diszkjére másolja át. Ezután a vgreduce dev fizikai_diszk utasítással törölhető a diszk a kötetcsoportból, a pvremove fizikai_diszk utasítással pedig az egész LVM-ből.

Snapshot[szerkesztés]

A snapshot gyors logikai másolat egy logikai kötetről. A snapshot ugyanabban a kötetcsoportban kell legyen, mint az eredeti kötet. A számára kijelölt diszkterület lehet kisebb az eredeti köteténél (nagyobbat nincs értelme lefoglalni). A snapshot ugyanúgy csatolható fel, mint a többi kötet,[5] ugyanúgy növelhető a mérete, és ugyanúgy törölhető az lvremove utasítással. Egy kötetről több snapshot is létrehozható.

A snapshot létrehozásától kezdve az LVM az eredeti kötet módosítandó blokkjainak régi értékét átmásolja a snapshot területére, amikor az először változik meg, és csak ezután írja felül. Az eredeti kötetben az aktuális, a snapshotban pedig a másolat pillanatában aktuális értékek találhatók. A snapshot addig működőképes, amíg az eredeti kötet módosított blokkjai ráférnek a snapshot számára kijelölt területre. Ha megtelt, már csak törölni lehet a snapshotot. Egy blog szerint megoldható a snapshot területének automatikus növelése is a megtelés megakadályozására.[6]

Snapshot létrehozása:

lvcreate -Lméret -nsnapshotnév -s /dev/kötetcsoport/eredetikötet

A snapshotot előszeretettel használják mentéskor. A mentés előtt létrehozott snapshot biztosítja, hogy a mentés ideje alatt a kötet tartalma nem változik meg. Az eredeti kötet visszatölthető a snapshotból is az

lvconvert --merge /dev/logvg/snapshotnév

utasítással (mindkét kötet lecsatolása után).

A snapshot írható is, így alkalmas az eredeti köteten futtatandó program tesztelésére az érvényes értékek veszélyeztetése nélkül.

Jegyzetek[szerkesztés]

  1. Különböző jogosultságokkal csatolhatók fel. Az egyik fájlrendszer megtelése nem zavarja a többi működését.
  2. LVM2 and pvcreate > 2TB (LinuxQuestions.org)
  3. Ha egy vagy több diszk megsemmisült, a vgreduce --removemissing kötetcsoport utasítással lehet eltávolítani a kötetcsoportból a hiányzó diszkeket. Ez törli az összes fájlrendszert és snapshotot, melynek adatai vannak a hiányzó diszkeken.
  4. Hasonló a helyzet, ha két gép közös diszkterületén levő kötetcsoportban hozunk létre logikai kötetet, és nem használjuk az LVM fürt-kiterjesztését, ami épp az ilyen problémákat oldja meg. Ilyenkor csak a létrehozó gépen jönnek létre az eszközfájlok.
  5. Fürtös fájlrendszerben a csatolás előtt szükség lehet a fájlrendszer-azonosító megváltoztatására. Pl. ocfs2 fájlrendszerben a tunefs.ocfs2 --cloned-volume /dev/kötetcsoport/eredetikötet teszi ezt meg.
  6. Dusty Mabe: Automatically Extend LVM Snapshots (A Random Walk Down Tech Street)

Forrás[szerkesztés]

Kapcsolódó lapok[szerkesztés]