Linux lemezkezelés 4. rész – A RAID technológia

Alapok

Bármennyire is fejlett fájlrendszereket dolgoznak ki, akármilyen hatékonyak is a naplózási és hibajavító technikák, egyvalamivel nem tudnak megbirkózni, a fizikai hardver meghibásodásával. Ki kellett fejleszteni olyan technikákat, amelyek ilyen esetekben is képesek az adatok visszanyerésére. Ez lett 1987-ben a RAID.

A RAID mozaikszó a Redundant Array of Independent Disks szavak kezdőbetűiből áll össze. (Bár eleinte a Redundant Array of Inexpensive Disks elnevezést használták.) Egy olyan tárolási technikát takar, amelyben a az adatokat elosztva tárolják több fizikailag egymástól független tárolóeszközön úgy, hogy ezekből az operációs rendszer egyetlen logikai eszközt lát. A RAID technika egyrészt az adatbiztonság, másrészt az adatátviteli sebesség növekedését eredményezheti.

A RAID nem csak egyetlen adattárolási módszert takar, hanem több szabványos és nem szabványos verzióját is kidolgozták az idő folyamán. Ezeket RAID szintek-nek is nevezzük. Mindegyik más-más logikával tárolja az adatokat, és így más-más tulajdonságokkal rendelkezik. Némelyik a biztonságban jobb, némelyik a gyorsaságban.

Nézzük meg röviden az egyes szintek mögött álló tárolási logikát. Noha nem mindegyik szintet használjuk már, annak érdekében, hogy a ma használatosak kialakulásának logikáját megértsük, a régebbieket is megnézzük.


Szabványos RAID szintek

RAID 0 – (összefűzés vagy csíkozás)

A RAID 0 működésének logikája a következő: A tárolandó adatokat adott méretű darabokra osztjuk (egyetlen ilyen darabnak a neve a csík (stripe)), majd egy ilyen csíkot annyi részre osztunk, ahány egymástól független lemezünk van (egy ilyen rész neve a csík-egység (strip unit)) Sajnos az angol nyelvű dokumentumokban található stripe és strip lefordítása elég nehéz, a stripe jelentése szalag és csík is lehet, a strip jelentése pedig csík, sáv. A lényeg az, hogy a stripe van felosztva strip-ekre. Ahányra fel van osztva, az a strip width, vagyis a csíkszélesség. Az egyértelműség kedvéért nevezzük el a strip-et strip unit-nak (csík egység). És hogy még bonyolultabb legyen, a Linux RAID kezelője a stripe-t chunk-nak nevezi. A RAID 0 ezeket a csík egységeket írja és olvassa párhuzamosan, így éri el a sebesség növelését.

Noha az előbb az érthetőség kedvéért azt írtam (és az ábra is ezt mutatja), hogy a csíkot annyi egységre osztjuk fel, amennyi lemezünk van, ez nem teljesen igaz. Lehet többre is felosztani. Ha például 2 lemezünk van (HDD1 és HDD2), és 3 részre osztjuk (A1, A2 és A3, B1, B2 és B3, stb.), akkor A1 a HDD1-re kerül, A2 a HDD2-re, míg A3 ismét a HDD1-re. Ezek után  B1 a HDD2-re, B2, a HDD1-re, B3 a HDD2-re, és így tovább. A továbbiakban mi annyi egységgel dolgozunk ahány lemezünk van.

A tárolás logikájából látható, a rendszer csak az írás és olvasás sebességet növeli, a biztonságot viszont nem, sőt, ha bármelyik eszköz tönkremegy, valamennyi adatunknak búcsút mondhatunk, hiszen minden csíkból egy csík-egység elérhetetlenné válik.

Fontos, hogy a két tárolóeszköz azonos kapacitású kell legyen (pontosabban szólva a különböző méretű háttértárakból a legkisebbnek megfelelő méretű tárterület lesz a RAID számára lefoglalva, a többi a RAID-től függetlenül még használható.). Arra is van természetesen lehetőség, hogy 2-nél több eszközt kössünk RAID 0-ba, így növelve tovább a technika hatékonyságát.

RAID 1 (tükrözés)

A RAID 1 főleg a megbízhatóságról, és nem a sebességről szól, bár van sebességnövekedés is az olvasás esetén. Egyszerűen csak azt kell elképzelnünk, hogy ha van két tárolóeszközünk egy közös RAID 1 tömbben, akkor a rendszer mindkettőre írja ugyanazt az adatot. Ha valamelyik eszköz meghibásodik, a másikon még minden adat elérhető. Az írás sebessége nem nőtt, de az olvasásé igen közel duplájára, hiszen a felírt blokkokat felváltva lehet kiolvasni a két eszközről. A megbízhatóságnak ára van, az eszközök tárolókapacitásának csak a fele érhető el. (Persze itt is lehetnek 2-nél többen, és itt is azonos kapacitású lemezeket vagy partíciókat kell használni.)

RAID 2

Ugyan a RAID 2 technológiát a gyakorlatban már nem használjuk, az általa bevezetett technikát érdemes megismerni. A RAID 2 a hibajavítás érdekében beveti a hibajavító kódok (ECC, Error Correcting Code) használatát. A hibajavító kód egy olyan bitsorozat, amelyet a tárolandó adatból számolnak ki, és szintén eltárolnak. Amikor ki kell olvasni az adatot, ismételten kiszámolják ezt a kódot, és ha nem egyezik a tárolttal, akkor ez azt jelenti, hogy a tárolt adat megsérült. Az ECC bitjeiből viszont nem csak a hiba megtörténtét lehet megállapítani, hanem pár bithibáig azt ki is lehet javítani. A RAID 2 az adattárolás biztonsága érdekében a Hamming kódolást alkalmazza, míg a sebesség növelésére a RAID 0-nál látott csíkozást veti be. Két lemezcsoportot definiál, az egyikben az adatokat tárolja a RAID 0-nek megfelelően csíkokban, míg a másikban az ezekből a csíkokból generált hibajavító kódokat.

RAID 3

A RAID 3 a RAID 2 logikáját viszi tovább úgy, hogy csökkenti a hibajavítási infomrációt tartalmazó lemezek számát 1-re. Ezt úgy éri el, hogy nem a teljes hibajavító kódot, hanem csak paritásinformációt tartalmaz, melyet a különböző adatlemezek csíkjaiból számít ki XOR művelettel. Ha egy adatlemez meghibásodik, akkor az azon található csíkok tartama a többi csíkból és a hozzájuk tárolt paritásbitekből kiszámítható. (Fontos megjegyezni, hogy a rendszer csak akkor működik, ha a meghibásodott meghajtó egyértelműen meghatározható, különben csak azt veszi észre, hogy az összetartozó adatcsíkokból kiszámított paritásbitek nem egyeznek meg a tárolttal, de hogy melyik miatt, az nem lenne egyértelmű.) Általában kisméretű csíkokat definiálnak, mely több kérés párhuzamos kiszolgálását nem támogatja, ami azért sem gond, mert az egyetlen paritásmeghajtó úgysem teszi lehetővé a paritásinformáció párhuzamos kiolvasását.

RAID 4

A RAID 4 felépítésében teljesen megegyezik a RAID 3-mal. A különbség közöttük az, hogy a RAID 4 nagyobb méretű csíkokat tartalmaz, melyekkel a párhuzamos kiszolgálást már támogatja, viszont az egyetlen paritás-meghajtó használata ilyenkor szűk keresztmetszet.

RAID 5

Annak érdekében, hogy a RAID 4 egyetlen paritás-meghajtója miatti szűk keresztmetszetét megszüntesse, a RAID 5 a paritásbiteket nem egyetlen kitüntetett meghajtón, hanem elosztva az adatcsíkokkal közös meghajtón tárolja. A rendszer úgy van kitalálva, hogy az egy csíkhoz tartozó adatok más meghajtón vannak, mint az azokat védő paritásbitek. Minimálisan legalább 3 lemez szükséges a használatához, de 4-től ajánlott. Egyetlen meghajtó kiesése még javítható, de kettő kiesése esetén már elveszítjük az adatokat. A RAID 5-ben jelent meg először a tartalék lemez (hot spare) funkció. A tartalék lemez a RAID tömböt alkotó lemezeken felüli eszköz. Egy adattároló lemez kiesése esetén a rendszer automatikusan beépíti a tartalék lemezt a tömbbe, helyreállítva rajta az adatokat. Ha a kiesett lemezt kicseréljük, az tartalék lemezként működik tovább.

RAID 6

A RAID 6 a RAID 5 olyan továbbfejlesztése, amelyben kétszeres mennyiségű paritásbitet számolnak ki, és ezeket nem egy blokkban, hanem kettőben tárolja. Ennek előnye, hogy már 2 lemez kiesését is tolerálja. Ennek az az ára, hogy nagyobb tárolási hely kell a paritásbitekre, és nagyobb terhelést is jelent a kiszámításuk.


Beágyazott (nested) vagy hibrid RAID technológiák

A beágyazott RAID technológiák a RAID 0 rendszert ötvözik más RAID szintekkel együtt. Általában a legjobb teljesítményt azzal érjük el, ha a hierarchia szintjén a RAID 0 áll, bár az összetettebb konfiguráció, a bonyolultabb RAID vezérlők és a nehezebb bővíthetőség a hátrányának tekinthetők.

RAID 0+1 (RAID 01)

Gyakorlatilag a RAID 0-t és a RAID 1-et egyesíti. Legalább 4 eszköz kell hozzá, ebből először kettőt összeköt RAID 0-ban (vagyis a gyorsaság érdekében csíkozva tárolja rajtuk az adatokat), majd ezt a lemezpárt tükrözi RAID 1-ben (így érve el a biztonságos adattárolást).

RAID 1+0 (RAID 10)

Ugyanúgy a RAID 0-t és a RAID 1-et egyesíti, de fordított sorrendben. Először a lemezeket tükrözi, majd ezeket a RAID 1 tömböket kapcsolja RAID 0-be csíkozva.

Egyéb beágyazott RAID technológiák

A RAID 10 és RAID 01 megoldásokhoz hasonlóan dolgozták ki a RAID 30, RAID 05, RAID 50 és a RAID 60, melyek szintén a RAID 0 technológiát ötvözik egy másikkal.


Nem szabványos RAID szintek

Számos nem szabványos, gyártóspecifikus RAID technológia is kidolgozásra került. Ilyenek például a RAID DP, RAID 1E, RAID 5E, RAID 6E, Intel Matrix RAID, Linux MD RAID 10, RAID-Z, stb. Nézzünk meg ezek közül pár fontosabbat.

RAID 7

A RAID 7 másik neve az aszinkron RAID. A RAID 5 működésének logikájára épül, de egy valós idejű beépített operációsrendszer és nagyméretű gyorsítótár segítségével nagyobb sebességet nyújt. Cégspecifikus, vagyis nem ipari szabvány, így drága egyedi vezérlőt igényel.

RAID 3D

Az SSD-k máshogy öregednek el, mint a hagyományos HDD-k. Míg a HDD_k esetében általában egy teljes lemez meghibásodásával számolhatunk (illetve ha a HDD lemezeinek egyes részei meghibásodnak, akkor érdemes a teljes csere mellett dönteni), addig az SSD-k esetében ez csak a tárolóterület egyes területeire mondható el, és szinte a működés természetes velejárója. Ennek hátterében az áll, hogy amikor az SSD-n egy NAND Flash területet írunk, akkor azt először törölni kell, és ezt a törlés-írás műveletet az SSD nem tűri el végtelen sokszor, és ez vezet az ún. bithibaarány (BER, Bit Error Rate) növekedéséhez. A RAID 3D-t speciálisan az SSD-k számára fejlesztették ki, hogy az ilyen hibákból adódó helyzeteket is kezelje. A 3D elnevezés abból adódik, hogy a hibajavítási információkat két irányban számolják ki, egyrészt a különálló SSD-ken keresztül horizontálisan, ahogyan a hagyományos RAID, másrészt pedig egyetlen SSD-n belül is vertikálisan.

BeyondRAID

A BeyondRAID abból az elvárásból került kifejlesztésre, hogy a rendszerünk ne függjön a kiválasztott RAID szinttől és annak rugalmatlanságától. Önmenedzselő képessége miatt saját maga választja ki az adatok lemezekre történő felírásának stratégiáját, és redundánsan tárolt adat allokációs táblán keresztül folyamatosan nyomon követi az eltárolt fájlokat. A Copy-on-Write (CoW)) módszert alkalmazva bármelyik fájl megváltoztatása az eredeti fájlról készült másolaton történik, majd erre készíti el az új hivatkozást. Igyekszik a tárolandó adatok számára a lehető legoptimálisabban lefoglalni a tárterülete, és a különböző méretű és specifikációjú lemezeket is képes RAID tömbbe kapcsolni úgy, hogy mindegyikről minden területet felhasznál. Ezen felül nem érzékeny a meghajtók sorrendjének a megváltoztatására, rugalmasan és az adatvesztés kockázata nélkül bővíthető új meghajtókkal. Szükség esetén a tartalék meghajtókat is felhasználja, és valamelyik meghajtó meghibásodása esetén a háttérben rendezi át és állítja vissza az adatokat

JBOD

Noha a JBOD nem tartozik a RAID technológiák közé, mivel az adattárolás témaköréhez tartozik, és a RAID vezérlők is képesek megvalósítani, érdemes beszélni róla. Néha csupán arra van szükségünk, hogy több, különálló háttértárat egyetlen összevont, nagy kapacitású tárolóeszközként használjunk. Ilyenkor használhatjuk a JBOD (Just a Bunch of Disks, Just a Bunch of Drives, csak egy csomó lemez) technológiát, amely mindenféle sebesség és megbízhatóság növelése nélkül vonja össze egyetlen virtuális meghajtóvá az eszközeinket. Fontos, hogy nem a lemezen található partíciókat vonja össze (mint az LVM), hanem magukat a háttértárolókat. Ezután tudjuk az összevont tárolóterületet partícionálni, formázni és adattárolásra felhasználni. Megfelelő vezérlők használatával a JBOD kombinálható RAID technológiákkal.


Melyik RAID szintet válasszuk?

Erre a kérdésre nem egyértelmű a válasz. Minden attól függ, mi a fontosabb számunkra: a teljesítmény, a biztonság vagy a tárolókapacitás. Ahogy láthattuk, nagyon sokféle RAID megvalósítás van, itt most mi a 4 legelterjedtebbet hasonlítjuk össze ezen szempontok alapján.

RAID 0 esetén kiváló teljesítményt kapunk mind az adatok írásának és olvasásának a területén, hiszen egyidejűleg több lemezt használ anélkül, hogy valamilyen redundáns információval kellene foglalkoznia. Énnek viszont az a következménye, hogy a biztonság területén nem léptünk előre semmit. Legalább 2 lemezt kell használnunk, melyek tárolókapacitása összeadódik.
RAID 1 esetén noha az írás sebessége nem változik (bár gyorsabb, mint azoknál a RAID megvalósításoknál, ahol a paritásadatokat ki kell számolni, és a lemezekre kell írni), az olvasás sebessége megnő, hiszen több lemezről olvashat párhuzamosan. A biztonság a tükrözés használata miatt kiváló, viszont a tömb mérete a legkisebb lemez méretével egyezik meg. Legalább 2 lemez kell a használatához.
RAID 5 esetén az adatok írásának és olvasásának a sebessége is jónak mondható, bár mindkettő függ a tömb felépítésétől. Ha fontos számunkra az írás nagy sebessége, érdemesebb például RAID 10-et használni. Megbízhatósága is jónak mondható, hiszen egyetlen lemez meghibásodását még képes automatikusan javítani. A tárolókapacitással sem bánik pazarlóan, például ha 4 lemezből áll a tömb, 3 lemez kapacitását használhatjuk adattárolásra. Minimálisan 3 lemezre van szükségünk hozzá.
RAID10 esetén mind teljesítményben, mind megbízhatóságban kiváló eredményt kapunk, de ennek ára van, legalább 4 lemezt kell használnunk, és ennek fele lesz csak elérhető effektíven adattárolásra.


Hardveres vagy szoftveres RAID?

A RAID megvalósítások két nagy csoportba oszthatók: A hardveres (vezérlő alapú) és a szoftveres RAID-ek. Hardveres RAID-ek esetén egy dedikált RAID vezérlőkártya, vagy az alaplapra integrált vezérlő végzi el az adattárolás és az adatvédelem feladatait. Mivel ehhez speciálisan tervezett áramköröket használ, általában nagy teljesítményt képes nyújtani. Ezzel szemben szoftveres RAID esetén maga az operációs rendszer végzi el ezeket a feladatokat egy speciális szoftver segítségével. Ez ugyan olcsóbb megoldást jelent, de ennek az ára a kisebb teljesítmény. Előnye is van, általában rugalmasabb konfigurációs lehetőségeink vannak szoftveres RAID használata esetén, és a szabványos RAID szinteken felül újabbak is használhatók.


Lemez vagy partíció?

RAID tömböket lemezekből és lemezeken található partíciókból is létre lehet hozni. Melyiket válasszuk? A kérdés megválaszolása nem is annyira egyszerű. Nézzünk meg pár szempontot:

RAID tömböket általában azonos méretű lemezekből hozunk létre. Vásárolunk mondjuk 4 darab 1 TB-os lemezt, azonos gyártótól, azonos típusút. Létrehozzuk a lemezekből a kívánt RAID tömböt, és örömmel használjuk. Telik-múlik az idő, és az egyik meghibásodik. A RAID redundanciája miatt az adataink nem vesznek el, de a lemezt ki kell cserélnünk. Az előző típusú lemezt már nem lehet kapni, így egy másik gyártótól választunk egy szintén 1TB-os kapacitásút. És itt jön a baj, ez az 1TB nem biztos, hogy pontosan megegyezik az előző 1TB-tal. Ez SSD-k esetén még gyakrabban fordulhat elő. Ha viszont mindegyik lemezről csak egy 990GB-os partíciót adunk a RAID tömbhöz, akkor a későbbiekben vásárolt lemezeken is csak ezt kell kialakítanunk, és máris könnyen beépíthető a tömbbe.

Ha a meghibásodott lemezek helyett eleve nagyobb (pl. 2TB) kapacitásút veszünk, akkor eleinte ugyan csak a korábbi példának megfelelően 990GB-ot használunk el belőle, de amikor lassan a többieket is lecseréljük szintén 2TB kapacitásúakra, akkor átméretezhetjük a RAID tömböt, és így kihasználhatjuk valamennyi tárterületét.

Érdemes azon is elgondolkodni, hogy egyáltalán ugyanolyan gyártótól származó, ugyanolyan típusú és ugyanakkor gyártott lemezeket vegyünk-e? Mi ezzel a gond? Az, hogy az ilyen “teljesen hasonló” lemezek nagy valószínűséggel hasonló időtartományban hibásodnak meg. És hát a RAID tömbök nem nagyon szeretik, ha közel azonos időben több lemez is meghibásodik. Így teljesen érthető, ha különböző (de természetesen megbízható) lemezekből építjük fel a tömböt. Ezek lehetnek akár különböző gyártótól származóak, vagy egy gyártótól különböző típusúak, vagy ha azonos típusúakat tudunk csak választani, legalább ne ugyanabból a gyártási sorozatból legyenek.

Egyes alaplapok (ilyen volt például az Asrock pár típusa) olyan szoftveres RAID esetén, ahol a teljes lemezt használtuk a RAID tömbben, és ezen a lemezen korábban GPT partíciót hoztunk létre, és azt nem töröltük megfelelően, törölhetik a RAID szuperblokkot a lemezről. (Linux-on a GPT partíciós táblát az sgdisk –zap paranccsal tudjuk törölni, míg a wipefs -a parancs minden partíciós és fájlrendszer megjelölést töröl. Ez utóbbi az adatokat nem bántja, de a lemezt üresnek fogják látni.)

A RAID vezérlő kártyák viszont jobban szeretik (némelyik csak ezt tudja), ha teljes lemezeket, partíciók nélkül csatlakoztatunk hozzájuk.

Mi ebben az írásban túlnyomórészt lemezekkel fogunk foglalkozni, hogy ne kelljen mindenhol a partíciókat létrehozni. Természetesen mindenki odaképzelhet a lemezek neve mögé egy 1-es számot, és akkor már partíciókról szólnak a példák.


RAID vagy biztonsági mentés?

Már a kérdés feltevése is értelmetlen! A két technikának más a célja! Egyik sem helyettesíti a másikat, és mindkettőnek fontos szerepe van az adatvédelemben.
A redundanciát biztosító RAID szintek ugyan megvédik az adatokat bizonyos számú lemezmeghibásodás ellen, de nem nyújtanak védelmet olyan eseményeknél, mint a lopás, természeti katasztrófák, vírusok vagy hibás emberi beavatkozások.
A RAID csupán az adatok aktuális állapotára nyújtanak biztonságot, de például egy korábbi állapotot nem lehet visszaállítani belőlük. A tárhelyszolgáltatók például nyújtanak olyan szolgáltatást, hogy a tárhelyünkön az adatainkat egy korábbi állapotnak megfelelően visszaállítják. Csupán RAID használatával ez nem lenne teljesíthető.
Kimondható, hogy a legjobb adatvédelmet akkor érjük el, ha mind a két technikát alkalmazzuk párhuzamosan.


RAID megbízhatóságának növelése

A RAID, mint adatvédelmi technológia csak akkor működik megbízhatóan, ha megfelelő körülményeket biztosítunk számára. Ilyenek például kritikus szerverek esetén a szünetmentes és redundáns tápegységek használata, a berendezések megfelelő hűtése, a rendszeres ellenőrzés és karbantartás valamint a megfelelő adatmentési és archiválási stratégia kidolgozás és következetes végrehajtása.

Hardveres RAID használata esetén érdemes meggondolni az úgynevezett BBU (Battery Backup Unit) használatát, amely nem más, mint egy kis litium-ion akkumulátor, amelyet a RAID vezérlőhöz csatlakoztathatunk. A RAID vezérlők a teljesítmény növelése érdekében a lemezekre írandó adatokat gyorstárazzák. Ha bármilyen oknál fogva hirtelen megszűnne a RAID vezérlő tápellátása, akkor ezek a gyorstárazott adatok elvesznének. A BBU segítségével azonban akár 72 órán keresztül is biztonságban vannak, és a tápellátás visszatérésével kiíródhatnak a lemezekre.

A cikkben szereplő példákban közvetlenül root felhasználóként bejelentkezve adjuk ki a parancsokat azért, hogy az állandó sudo használata ne vonja el a figyelmet magáról a parancsok használatáról. Felhívjuk a figyelmet viszont arra, hogy éles rendszerekben biztonsági szempontokból a sudo használata erősen ajánlott!

This will close in 20 seconds