FreeBSD RAID megoldások II. – a (G)Vinum

Az első részben a gmirror és a gstripe lehetőségeit vettük sorra. Ezek nagyszerű eszközök, egyszerűen konfigurálhatók. Bővíthetőség, finomhangolhatóság tekintetében azonban van olyan megoldás, mellyel szemben alulmaradnak. Azt is figyelembe kell vennünk, hogy a RAID5-ös szintet egyik sem támogatja. Van azonban a GEOM keretrendszernek egy ága, mely az előbb felsorolt szempontokban is kiválót tud nyújtani. Ez a vinum, ill. mióta a GEOM keretrendszernek megfelelően újraírták: gvinum.

FreeBSD RAID megoldások II. rész – a (G)Vinum

A gvinum egyszerre kínál lehetőséget a kifinomultabb logikai kötetek létrehozására, bővíthetőségre, ill. RAID0, RAID1, RAID5 és összefűzött lemezek kezelésére.  Ahhoz viszont, hogy ennek a működését megértsük,  néhány fogalmat tisztáznunk kell.

A vinum egy négyszintű objektum-hierarchiát használ, melynek elemei:

  • kötet (volume; ez a plex-ből vagy plex-ekből tevődik össze)
  • plex (ez egy v. több  subdisk-ből tevődik össze)
  • subdisk (allemez; egy drive része vagy egésze)
  • drive (ez általában a fizikai meghajtó vagy annak egy partíciója, de akár egy file is lehet)

Aki már használt Veritas volume-ot, annak ezek a fogalmak szinte közhelyszámba mennek, de először találkozni ezzel kicsit ijesztő lehet. A jobb megértés érdekében azonban példákon keresztül fogjuk ezeket végignézni (melyek sorra veszik RAID0, RAID1, és RAID5 szinteken).

Az alaprendszerünk itt is FreeBSD 9.0, és van három darab szabad diszkünk, két-két partícióval,ezeket fogjuk használni a tesztekben.

  • da1 (da1s1a (500MB) és da1s1b (400MB))
  • da2 (da2s1a (500MB) és da2s1b (400MB))
  • da3 (da3s1a (500MB) és da3s1b (400MB))

RAID0 beállítása gvinum segítségével

A gvinumnak van egy interaktív parancssori felülete is, aminek segítségével a beállításokat elvégezhetjük. Nézzük hogyan! Adjuk  ki a gvinum parancsot, mindenféle paraméter nélkül:

freebsd# gvinum

Innen tudunk létrehozni, törölni, bővíteni, stb. Kilépni a ’quit’ begépelésével lehet. Tehát egy RAID0 kötet létrehozása. Ehhez először szerkesztenünk kell egy konfigot, legyen a neve mondjuk testraid0.

freebsd# vi testraid0

Írjuk bele a következőket:
drive r11 device /dev/da1s1b
drive r21 device /dev/da2s1b
volume testraid0
plex org striped 512k
sd drive r11 length 100m
sd drive r21 length 100m

Majd mentsük el! Ezután adjuk ki az alábbi parancsot:

freebsd# gvinum create testraid0

Ha minden jól csináltunk, nem kapunk vissza semmi mást, csak a prompot. De mit is csináltunk? Nem történt semmi feltűnő!

Nézzük meg ezt is, adjuk ki az alábbi parancsot!

freebsd# gvinum list

Hoppá! Egy elég érdekes és bonyolultnak tűnő kimenetet kapunk; vegyük sorra mit csináltunk és mit látunk!

A két diszkünk két 400MB-os partíciójából kiragadtunk két 100MB-os szeletet, és ezeket subdisk-ként deklaráltuk. A két subdiskünket egy plex-be foglaltuk, és ezt pedig hozzárendeltük a volume-hoz.

Látjuk, hogy a testraid0.p0.s1 és testraid0.p0.s0 subdisk-ek 100-100MB-osak, ahogyan azt szerettük volna, és mivel a konfigunkban striped módon fűztük őket össze, a méreteik is összeadódva látszanak a testraid0.p0 plex alatt. Végül legfelül látjuk két drive-t, melynél azt is mutatja a lista, hogy 74%, ~300MB szabad, ami jogos, hiszen a 400-400MB-ból csak 100-100MB-ot vettünk el. Eddig ok. De mik ezek a nevek? Amit a konfigurációban mi magunk neveztünk el, az a két drive, r11 és r21 nevet kapták, ill. a kötet maga, ami testraid0 lett, de ezek neve lehet bármi, nincs rá megkötés. És a többi? A gvinum, ha külön nem adunk nevet az objektumoknak, akkor elnevezi őket automatikusan, és szerintem eléggé logikusan is, ha pl. a subdiskeket nézzük, akkor ilyen konvenció szerint:

<volumenév><plexsorszám><subdisksorszám>

Látjuk még minden objektum státuszát, ill. a plex státusza mellett egy nagy ’S’ betűt, mely azt jelzi, hogy a belefoglalt subdiskek STRIPE módon vannak összefogva, nem pedig CONCAT módon, mely esetén nagy ’C’ lenne. Rendben. De hogyan lesz ebből fájlrendszer? Vizsgáljuk meg ezt is!

Létrejött ugyanis az eszköz node, amire létrehozhatjuk a filerendszert, az alábbi módon:

freebsd# newfs /dev/gvinum/testraid0

És fel is mountolhatjuk:

Ezzel készen is vagyunk, a /test könyvtár alatt egy 200MB-os csíkozott köteten levő fájlrendszerünk lett.

RAID1 beállítása gvinum segítségével

A beállítás menete megegyezik a RAID0-éval, kivéve természetesen a konfigurációs file tartalmát. Nézzük ez hogyan néz ki (feltételezve, hogy az előző RAID0-ás kötetet eltávolítottuk már):

freebsd# vi testraid1
drive r11 device /dev/da1s1b
drive r21 device /dev/da2s1b
volume testraid1
plex org concat
sd drive r11 length 100m
plex org concat
sd drive r21 length 100m

freebsd# gvinum create testraid1

Látjuk, hogy a felhasznált drive-ok száma megegyezik a RAID0 konfigban használtakéval, de változott a plex-ek száma, ill. a subdiskek elrendezése.  Plex-enként egy subdisk, és a plexeket tükrözi össze, majd rendeli őket egy volume alá.

freebsd# gvinum list

A státuszból pedig kiderül, hogy itt már a plexek vannak egymáshoz rendelve, mirrorozva, és a volume mérete a RAID1 szint miatt szintén 100MB, tehát a két plex méretéből a fele kapacitás lesz használható. Természetesen egy-egy plex alá tehetünk párhuzamosan ugyanakkora méretű plusz subdiskeket is, ezzel tudjuk növelni a volume méretét. Az eljárás további része itt is ugyanaz, mint a RAID0 esetében.

freebsd# newfs /dev/gvinum/testraid1

És a /test alatt ott van a tükrözött  volume-unk.

RAID5 beállítása gvinum segítségével:

Egy RAID5-ös tömb tagjainak száma, tudjuk, minimálisan három, és ennél a példánál maradva ebből két tag tárkapacitásának az összege fog látszani felhasználható területként.

Hogyan néz ki a konfigurációja ennek?

freebsd# vi testraid5

drive r1 device /dev/da1s1b
drive r2 device /dev/da2s1b
drive r3 device /dev/da3s1b
volume testraid5
plex org raid5 512k
sd drive r1 length 100m
sd drive r2 length 100m
sd drive r3 length 100m

Láthatjuk, hogy a három résztvevő subdisk három különböző driveból lett kiszelve, és a három subdisk egy darab plex alá rendeződik, raid5 módban, és 512k-s csíkokkal dolgozik.

freebsd# gvinum create testraid5

Az eredmény pedig a testraid5 nevű RAID5 volume, mely a három résztvevő subdisk 100-100-100MB-jából összerakta a 200MB-ot. A plex státuszánál megfigyelhető a RAID5 módra utaló ’R5’ flag.

Az előbbiekben alkalmazott módon egyezően formázhatjuk:

freebsd# newfs /dev/gvinum/testraid5

És a /test alatt ott látható a felcsatolt RAID5 kötet. Természetesen az elnevezések, akár a volume, akár a drive, akár a subdisk neve tetszés szerint változtatható, akár csak a subdiskek mérete a drive méretéig.

Bővítés:

Említettem, hogy a gvinum a bővíthetőséget is támogatja, no persze, csak a növelést. Ennek egyik kritériuma, hogy a kötet NEM lehet felmountolt állapotban. Hogyan történik ez? Nézzünk egy példát erre is, használva a létrehozott RAID1 kötetet. Ez most a /test alá van csatolva.

freebsd#gvinum list

freebsd# df –h

Ok, tehát a /test filesystem a RAID1 kötettel 100MB. A teszt kedvéért hozzunk létre egy filet rajta, vagy akár többet, hogy lássuk, adatvesztés nélkül tudunk-e növelni:

freebsd# cd /test
freebsd# touch file1 & echo testfile > file1 & cp file1 file2 & cp file1 file3 & cp file1 file4 & ls –la

Majd lépjünk vissza a / -be, és unmountoljuk a /test –ből a kötetet.

Most pedig növeljük meg a RAID1 kötetünk méretét.

freebsd# gvinum

Írjuk be: create. Majd adjuk hozzá a következő két sort a megjelenő futó config végéhez:

sd length 100M drive r11 plex  testraid1.p0
sd length 100M drive r21 plex  testraid1.p1

És mentsük el a konfigot! (vi-ben ismert :wq! )

Itt most azt csináltuk, hogy a RAID1 két plexéhez hozzáadtunk még egy-egy darab 100MB-os subdisket. Ha ezt ellenőrizzük, látjuk is:

A kötetméret tehát az addigi 100MB-ról 200MB-ra nőtt. Mostmár nincs más hátra, a rajta levő fájlrendszert is át kell méretezni:

freebsd# growfs /dev/gvinum/testraid1

Láthatjuk, hogy a fájljaink megvannak, és épen maradtak, a filesystem mérete pedig megnőtt. Mindezek ellenére egy nagyobb fájlrendszer esetén, amin még adat is sok van, erősen javallt egy fsck futtatása a growfs előtt.

Mini cheat sheet:

# gvinum                –    elindítja a gvinum promptot
# gvinum create <configfile>    –    a konfigfájlban szereplő paraméterek alapján elkészíti a kötet(eket)
# gvinum resetconfig        –    az összes létező gvinum konfigurációt törli (vicces, hogy be kell gépelnünk, hogy ‘NO FUTURE’ megerősítésként)
# gvinum printconfig        –    képernyőre írja a futó konfigot (ez lementhető és továbbszerkeszthető)
# gvinum dumpconfig        –    kiírja konfigurációt az összes résztvevő tárolóra

Gyorsparancsok (értsd: a megadott eszközökkel felhúzza a kívánt volume-t):
# gvinum mirror -n volumenév diszk1 diszk2    –    volumenév nevű mirrorkötet létrehozása
# gvinum concat -n volumenév diszk1 diszk2    –    volumenév nevű összefűzött volume létrehozása
# gvinum stripe -n volumenév diszk1 diszk2    –    volumenév nevű csíkozott volume létrehozása
# gvinum raid5 -n volumenév diszk1 diszk2 diszk3 –    volumenév nevű RAID5 volume létrehozása

Vinum kötetek elérése rendszerindításkor:

Bejegyzések a /boot/loader.conf fileba:

geom_vinum_load=”YES”
vinum.autostart=”YES”

A /boot/loader megkeresi a hozzá tartozó eszközt a /etc/fstab állományban és ha az al-eszközök elérhetők, akkor felcsatolja a kötetet. Ha / filesystem vinum köteten van, akkor ezek kötelező paraméterek, máskülönben nem fog elindulni rendszerünk.

Összegzés:

Nem állítom, hogy a gvinum kötetek konfigurációja nagyon egyszerű volna, különösen egy kezdő számára.  Ahogy a cikk elején említettem, aki már konfigurált VERITAS volume-okat, annak bizonyára sokkallta könnyebb lesz a gvinum managementje.  Fontos még azt is megemlíteni, hogy amennyiben gvinum kötetet szeretnénk rendszerindítóként is használni, akkor 1. nem lehet csíkozott vagy RAID-5, 2. plex-enként nem tartalmazhat egynél több összefűzött subdisk-et. Mindezekkel együtt, azt hiszem azonban, hogy ebből a nagyon szimpla bemutatóból is kiviláglik, hogy egy sokrétű és jól alkalmazható kötetmenedzserrel van dolgunk.