LPAR-t készíteni és installálni már tudunk, csomagokat tudunk telepíteni, és hálózatot konfigurálni is. Most akkor térjünk rá a tárhelykezelésre.

Az AIX már a korai idők óta alkalmazza az Logical Volume Manager-t (LVM) tárhely kezelésre. Innen került át először a HPUX-okba, majd kapott később óriási publicitást a LINUX-okkal.

LVM bevezető

Nézzük át gyorsan ismét milyen filozófia érvényesül az LVM-nél, illetve milyen fontos kifejezéseket kell tudnunk mielőtt rátérünk az AIX-os kezelésére.

Az LVM esetében nem statikus partíciókra vágjuk fel az elérhető diszkjeinket, hanem egy logikai csoportba rendezzük őket. Ilyenkor a logikai csoport egy nagy egybefüggő tárterületet fog reprezentálni. Ebből a nagy csoportból tudunk lekérni és definiálni logikai volume-ket. Ilyenkor azt, hogy melyik diszkről, és pontosan honnan, mennyi adat kerül felhasználásra, az rejtve marad előlünk. Pontosabban az LVM ezt a feladatot leveszi a vállunkról.

Emiatt a csoportba szervezés és automatikus allokálás miatt lehetséges dinamikusan és online módosítgatni a volumek méretét, vagy akár a csoportot is.

Nézzük ezt kicsit vizuálisabban:

A kép elég összetett, viszont elmond mindent.

Volume Group (VG)

A Volume Group tartalmazhat egy vagy több diszket. Egy diszk egyszerre csak egy VG-hez tartozhat, viszont létezhet egymás mellett több VG is. A VG igazából egy jelzés, hogy milyen diszkek tartoznak össze, illetve hogy ezekből a diszket tömörítő csoportból milyen Volumeknek kell elérhetőnek lenniük.

Physical Volume (PV)

A PV jelenti a LVM számára a nyers diszket. Ezeket kell hozzárendelni egy VG-hez, és ezekből a diszk kapacitásokból fog összeállni a VG mérete.

Physical Partition (PP)

Az LVM a Physical Volumek által definiált tárterületet valahogy ki kell, hogy tudja osztani kisebb darabokra. Emiatt a kiosztás miatt kell a PV-k által definiált területet egységnyi elemekre osztani. Ezek az egységnyi elemek lennének a Physical Partition-ok. A diszkünk tehát egy nagy LEGO figura, amit meg kell mondanunk, hogy hány darab LEGO daraból áll.

Logical Volume (LV)

Az előző példánál maradva, ha tudjuk mekkora és hány darab LEGO darabunk van, akkor ezeket tetszés szerint kisebb részekre tudjuk osztani. Ezek fogják a Logical Volumeket definiálni. Azokat az egységeket, amikre filesystem-et lehet tenni, és mountolni ezáltal.

Logical Partition (LP)

Ahogy a PV-k is PP-kből állnak úgy az LV-k is építő elemekből. A Logical Partition-ről azért van értelme külön beszélni, mert alapvetően a működéshez elegendő egy Physical Partition egy Logical Partition megfeleltetés. Viszont egy LP-hez több PP is tartozhat. Ez lesz a tükrözés. Ilyenkor egy LP-hez több PP is elérhető lesz.

LVM egy friss AIX-on

Első körben nézzük a df kimenetelét:

# df

Azt egyből látjuk, hogy egy HD nevezetű layout jön létre alapból. Ezt a telepítő magának generálja, és nem ajánlott átnevezgetni. Másodsorban az látszik, hogy a VG neve a device path-ában nem látható. Sajnos pont ezért hiába két LV két különböző VG-ben van, nem lehet ugyan az a neve.

Kérjük le azt, hogy milyen VG-k érhetőek el a gépünk számára. Ehhez használjuk a következő parancsot:

# lsvg

Természetesen részletes információkat is lekérhetünk a VG-ről. Ehhez a következő parancsot kell használnunk, és fontos, hogy ehhez a VG nevét is meg kell adnunk.

# lsvg rootvg

A Volume Groupoknak AIX-on több fajtája van. Alapértelmezetten egy “Original” típusú jön létre. Amennyiben külön megadjuk választhatunk még “Big” és “Scalable” típusokat. Alap esetben a VG maximum 32 PV (diszket) tartalmazhat és ezekből maximálisan 256 LV osztható ki. PV-nként maximum 1016 PP osztható ki, tehát a csoportba maximum 32512 PP lehet maximum. Ez nem egy feltétlenül rossz határ, viszont nagyobb rendszerek esetében szükség lehet ezek bővítésére.

Ha visszatérünk a konkrét példához. Akkor pirossal emeltem ki azt a részt, ami elárulja milyen típusú VG-ről van szó. Ahogy látszik is, alapból egy Original jön létre.

Továbbá zölddel karikáztam be az aktuális VG-re vonatkozó információkat. Láthatjuk a csoporta vonatkozo PP méretet. Az összes PP számát és méretét MB-ban. Ezen túl a használt és szabad PP-k számát.

Térjünk most át egy kicsit a PV (diszkek) lekérdezésére. Először is listázzuk ki az elérhető PV-ket:

# lspv

A fenti parancs megmutatja, hogy melyik diszk, milyen LVM azonosítóval, milyen VG-hez tartozik. Természetesen a VG nevét csak akkor láthatjuk, ha importáljuk. A fenti képen az látszik, hogy a hdisk0 a rootvg-hez tartozik és aktív az állapota. A többi PV is valamikor egy LVM VG-hez tartozott, azért láthatjuk az azonosítóját.

Másrészről viszont az is hasznos információ lehet, hogy egy VG-hez milyen PV-k tartoznak. Ehhez adjuk ki a következő parancsot:

# lsvg -p rootvg

A fenti képen látszik, hogy a rootvg-ben milyen diszk található, a státusza, mennyi PP érhető el benne, illetve mennyi szabad.

Végül ejtsünk szót a LV-kről. Az egyik legfontosabb végül is a Volumek. Listázzuk ki egy VG-hez tartozó LV-ket:

# lsvg -l rootvg

Láthatjuk az LV-k nevét, típusát. Ezek után minden volume-hoz láthatjuk, hogy hány Logical (LP) és hány Physical Partition (PP) tarotzik hozzá. Amennyiben itt egyezés áll fent, úgy nincs tükrözve a volume, nem redundáns. Ha a PP száma többszöröse az LP-nek akkor tükrözés áll fent. A PV oszlop alatt pedig azt láthatjuk, hány diszk érintett. A Státusza vagy zárt, vagy nyitott, attól függően, hogy használatban van-e vagy nem. A Syncd pedig majd a mirrorozásnál lesz érdekes. Ha Syncd-et látunk, akkor minden rendben.

Természetesen, ugyan úgy mint a VG esetében itt is le tudunk kérni részletesebb információt bármelyik LV-ről.

# lslv hd4

A parancs kimenetele sokkal részletesebb információkat ad, mint az lslv. Külön kitérnék a RELOCATABLE attribútumra. Ez határozza meg, hogy egyes LV-k alatti PP-k online mód cserélgethetőek-e optimalizáció miatt. Alapvetően ez hasznos tud lenni, ezért érdemes YES-re tenni. Viszont van egy kivétel. A HD5. Ez a boot rész. Ennek kötelezően a diszk elején kell lenni, ott fogja keresni a boot loader. Ha áthelyezi az LVM, akkor nem lesz képes a rendszer bootolni.

Új VG létrehozása

Ha már kitárgyaltuk egy új rendszer struktúráját, és átnéztünk, hogy milyen parancsokkal lehet lekérni információkat róluk, most csináljunk egyet.

Az alap helyzetünk ez:
# lspv

Hozzunk létre egy új datavg nevű VG-t, amihez hozzárendeljük a hdisk1-et.

Original VG létrehozása:
# mkvg -y datavg hdisk1

Big VG létrehozása:
# mkvg -B -y datavg hdisk1

Scalable VG létrehozása:
# mkvg -S -y datavg hdisk1

Én most egy Big VG-t akartam létrehozni, és kaptam egy hibaüzenetet:

The physical volume hdisk1, appears to belong to another volume group. Use the force option to add this physical volumeto a volume group.

Ez csak annyit tesz, hogy a PV-nek már van LVM azonosítója. Tehát a rendszer figyelmeztet, hogy lehet olyan diszkhez nyúlunk amihez nem kellene. Én biztos vagyok benne, hogy azt a diszket akarom használni, és ezzel minden előtte lévő adat meg fog semmisülni. Így használom a -f kapcsolót.

Ahogy fenti képen látszik, elkészült a datavg. Ezek után lekértem néhány információt a már ismertetett parancsok segítségével.

Új LV létrehozása

Most hozzuk létre az új datavg-be a legelső LV-t.

# mklv -y teszt1 -t jfs2 datavg 5

A -y után az LV nevét kell megadnunk, a -t után a típusát, végén pedig, hogy melyik VG-ből és hány Partíciót akarunk neki definiálni.

(csak zárójelesen jegyzem meg, hogy ne felejtsük el a jfs2-t használni. Sajnos a sima jfs típusnak olyan limitációi vannak, amelyek gyorsan problémákat okozhatnak nekünk:


)

Filesystem készítése és mountolása meglévő LV-ra

Természetesen az LV még closed állapotban lesz, mert nem tettünk rá filerendszert, és nem mountoltuk.

# crfs -v jfs2 -d teszt1 -m /teszt1 -A yes

A parancsot követően meg kell adnunk néhány információt. A -v után, hogy milyen filesystem típust akarunk létrehozni, a -d után az LV nevét, a -m után a kívánt mountpoint PATH-ját. Opcionális, de én hozzáadtam még a “-A yes”-et is, mellyel a filesystem automatikusan mountolodni fog bootolás esetén.

Hozzuk létre a mountpoint könyvtárát és mountoljuk:
# mkdir /teszt1
# mount /teszt1
# df -g /teszt1

Filesystem és LV törlése

Ahhoz, hogy törölni tudjuk a filesystem-et először umountolnunk kell.

# umount /teszt1
# rmfs /teszt1

Ez nem csak a Filesystem bejegyzést távolítja ám el, hanem az egész teszt1 LV-t.

Filesystem készítése és mountolása LV nélkül

Az előzőekben azt néztük meg, hogy külön paranccsal, hogy gyártunk le egy Partíciókban megadott LV-t, majd arra, hogy rakunk külön filesystemet rá. Viszont ezt megtehetjük egy lépésben is.

# crfs -v jfs2 -g datavg -a size=2G -m /teszt1 -A yes

Nem térnék ki mindegyik kapcsolóra, mert gyakorlatilag megegyeznek a már fentebb bemutatott funkcióval. Csupán egyet emelnék ki. Ez lenne a “-a size=2G”. Ezzel tudjuk megadni, hogy mekkora méretű LV és FS jöjjön létre. A nevet ilyenkor nem befolyásolhatjuk. Automatikusan fog létrejönni egy LV név. Az én esetemben ez fslv00.

Filesystem és LV növelése és csökkentése

Természetes igény, hogy növelni, illetve szabad hely esetén csökkenteni tudjuk a filesystemet (és vele együtt az LV-t is).

Készítettem egy egyszerű szöveges file-t, majd KB-ban kiírtam az új filesystem-ünk méretét. Ezt fogjuk növelgetni, és csökkentgetni.

Akkor most adjunk hozzá +1GB-ot. Ezt egy egyszerű parancs meg is teszi számunkra:

# chfs -a size=+1G /teszt1

Ahogy látszik, ez a rövid parancs megnövelt mindent, ahogy kell, és az előtte odatett file sem sérült. A size után adhatunk meg Mega, Kilo értékeket is, illetve nem muszáj plusz jellel azt megadni, hogy mennyivel akarunk növelni, megadhatjuk simán az egyenlőség jel után azt is mennyire akarunk növelni.

Akkor most csökkentsünk:

# chfs -a size=-2G /teszt1

Csökkenteni pedig hasonlóan csak negatív számot kell megadni, vagy egy kisebb értéket. Az adatunk itt sem fog sérülni.

Filesystem növelése VG növeléssel

Könnyen találkozhatunk, egy olyan növeléssel, amikor a következő üzenetet kapjuk:

# chfs -a size=+75G /teszt1

0516-787 extendlv: Maximum allocation for logical volume …

Ekkor fogyott el az elérhető Free PP száma a VG-ben. Nincs viszont veszve semmi, ha van diszkünk, amit hozzá tudunk adni a VG-hoz.

# extendvg -f datavg hdisk2

Hozzáadtam az extendvg parancs segítségével egy új diszket a VG-hez. Ezek után szépen látszik a listázó parancsok segítségével, hogy megnőtt a kiosztható és elérhető PP-k száma.

Hasonló képen ki is tudjuk belőle venni, viszont csináljunk valami izgalmasabbat. Tegyük fel, hogy valami gond van a HDISK1-el, amin eddig voltak az adatok. Új diszkként hozzáadjuk a HDISK2-t, amit már megtettünk, és most át akarjuk rakni az összes adatot a HDISK2-re és a HDISK1-et kivenni.

Az első lépést megtettük, mindkét PV elérhető a VG-ben. Most migráljuk át az összes adatot ONLINE a HDISK1-ről a HDSIK2-re. Majd vegyük ki a felszabadított diszket a VG-ből

# migratepv hdisk1 hdisk2
# reducevg datavg hdisk1

Tükrözzünk Logical Volume-t

Természetes igény az adatbiztonság miatt, hogy az LV-k tükrözöttek legyenek. Tehát ha bármelyik diszk meghibásodik a rendszerünk, akkor is működjön. Én most a rootvg (rendszer VG)-n fogom bemutatni ennek a módját. Először is a már ismert módon adjunk hozzá egy új PV-t.

# extendvg rootvg hdisk1

Ezek után el kell indítani a szinkronizálást:

# mirrorvg rootvg hdisk1

(használhatjuk a -S kapcsolót, hogy a háttérben történjen)

Ahogy elindul a szinkronizálás a következőt kell látnunk:

Ez jelzi, hogy valami folyamatban van… Amikor lement a sync akkor újra syncd lesz az állapota. Ezen túl valami újat is kell látnunk:

Amit észre kell venni, hogy a LP és a PP aránya megváltozott. Duplája a PP az LP-nek. Ez jelzi, hogy tükrözött.

Olyan esetben, amikor a rootvg-t tükrözzük, szükséges még a rendszer rágeneráltatni az új diszkre is, illetve a bootsorrendbe is belevenni azt. Erre figyelmeztet a mirrorvg is.

# bosboot -a -d /dev/hdisk1
# bootlist -m normal hdisk0 hdisk1

Természetesen nem csak egész VG-t lehet csak tükrözni. Megtehetjük ezt LV-nként is. A következő parancsot használjuk hozzá:

# mklvcopy -k fslv00 2 hdisk3

A parancs után a -k után meg kell adni a tükrözendő LV nevét, és hogy hány példányra tükrözze. A fenti képen zölddel kiemeltem, ahogy csak az egyik volume LP-PP aránya változott.

Diszk csere tükrözött VG esetén

Az ok, amiért tükrözünk LV-ket, mert tartunk a diszk meghibásodásától. Amennyiben ez bekövetkezik, valahogy ki kell cserélnünk a meghibásodott diszket. Nézzük most egy rövid példán, hogy is kell az adminisztrátornak eljárnia ilyen esetben.

Szüntessük meg a tükrözést a hibás PV-ről.
# unmirrorvg datavg hdisk7

Távolítsuk el a VG-ből a hibás PV-t.
reducevg workvg hdisk7

Konfiguráljuk ki az AIX-ból a hibás diszket.
#rmdev -l hdisk7 -d

Most kell kicserélni a hibás diszket egy jóra.

Ismertessük fel a kicserélt diszket.
# cfgmgr

Adjuk hozzá újra a VG-hez.
# extendvg workvg hdisk7

Tükrözzük újra le.
# mirrorvg workvg

LVM újraszervezés és optimalizálás

Érdemes időnként kiadni a reorgvg parancsot. A parancs hatására az LVM felülvizsgálja, hogyan lehetne az egyes LP-hoz tartozó PP-k elérését optimalizálni. Amennyiben úgy találja, hogy máshogy jobb lenne, automatikusan és ONLINE megteszi a kellő módosításokat.

# reorgvg datavg

VG exportálása és importálása

Előfordulhat, hogy egy VG-t és a hozzá tartozó LV-ket exportálni kell az AIX-ból. Például ha a hozzá tartozó diszkeket (PV) mozgatni akarjuk vagy karbantartani, és nincs semmilyen redundáns megoldásunk (tükrözés).

Ilyenkor le kell mountolni a hozzá tartozó filesystem-ket, lekapcsolni a VG-t, és exportálni. Nézzük, hogy néz ez ki parancsok formájában:

# umount /teszt1
# varyoffvg datavg
# exportvg datavg

Ahogy fent látszik a datavg minden féle jelzés nélkül felszívódott. Most tehetjük meg a megfelelő diszkkel kapcsolatos karbantartásokat. Majd amikor a diszknek megint elérhetőnek kell lennie, akkor vissza importálni:

# importvg -y datavg hdisk2
# mount /teszt1

Sajnos az importáláshoz nem elég a VG nevét megadni (mint SVM, ZFS, vagy VxVM esetén) egy PV-t is meg kell adni ami a VG-hez tartozik. Egy 100 PV-ből álló VG-nél is elég csupán egyetlen tagot megadni, viszont egyet kötelező.

Ez csak akkor kellemetlen, ha sok PV és sok exportált VG van. Importálás után viszont külön nem kell kiadnunk varyonvg parancsot.

Összegzés

Bízom benne sikerült bemutatnom az AIX LVM struktúráját és működését. Jó néhány alap példán keresztül megismerhettük egyszerűségét illetve limitációit is. Nagyon sok dolgot egyszerűen megtehetünk az AIX LVM-je által, viszont sok idegesítő dologgal is találkozhatunk.