Logikai kötetkezelés

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(v0.25)
a (typo)
439. sor: 439. sor:
 
A felhasználási területek körüljárása egy lehetséges házi feladat.
 
A felhasználási területek körüljárása egy lehetséges házi feladat.
   
Átméretezés: lvextend, lvreduce, lvresize. A -L/-l kapcsolókkal megadhatjuk az új méretet abszolút értékkel vagy az előzőhöz képest (pl. <tt>lvextend -L +1G /dev/raid5/var<tt> - egy gigabyte-tal megnöveljük a raid5 kötetcsoport var nevű logikai kötetét).
+
Átméretezés: lvextend, lvreduce, lvresize. A -L/-l kapcsolókkal megadhatjuk az új méretet abszolút értékkel vagy az előzőhöz képest (pl. <tt>lvextend -L +1G /dev/raid5/var</tt> - egy gigabyte-tal megnöveljük a raid5 kötetcsoport var nevű logikai kötetét).
   
 
Törlés: lvremove.
 
Törlés: lvremove.

A lap 2006. szeptember 26., 00:54-kori változata

A logikai kötetkezelés egy új logikai absztrakciós réteget biztosít a gépben található háttértárolók és a fájlrendszerek között. Ez egyebek mellett lehetővé teszi, hogy a fizikai tárolóeszközöket logikai egységekbe szervezzük, és rugalmasan átméretezhető logikai köteteket hozzunk létre. Ha később új diszk kerül a gépbe, azt is hozzáadhatjuk egy kötetcsoporthoz, és teljesen transzparens módon átlóghatnak rá a filerendszereink, anélkül, hogy külön foglalkoznunk kellene azzal, hogy melyik fizikai diszkre is kerüljenek.

Tartalomjegyzék

1 Linux LVM

(Itt most csak a 2.6-os kernelben levő LVM2-vel foglalkozunk. A 2.4-es szériában található LVM1 nagyjából ugyanezt tudta, csak volt néhány korlátozása.)

A Linux LVM (Logical Volume Management) a következő fogalmakkal dolgozik:

1.1 Physical extent

Allokációs egység. Ekkora egységenként oszthatjuk szét a volume groupban levő helyet a logical volume-ok között (l. később).

Ha akarjuk, hívhatjuk magyarul fizikai mértéknek, de ez elég sután hangzik.

1.2 Physical volume

A physical volume olyan fizikai háttértároló, amin létrehoztuk az LVM metaadat-struktúráját a pvcreate paranccsal. Pl:

# pvcreate /dev/hda
  Physical volume "/dev/hda" successfully created
# pvcreate /dev/loop0
  Physical volume "/dev/loop0" successfully created
# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

Fontosab opciók:

  • --uuid: minden physical volume-nak van egy egyedi azonosítója. Ha egy diszket kicserélünk, és az új diszket be akarjuk tenni a régi helyére az LVM-be, akkor a --uuid kapcsolóval be kell állítanunk rajta a régi diszk azonosítóját.

Dokumentáció:

Ha akarjuk, a physical volume-ot hívhatjuk magyarul fizikai kötetnek.

1.2.1 Physical volume-ok kezelése

A pvdisplay paranccsal nézhetjük meg, milyen physical volume-jaink vannak:

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md2
  VG Name               raid5
  PV Size               697.91 GB / not usable 0   
  Allocatable           yes 
  PE Size (KByte)       32768
  Total PE              22333
  Free PE               4094
  Allocated PE          18239
  PV UUID               elN9K7-dvxq-b0fd-daqR-693p-fHqD-SwbDpD

  --- NEW Physical volume ---
  PV Name               /dev/loop0
  VG Name               
  PV Size               31.81 MB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               hlzs9k-H253-ERpK-R39N-8ICT-4bU6-D0xtc1

Láthatjuk, hogy az első megtalált physical volume a /dev/md2-n, egy RAID tömbön van, és a raid5 nevű volume group része (l. később). A második volume a /dev/loop0 loopback device-on (tehát valójában egy ehhez a device-hoz tartozó image file-ban) van, és még nem rendeltük hozzá volume grouphoz, ezért nem is használható a benne levő hely (Allocatable: no). A közölt adatok:

  • PV Name - annak a unix device-nak a neve, amin a physical volume található.
  • VG Name - annak a volume groupnak a neve, amelyhez a physical volume tartozik.
  • PV Size - a PV mérete (mit jelent és milyen esetben jelenik meg a "not usable X"?)
  • Allocatable - Felhasználható-e a PV-n levő hely (van valakinek kedve precízebb megfogalmazást keresni erre?)
  • PE Size - a physical extentek mérete abban a volume groupban, amelyhez a PV tartozik.
  • Total, Free, Allocated PE - összes physical extent száma, ebből hány szabad, hány foglalt.
  • PV UUID - egyedi azonosító.

Majdnem ugyanezt tudja a pvs parancs is:

# pvs
  PV         VG    Fmt  Attr PSize   PFree  
  /dev/loop0       lvm2 --    31.81M  31.81M
  /dev/md2   raid5 lvm2 a-   697.91G 127.94G

A pvs esetén testreszabhatóbb a kimenet formája. Részletesebben l. a dokumentációban.

A pvscan outputja is nagyon hasonló:

  PV /dev/md2     VG raid5   lvm2 [697.91 GB / 127.94 GB free]
  PV /dev/loop0              lvm2 [31.81 MB]
  Total: 2 [697.94 GB] / in use: 1 [697.91 GB] / in no VG: 1 [31.81 MB]

A különbség az, hogy a pvscan újra végignézi az összes block device-t, a pvs és a pvdisplay pedig a kernel adatstruktúráiból szedi az információt.

A pvmove segítségével az egyik phyiscal volume-ban levő physical extenteket átmozgathatjuk a volume group egy másik physical volume-jára. Ennek akkor van értelme, ha pl. ki akarjuk venni az adott fizikai diszket a gépből, vagy a volume groupból. A pvmove online művelet, vagyis menet közben is használhatjuk, írhatjuk és olvashatjuk az érintett volume-ot.

A pvremove segítségével eltávolíthatjuk az LVM-címkét egy PV-ről, így az LVM a továbbiakban nem vesz róla tudomást.

1.3 Volume group

A volume group lényegében egy logical volume-okkal "partícionálható" absztrakt merevlemez; physical volume-ok egy csoportja. Közvetlenül nem lehet rá adatokat írni, de a benne levő helyet tetszés szerint szétoszthatjuk logical volume-ok között.

Létrehozása a vgcreate paranccsal történik.

# vgcreate proba /dev/loop0
  Volume group "proba" successfully created
# pvdisplay
[...]
  --- Physical volume ---
  PV Name               /dev/loop0
  VG Name               proba
  PV Size               28.00 MB / not usable 0   
  Allocatable           yes 
  PE Size (KByte)       4096
  Total PE              7
  Free PE               7
  Allocated PE          0
  PV UUID               hlzs9k-H253-ERpK-R39N-8ICT-4bU6-D0xtc1

Egynél több PV-t is felsorolhatunk a parancssorban; ezek mind bekerülnek az új volume groupba (hívhatjuk kötetcsoportnak).

Fontosabb opciók:

  • -s, --physicalextentsize PhysicalExtentSize[kKmMgGtT]: a physical extentek méretét adja meg.

Ilyen granularitással oszthatjuk szét a helyet a logical volume-ok között. A filerendszer I/O teljesítményére elvileg nincs hatással, csak az LVM segédprogramjai lesznek lassúbbak, ha túl sok van (mert túl kicsik). A meta-adatok mennyisége is nagyobb lehet, ha több PE van. Manapság kevés olyan felhasználást lehet elképzelni, ahol szükség lehet 16MB-nál kisebb granularitásra.

Dokumentáció:

1.3.1 Volume groupok kezelése

Listázás: vgdisplay

# vgdisplay
  --- Volume group ---
  VG Name               raid5
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  21
  VG Access             read/write
  VG Status             resizable
  MAX LV                32
  Cur LV                5
  Open LV               5
  Max PV                16
  Cur PV                1
  Act PV                1
  VG Size               697.91 GB
  PE Size               32.00 MB
  Total PE              22333
  Alloc PE / Size       18239 / 569.97 GB
  Free  PE / Size       4094 / 127.94 GB
  VG UUID               I4pM7R-wmD9-m3VP-0OI1-ahbb-hdKy-QIQXnL
   
  --- Volume group ---
  VG Name               proba
  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               28.00 MB
  PE Size               4.00 MB
  Total PE              7
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7 / 28.00 MB
  VG UUID               U2pJ4S-J3fj-ebb0-ojYt-Vn7c-VAHU-w7WIlS

A vgdisplaynek van egy -v kapcsolója, aminek a hatására a logical volume-okat is listázza.

A pv*-gal analóg módon van vgs és vgscan is.

A vgchange-dzsel lehet "aktiválni" és "deaktiválni" a kötetcsoportokat (ha nem aktiváljuk, nem tudjuk mountolni a benne levő LV-ket).

# vgchange -a y
  5 logical volume(s) in volume group "raid5" now active
  0 logical volume(s) in volume group "proba" now active

A vgcfgbackup/vgcfgrestore segítségével készíthetünk ill. állíthatunk vissza biztonsági mentést az LVM-konfigurációnkról. A felhasználói adatokat természetesen nem menti el, de arra az esetre, ha megsérülnének az LVM saját adatterületei, vagy véletlenül megszüntetnénk egy fontos LV-t, jól jön.

A vgck ellenőrzi a meta-adatok konzisztenciáját.

Ha egy kötetcsoportot át akarunk vinni egy másik számítógépbe, akkor először exportálnunk kell a vgexport segítségével:

# vgexport proba
  Volume group "proba" successfully exported
# vgdisplay proba
  WARNING: volume group "proba" is exported
  --- Volume group ---
  VG Name               proba
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             exported/resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               28.00 MB
  PE Size               4.00 MB
  Total PE              7
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7 / 28.00 MB
  VG UUID               U2pJ4S-J3fj-ebb0-ojYt-Vn7c-VAHU-w7WIlS

Az exportált kötetcsoport nem aktiválható, amíg nem importáljuk:

# vgchange -a y proba
  Volume group "proba" is exported
# vgimport proba
  Volume group "proba" successfully imported
# vgchange -a y proba
  0 logical volume(s) in volume group "proba" now active

Növelés: vgextend. A vgextend segítségével a kötetcsoporthoz új PV-ot adhatunk hozzá.

Összehúzás: vgreduce. A vgreduce segítségével a kötetcsoportból eltávolíthatunk egy üres PV-t (tehát olyat, amin egyetlen PE-t - physical extentet - sem foglal egyetlen LV - logical volume - sem).

Összevonás: vgmerge. A vgmerge segítségével egy inaktív VG-ot beolvaszthatunk egy másik létező VG-ba, ha a PE-méretek megegyeznek. A cél-VG-ban ezután benne lesznek mindkét kiinduló-VG LV-jai.

Szétválasztás: vgsplit. A kiinduló kötetcsoport fizikai kötetei közül néhányból új kötetcsoportot hozunk létre. A logikai kötetek nem lóghatnak át egyik kötetcsoportból a másikba (erről előtte szükség esetén pvmove-val gondoskodni kell).

A vgmknodes boot közben fut le, létrehozza a /dev alatt a volume groupjainkhoz tartozó bejegyzéseket.

Törlés: vgremove. Teljesen megszünteti a kötetcsoportot és újra felszabadítja a PV-jait.

Átnevezés: vgrename.

Növeljük meg a proba kötetcsoportot; adjunk hozzá egy újabb 32MB-os loop device-t.

# dd if=/dev/zero of=loop1 bs=1048576 count=32
32+0 records in
32+0 records out
33554432 bytes (34 MB) copied, 0.146919 seconds, 228 MB/s
# losetup /dev/loop1 loop1
# pvcreate /dev/loop1
  Physical volume "/dev/loop1" successfully created
# vgextend proba /dev/loop1
  Volume group "proba" successfully extended

1.4 Logical volume

A logical volume (legyen logikai kötet) úgy viselkedik, mint egy merevlemezpartíció, azzal a különbséggel, hogy:

  • szabadon, on-line átméretezhető (a rajta/benne található filerendszert ettől persze külön át kell méretezni);
  • on-line átmozgatható másik diszkre;
  • készíthető róla snapshot.

Létrehozása: lvcreate:

# lvcreate -L 8M -n proba_lv_1 proba
  Logical volume "proba_lv_1" created

Fontosabb opciók:

  • -L - méret byte-ban, megabyteban, gigabyteban stb.
  • -l - méret PE-ben
  • -n - a létrehozandó LV neve
  • -i - csíkszám (hány különböző PV-n szórja szét - kvázi RAID0)
  • --mirrors - tükrök száma (hány különböző PV-n tárolja ugyanazt - kvázi RAID1, de naplózva, úgyhogy nem kell minden crash után resyncelni)

A csíkozás és a tükrözés jelenleg nem használható egyszerre, de ez nem probléma, mert a hagyományos linuxos softraiddel mindezt meg tudjuk csinálni.

1.4.1 Logical volume-ok kezelése

Hozzunk létre egy tükrözött és egy csíkozott LV-t. Ehhez csináltam egy proba2 kötetcsoportot, ami három PV-ből áll; az egyikben lesz az első tükör, a másikban a második, a harmadikban pedig a napló (az LVM lognak hívja, nem journalnak).

# lvcreate --mirrors 1 -l 2 -n proba_lv_1 proba2                 
  Logical volume "proba_lv_1" created
# vgdisplay proba2
  --- Volume group ---
  VG Name               proba2
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               180.00 MB
  PE Size               4.00 MB
  Total PE              45
  Alloc PE / Size       5 / 20.00 MB
  Free  PE / Size       40 / 160.00 MB
  VG UUID               K03ymb-kgin-AHf4-vPBZ-6I5E-xKTs-LbLjRu
# lvdisplay /dev/proba2/proba_lv_1    
  --- Logical volume ---
  LV Name                /dev/proba2/proba_lv_1
  VG Name                proba2
  LV UUID                rF1Wa4-23kr-9G0o-GH0D-O8QG-M7oF-pPPRcI
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                8.00 MB
  Current LE             2
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:8
# lvcreate -l 6 -i 3 -n proba_lv_2 proba2       
  Using default stripesize 64.00 KB
  Logical volume "proba_lv_2" created
# vgdisplay proba2
  --- Volume group ---
  VG Name               proba2
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               180.00 MB
  PE Size               4.00 MB
  Total PE              45
  Alloc PE / Size       11 / 44.00 MB
  Free  PE / Size       34 / 136.00 MB
  VG UUID               K03ymb-kgin-AHf4-vPBZ-6I5E-xKTs-LbLjRu
# lvdisplay /dev/proba2/proba_lv_2 
  --- Logical volume ---
  LV Name                /dev/proba2/proba_lv_2
  VG Name                proba2
  LV UUID                q8OujL-uysn-75KG-2A6l-p15a-ewQ4-mgP8d8
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                24.00 MB
  Current LE             6
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:9
# lvs
  LV         VG     Attr   LSize   Origin Snap%  Move Log             Copy% 
  proba_lv_1 proba2 mwi-a-   8.00M                    proba_lv_1_mlog 100.00
  proba_lv_2 proba2 -wi-a-  24.00M                                          
# lvscan 
  ACTIVE            '/dev/proba2/proba_lv_1' [8.00 MB] inherit
  ACTIVE            '/dev/proba2/proba_lv_2' [24.00 MB] inherit

dmsetuppal látjuk a mirrorokat és a logot is:

# dmsetup info
Name:              proba2-proba_lv_1_mimage_1
State:             ACTIVE
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 7
Number of targets: 1
UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuaM82P6ppVyBjJsv32VdW4a8auXRZNnaj

Name:              proba2-proba_lv_1_mimage_0
State:             ACTIVE
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 6
Number of targets: 1
UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuS4NGUUe90L1UOyuPDqVGMVBgTnLCPRQl

Name:              proba2-proba_lv_1_mlog
State:             ACTIVE
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 5
Number of targets: 1
UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuc8xYiqrk26zrQMaJb14k6Fxlcw9QmETz

Name:              proba2-proba_lv_1
State:             ACTIVE
Tables present:    LIVE
Open count:        0
Event number:      1
Major, minor:      253, 8
Number of targets: 1
UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRurF1Wa423kr9G0oGH0DO8QGM7oFpPPRcI

Name:              proba2-proba_lv_2
State:             ACTIVE
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      253, 9
Number of targets: 1
UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuq8OujLuysn75KG2A6lp15aewQ4mgP8d8

# dmsetup status     
proba2-proba_lv_1_mimage_1: 0 16384 linear 
proba2-proba_lv_1_mimage_0: 0 16384 linear 
proba2-proba_lv_1_mlog: 0 8192 linear 
proba2-proba_lv_2: 0 49152 striped 
proba2-proba_lv_1: 0 16384 mirror 2 253:6 253:7 16/16

A dmsetup amúgy a kernelben levő device mapper alrendszerrel kommunikál, és információnyerésen kívül más érdekes dolgokra is használható. A felhasználási területek körüljárása egy lehetséges házi feladat.

Átméretezés: lvextend, lvreduce, lvresize. A -L/-l kapcsolókkal megadhatjuk az új méretet abszolút értékkel vagy az előzőhöz képest (pl. lvextend -L +1G /dev/raid5/var - egy gigabyte-tal megnöveljük a raid5 kötetcsoport var nevű logikai kötetét).

Törlés: lvremove.

Átnevezés: lvrename.

1.4.2 Snapshot Logical Volume

  • Pillanatfelvétel egy LV aktuális állapotáról.
  • Copy-on-write szemantika: ha az eredetit módosítjuk, akkor a snapshotban létrejön a korábbi tartalom másolata.
  • Ha kevés az írás, viszonylag kis snapshot volume is elég lehet viszonylag nagy adatterülethez.
  • Felhasználás pl.:
    • Majdnem-online adatbázis-backup:
      1. "Egy pillanatra" leállítjuk az adatbázist.
      2. Csinálunk az LV-ről egy snapshotot (ez gyors művelet).
      3. Újra elindítjuk az adatbázist. A snapshoton az eredeti, konzisztens tartalom látszik.
      4. A kedvenc offline backup-eszközünkkel elmentjük a snapshot volume-on található adatbázispéldányt.
      5. Töröljük a snapshot volume-ot.
Személyes eszközök