Említettem a hibatűrő adattárolásról szóló cikkben, hogy konkrét példákkal is bemutatásra kerülnek a BSD-kben, jelen esetben a FreeBSD-ben alkalmazható RAID megoldások; itt természetesen csak és kizárólag az operációs rendszer által biztosított kernel szintű szoftveres RAID-ekről beszélünk. A most bemutatásra kerülő RAID megoldás a legegyszerűbben beállítható típusa a hibatűrő tömböknek FreeBSD alatt. Ez GEOM keretrendszerre épül, mely egy moduláris része a kernelnek, és lehetővé teszi a diszkek különféle RAID szintekbe történő rendezését.
FreeBSD RAID megoldások I. – a GEOM
Lássuk, hogyan tudjuk ezt beállítani.
Tételezzük fel, hogy van egy frissen telepített FreeBSD rendszerünk, kettő darab diszkkel, ezek az:
freebsd# camcontrol devlist -v
scbus0 on ata0 bus 0:
<VBOX HARDDISK 1.0> at scbus0 target 0 lun 0 (pass0,ada0)
<VBOX HARDDISK 1.0> at scbus0 target 1 lun 0 (pass1,ada1)
A rendszerünk maga az ada0 diszken lett telepítve, innen is indul, minden filerendszere ezen van. Az ada1 diszk egyelőre, mint kihasználatlan kapacitás van jelen a rendszerünkben. A két diszk mérete megegyezik.
RAID1 (mirror) beállítása:
Mielőtt elkezdenénk konfigurálni a RAID1 tömböt, engedélyeznünk kell a magasabb szintű debug információt és hozzáférést az eszközökhöz a következő paranccsal:
A RAID beállítás tulajdonképpen most kezdődik azzal, hogy a meta adatbázist létrehozzuk a RAID tömb első lemezén. A másodikon nem lesz szükséges létrehozni, mert a tömb szinkronizációja során ez is tükröződik.
A metaadatok sikeresen eltárolódtak az ada0 diszken. Most inicializálnunk kell a GEOM keretrendszert, ez voltaképpen betölti a GEOM modult a kernelbe.
freebsd# gmirror load
freebsd#
A parancs sikeres végrehajtódása után a /dev/mirror alatt létrejön a gm0 eszköz node. Tulajdonképpen már van egy RAID1-ünk, amiben –egyelőre- egy diszk van. Erről kérhetünk információt a következő módon:
freebsd# gmirror status
Részletesebben pedig:
freebsd# gmirror list
Ezzel azonban még nem végeztünk, hiszen a rendszerünk még mindig az első diszkről bootolna újraindítás esetén, és a RAID tömb sem teljes még, mert csak egy tagja van. Ehhez először is az /etc/fstab fájl átszerkesztésére lesz szükség. A biztonság kedvéért erről csináljunk egy backupot előbb:
freebsd# cp /etc/fstab /etc/fstab.orig majd szerkesszük meg: vi /etc/fstab.
Cseréljük le az összes /dev/ada0sXy hivatkozást /dev/mirror/gm0sXy –ra, ilyen módon:
Előtte:
Utána:
Fontos, hogy a GEOM modulnak már a kernel betöltődésekor és a fájlrendszerek felcsatolása előtt be kell töltődnie, különben nem fog tudni elindulni a rendszer. Ehhez a következő bejegyzésre lesz szükség a /boot/loader.conf fileba:
echo ‘geom_mirror_load=”YES”‘ >> /boot/loader.conf
A fenti lépések megtétele után indítsuk újra a rendszerünket és lássuk, mi történik!
Egy ilyen sort látnunk kell majd a kernelüzenetek között:
A fájlrendszerek pedig a következőképpen néznek ki:
Újraindítás előtt:
Újraindítás után:
Nagyszerű! A RAID működik! Mindössze annyi dolgunk maradt, hogy a még mindig kihasználatlan második diszket is „ráakasszuk” a mirror device-ra, hiszen ebben a pillanatban még nem redundáns a tömb. Tegyük meg ezt most!
freebsd# gmirror insert gm0 ada1
A második diszk már szinkronizálódik is.
Miután a szinkron végigment, látjuk, hogy a RAID1 tömbünk is konzisztens lett.
Kész is vagyunk!
Néhány megjegyzést azonban tennünk kell:
– ha egy mód van rá, ezt frissen telepített rendszer esetén konfiguráljuk (kevesebb downtime, és kisebb esély az adatvesztésre)
– GPT típusú partíciókon ez nem működik, mivel a GEOM felülírja a GPT metaadatokat és ez működésképtelen rendszert eredményez.
Mi a teendő diszkhiba esetén?
Ha pl. meghibásodik az ada1, tehát a második diszk, akkor csere előtt a GEOM adatbázissal is tudatni kell, hogy márpedig mi ezt ki fogjuk cserélni! Ha a diszk még látszik a gmirror status kimenetben, de FAULTED vagy DEGRADED statusszal, akkor használjuk a következő parancsot:
freebsd# gmirror forget gm0
Ha a diszkre NEM jelez hibás státuszt, de más forrásból (logok, kernelüzenetek) arra lehet következtetni, hogy a diszken pl. hibás szektorok vannak (ami ellen a RAID ugye nem véd, ill. a fájlrendszer hibái ellen sem), akkor a következőt alkalmazzuk:
freebsd# gmirror remove gm0 ada1
Majd a diszk fizikális cseréje után:
freebsd# gmirror insert gm0 ada1
RAID0 (stripe) beállítása:
A RAID1-hez teljesen hasonlóan állíthatjuk be (kivéve talán, hogy remélem / vagy egyéb OS filesystemet gondolom senkinek nem jutna eszébe RAID0-n tartani). Természetesen itt redundanciával nem számolhatunk, mivel egy két diszkből álló stripe esetén az egyik kiesése esetén is teljes lesz az adatvesztés.
Az előzőek alapján:
freebsd# gstripe label -v st0 da0 da1
Hozzunk létre labelt:
freebsd# bsdlabel -wB /dev/stripe/st0
Majd fájlrendszert:
freebsd# newfs -U /dev/stripe/st0a
Ellenőrizzük:
És fel is csatolhatjuk:
freebsd# mount /dev/stripe/st0a /test
Itt se felejtsük el a loader.conf-ba tenni a megfelelő bejegyzést:
echo ‘geom_stripe_load=”YES”‘ >> /boot/loader.conf
IO statisztikák:
freebsd# gstat
Összegzés:
A GEOM használata szerintem nagyon logikus, és villámgyorsan konfigurálható. Stabil, megbízható eszköz, és végül, de nem utolsósorban a performanciája is kiváló.