Mi is az a Volume? Sokak számára maga a „terra incognita” – az ismeretlen föld. Ez a rejtélyes réteg a fizikai disk-ek, és a filesystem között nem véletlenül ilyen fontos, nagyon sok hasznos lehetőséget rejt ez a technika, amire amúgy nem lennénk képesek. A következő írás egy kicsit próbál az LVM és a volume managerek világába betekintést adni. Habár írtam már ZFS-ről, és Veritas Volume Managerről is, mégis az LVM azért lett olyan népszerű, mert egyszerű a struktúrája, mégis a legfontosabb lehetőségeket az adminisztrátor kezébe adja.
Élet az LVM nélkül
Alap helyzetben vannak a diskek. Azokat egyszer statikusan feltudjuk darabolni részekre (partíciókra), és azokra filesystem-et tehetünk. Ezeket tudjuk ész nélkül mountolni. A hátránya az, hogy egy Linux-os filesystem struktúrába is lehetőségünk van mountpointokat skatulyázni, viszont kényelmetlen lehet. Arról nem is beszélve milyen átláthatatlanná tud válni egy össze vissza skatulyázott rendszerstruktúra.
Mire jó az LVM?
Az LVM gyakorlatilag a fizikai diskek és a filesystem közötti új réteg. Feladat pedig az, hogy a fizikai statikus tárterületeket dinamikusan tudja szabályozni. Ezáltal a tárterületek egyszerűen, és több esetben leállás nélkül is újraszervezhetőek.
Előkészületek az LVM-hez
Én jelen esetben három új disket adtam hozzá Ubuntu 10.04-es rendszeremhez
# fdisk -l
Látszik, hogy tök üresek a diskek. Létre kell hozni rajta egy (vagy tetszés szerint több) partíciót aminek LVM típusúnak kell lennie. Én ezt az első disken bemutatom, de mindhármon meg kell tenni.
Fdiskel nyissuk meg az első disket:
# fdisk /dev/sdb
Az fdisk menüjébe üssünk egy „n” betűt, azaz új partíciót akarunk létrehozni.
-
Command (m for help): n
Meg fogja kérdezni, hogy extended vagy primary partíciót akarunk. Válasszuk most a „p”-t.
Meg kell adnunk melyik partíciót akarjuk létrehozni. Mivel nincs, válasszuk az egyest.
-
Partition number (1-4): 1
Hanyas cilincertől kezdődjön:
-
First cylinder (1-130, default 1): 1
Hanyas cilindernél érjen véget:
-
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): 130
Már csak ki kell választanunk a partíció típusát:
-
Command (m for help): t
A „L” betűvel kérhetjük le a teljes listát, de nekünk Linux LVM kell, ami a „8e”:
-
Hex code (type L to list codes): 8e
Már csak ki kell írnunk a diskre a változtatásokat:
-
Command (m for help): w
Ha készen vagyunk akkor hasonló kimentet kell látnunk:
# fdisk -l
LVM használata
Physical Volume
Először is ahogy már feljebb elhangzott három rétege van az LVM-nek. Az első a Physical Volume=pv (Fizikai Kötet). Persze nekünk már vannak diskjeink LVM partíció típussal, de ahhoz hogy ezekből pv-diskek legyenek, inicializálnunk is kell.
Ezt tudjuk megtenni a következő paranccsal:
# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
Ha ki akarjuk listázni az aktuális pv-ket, akkor azt a következő paranccsal:
# pvdisplay
Ha törölni szeretnénk (csak ésszel, és olyat amire biztos nincs szükség), akkor azt a következő módon tehetjük meg:
# pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1
# pvdisplay
Volume Group
A Volume Group nem más, mint egy csoportosítás. Itt jelenik meg először a közös „pool” szemlélet. Egy zsák amibe bedobáljuk mindazt amink van, a nagy közösből tetszőleges méreteket különíthetünk el. Ha például akarunk csinálni egy kötetet a root filrendszernek, és az adatok tárolására egy másikat, akkor jobb két külön csoportba sorolni. Természetesen egy PV vagy LV csak egy Volume Grouphoz tartozhat egyszerre.
Csináljunk egy új groupot a most létrehozott diskeknek (ha nem lennének a megadott diskek PV-k, akkor ezzel a parancsal, azok is létrejönnek).
# vgcreate data /dev/sdb1 /dev/sdc1 /dev/sdd1
Most ellenőrizzük, milyen Volume Groupok léteznek, és azokról mit lehet megtudni.
# vgdisplay
Ahol látszik a csopornak van egy mérete, ez a VG Size. Ennyi a pool nagy felhasználható mérete. Alatta a PE az az egység amikre felosztódik a volume group. Az én esetemben látszik, hogy ez 4MB, tehát 4MB-os egységekre van felkockázva a zsák. A Total PE azt mutatja, hogyha 4MB-os egy kocka akkor a zsákban hány kocka van. Lejebb pedig PE és tárhelyre lebontva is láthatjuk mennyi már kiosztott (Allocated) vagy még nem kiosztott (Free).
Értelemszerűen törölhetünk is egy volume groupot ha akarunk.
# vgremove data
Amennyiben a rendszerünk számára elérhető diskeken már van valamilyen LVM, csupán a rendszerünk nem látja még, akkor a következő parancs nagy segítségünkre lehet.
# vgscan
Logical Volume
Az utolsó rész pedig a Logival Volume-k, azok a virtuális szeletek a pool-ból, a Volume Group-ból, amikre filesystem fog kerülni. Ez talán a legfontosabb rész, hiszen ezen szerkezeti egységekből lesznek virtuális device-k, amiken tárolni fogunk.
Először is nézzük, hogy tudunk létrehozni egy LV-t.
# lvcreate –name elso –size 100M data
Jól látszik, hogy a parancs után nevesítenünk kell az új LV-t, majd megadni mekkora legyen a mérete, végül pedig, hogy melyik VG-ből legyen kiajánlva a terület. A parancs után a flag-eket, természetesen rövidítve is meg lehet adni.
Ha csináltunk egy új LV-t a data VG-n belül, akkor a megszokott parancs konvenció szerint kilistázhatjuk az lvdisplay paranccsal. Viszont amennyiben több VG-nk van, és azon belül is több PV, akkor a teljes lista hihetetlen nagy tud lenni. Ezért a parancs után definiálhatjuk melyik VG-ben akarjuk látni az adatokat.
# lvdisplay data
Ha egyszerűsített formába szeretnénk látni, vagy bármely block device-n akarunk felismertetni elkóborolt LV-ket, akkor a következő parancs hasznos lehet.
# lvscan
Illetve a létrejött device alapaján is lekérhetjük. A LV device-t a /dev/[VG_NAME]/[LV_NAME] alatt találhatjuk.
# lvdisplay -v /dev/data/elso
Természetesen törölni hasonlóképpen tudunk egy LV-t.
# lvremove /dev/data/elso
Ezek után már csupán a megfelelő filesystem-et kell a volume-ra ráhúzni, és mountolható is.
# mkfs.ext3 /dev/data/elso
# mkdir /elso
# mount /dev/data/elso /elso
# df -h /elso/
Amennyiben permanensé kívánjuk ezen mountpointokat tenni, akkor természetesen szükség lesz az /etc/fstab szerkesztésére.
Gyakori karbantartási munkák LVM-el
Volume növelése
Gyakori kérés, hogy növeljük meg a volume/mountpoint méretét. Fontos, az LVM támogatja természetesen ezt a műveletet, de az LVM csak egy virtuális disket ad, fontos, hogy a rajta lévő filesystem is támogassa azt. Én most EXT3-mal fogok játszadozni, de természetesen más filesystemek is tudják ezen funkciókat.
Első lépésként meg kell növelnünk a kívánt LV méretét. Erre két lehetőségünk van, vagy megadhatjuk mennyivel növekedjen a meglévő méret, vagy kijelölhetjük az új méret határát. A mostani volume mérete 100MB. Ha 200MB-ra akarom növelni a következő két parancs valamelyikét használva:
Itt azt adjuk meg menyivel legyen nagyobb:
# lvextend -L+100M /dev/data/elso
Itt azt adjuk meg, mennyi legyen az új nagyobb mérete:
# lvextend -L200M /dev/data/elso
Természetesen ekkor még csak a LV mérete nőtt meg, a mountolt filesystem mérete az változatlan.
# df -h
# lvdisplay -v /dev/data/elso
Akkor most növeljük az új LV méretéhez a filesystem méretét is. Ezt természetesen legbiztonságosabban akkor tehetjük meg, ha a filerendszerünk nincs mountolva, de bizonyos filesystem-ek támogatják az online bővítést is.
# resize2fs /dev/data/elso
# df -h /elso/
# ls -lah /elso/
Természetesen online/mountolt állapotában fogja a filesystem-et növelni, és minden adatunk sértetlenül megtalálható lesz.
Volume csökkentése
Míg a növelés kicsivel egyszerűbb, a csökkentés nehezebb, hisz a filerendszerhez a végéhez üres területet hozzácsapni egyszerűbb, de ahhoz hogy csökkenteni lehessen, ahhoz először egybefüggővé kell tenni az adatokat (defragmentálni), hogy a végén a filerendszernek teljesen üres területet különíthessünk el. Ezt fogjuk ugye leválasztani.
Itt sajnos ajánlás szerint mindenképp umountolnunk kell.
# umount /elso/
Ezért először FSCK-t futtatunk rajta.
# e2fsck -f /dev/data/elso
Ezek után, hogy elvileg folytonos a filesystem jöhet a csökkentés. Én a példában 100MB-ra csökkentem vissza.
# resize2fs /dev/data/elso 100M
Hogy már a filesystem kisebb az LV-ot is kisebbre vehetjük. Természetesen figyelmezteni fog, hogy a csökkentés roncsolhatja a filerendszert, de mivel mi gondoskodtunk már róla, ezért nyugottan mondjunk neki Y-t.
# lvreduce -L100M /dev/data/elso
Ezt követően már a csökkentett méretű filesystem mountolható is.
Disk cseréje egy Volume Group-ban
A helyzet a következő, kinőttük a meglévő disk csoportunkat. Alap esetben persze amíg lehet bővíthetünk, a most következő téma azt is bemutatja, viszont megspékeli azzal, hogy mivan, ha egy nagyobbat beteszünk, és egy kisebbet kiveszünk, miközben feltétel az, hogy nem állhat le a rendszer, tehát online kell megoldanunk.
Először is a rendszer számára láthatóvá kell tennünk az új disket. Majd megcsinálni rá az LVM partíciót. Ezt feljebb már bemutattam, tehát eme ismereteket már feltételezem.
Majd megcsináljuk a megfelelő PV-t belőlle:
# pvcreate /dev/sde1
Ha van új PV-nk a meglévő data VG-t bővítsük vele.
# vgextend data /dev/sde1
# vgdisplay
Amennyiben csak bővíteni akarnánk, most lennénk készen, viszont mi ki akarjuk venni az sdb disket, mert kicsi, ne foglalja a helyet és fogyasszon feleslegesen. Ezért először átmozgatunk minden dolgot az sdb-ról az új sde disk-re.
# pvmove /dev/sdb1 /dev/sde1
Jelen esetben nem volt neki mit átmozgatni, de normál esetben itt szépen átmozgatná az adatait. Ezek után pedig a régi sdb disket simán eltávolíthatjuk a VG-ből.
# vgreduce data /dev/sdb1
CheatSheet az LVM-hez
Directory and Files
|
|
Directories and Files | ## Directories /etc/lvm – default lvm directory location /etc/lvm/backup – where the automatic backups go /etc/lvm/cache – persistent filter cache /etc/lvm/archive – where automatic archives go /var/lock/lvm – lock files to prevent metadata corruption # Files |
Tools
|
|
diagnostic | lvmdump lvmdump -d <dir> dmsetup [info|ls|status] Note: by default the lvmdump command creates a tar ball |
Physical Volumes
|
|
display |
pvdisplay -v pvs attributes are: |
scanning | pvscan -v
Note: scans for disks for non-LVM and LVM disks |
adding | pvcreate /dev/sdb1
Common Attributes that you may want to use: -M2 create a LVM2 physical volume |
removing | pvremove /dev/sdb1 |
checking | pvck -v /dev/sdb1
Note: check the consistency of the LVM metadata |
change physical attributes |
## do not allow allocation of extents on this drive Common Attributes that you may want to use: –addtag add a tag |
moving | pvmove -v /dev/sdb2 /dev/sdb3
Note: moves any used extents from this volume to another volume, in readiness to remove that volume |
Volume Groups
|
|
display | vgdisplay -v vgs -v vgs -a -o +devices vgs flags: vgs |
scanning | vgscan -v |
creating | vgcreate VolData00 /dev/sdb1 /dev/sdb2 /dev/sdb3 vgcreate VolData00 /dev/sdb[123] Common Attributes that you may want to use: -l maximum logical volumes |
extending | vgextend VolData00 /dev/sdb3 |
reducing | vgreduce VolData00 /dev/sdb3
vgreduce –removemissing –force VolData00 |
removing | vgremove VolData00
Common Attributes that you may want to use: -f force the removal of any logical volumes |
checking | vgck VolData00
Note: check the consistency of the LVM metadata |
change volume attributes | vgchange -a n VolData00
Common Attributes that you may want to use: -a control availability of volumes within the group |
renaming | vgrename VolData00 Data_Vol_01
note: the volume group must not have any active logical volumes |
converting metadata type | vgconvert -M2 VolData00
Note: vgconvert allows you to convert from one type of metadata format to another for example from LVM1 to LVM2 |
merging | vgmerge New_Vol_Group Old_Vol_Group
Note: the old volumes group will be merged into the new volume group |
spliting | vgsplit Old_Vol_Group New_Vol_Group [physical volumes] [-n logical volume name] |
importing | vgimport VolData00
Common Attributes that you may want to use: -a import all exported volume groups |
exporting | ## to see if a volume has already been export use "vgs" and look at the third attribute should be a x vgexport VolData00 Common Attributes that you may want to use: -a export all inactive volume groups |
backing up | vgcfgbackup -f /var/backup/VolData00_bkup VolData00
Note: the backup is written in plain text |
restoring | vgcfgrestore -f /var/backup/VolData00_bkup VolData00
Common Attributes that you may want to use: -l list backups of file |
cloning | vgimportclone /dev/sdb1
Note: used to import and rename duplicated volume group |
special files | vgmknodes VolData00
Note: recreates volume group directory and logical volume special files in /dev |
Logical Volumes
|
|
display |
lvdisplay -v lvs -v ## lvs commands for mirror volumes lvs attributes are: |
scanning | lvscan -v lvmdiskscan |
creating |
## plain old volume ## a striped volume ## Mirrored volume Common Attributes that you may want to use: -L size of the volume [kKmMgGtT] |
extending |
lvextend -L 20M /dev/VolData00/vol01 Common Attributes that you may want to use: -L size of the volume [kKmMgGtT] |
reducing/resizing | lvreduce -L 5M /dev/VolData00/vol01 lvresize -L 5M /dev/VolData00/vol01 Note: rounding will occur when extending and reducing volumes to the next extent (4MB by default) you can extend a ext2/ext3 filesystem using the "resize2fs" command |
removing | lvremove /dev/VolData00/vol01 |
adding a mirror to a non-mirrored volume | lvconvert -m1 –mirrorlog core /dev/VolData00/vol01 /dev/sdb2 |
change volume attributes |
lvchange -a n /dev/VolData00/vol01 Common Attributes that you may want to use: -a availability |
renaming | lvrname /dev/VolData00/vol_old /dev/VolData00/vol_new |
snapshotting | lvcreate –size 100M –snapshot -name snap /dev/vg01/data01 |
Miscellaneous
|
|
Simulating a disk failure | dd if=/dev/zero of=/dev/sdb2 count=10 |
reparing a failed mirror | ## check volume, persume /dev/sdb2 has failed lvs -a -o +devices # remove the failed disk from the volume (if not already done so) , this will convert volume into a non-mirrored volume ## replace the disk physically, remember to partion it with type 8e ## add new disk to LVM ## add the disk back into volume group ## mirror up the volume |
“LVM – Logical Volume Management” bejegyzéshez 2 hozzászólás