FreeBSD RAID megoldások I. – a GEOM

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ó.