Sõltumatute ketaste liiasmassiiv

**Sõltumatute ketaste liiasmassiiv** on mitmest kõvakettast või kõvaketta partitsioonist moodustatud loogiline plokkseade andmete salvestamiseks, kus samad andmed salvestatakse mitmele kõvakettale. 

Inglise keeles on sõltumatute ketaste liiasmassiiv *Redundant Array of Independent Disks* ehk **RAID**. Varem kasutati ka nime *Redundant Array of Inexpensive Disks* ehk odavate ketaste liiasmassiiv. Viimase termini võtsid kasutusele David A. Patterson, Garth A. Gibson ja Randy Katz California Ülikoolist Berkeleys 1987. aastal. 

Nüüdisajal on RAID üldtermin, mis hõlmab kõiki andmete säilitamise võimalusi arvutis, mis jagab ja kordab andmeid mitme kettaseadme vahel. Erinevaid arhitektuure eristatakse numbritega (näiteks RAID 0, RAID 1). Erineva konstruktsiooniga RAID-süsteemidel on kaks peamist eesmärki: suurendada andmete turvalisust ning suurendada lugemis- ja kirjutamiskiirust. Kui mitu füüsilist ketast on seadistatud kasutama RAID-tehnoloogiat, siis öeldakse, et nad on RAID-massiivis. Sellises massiivis hajutatakse andmed mitmele kettale, kuid operatsioonisüsteemi jaoks on kõik andmed ühel kettal. RAID-i kasutatakse mitmel otstarbel.

## Tavalised RAID-i tasemed

Erinevaid RAID-i arhitektuure nimetatakse RAID-i tasemeteks. Algselt oli vaid viis RAID taset, kuid aja jooksul on arenenud mitmed teised tasemed: üksteise sees asetsevad RAID tasemed ja mittestandardsed tasemed.

* **RAID 0** – andmed jaotatakse plokkidena (hargsalvestus). Suurendab andmeedastuskiirust, kuid RAID 0 massiivis ei ole veakindlust (seetõttu ei ole ta päris RAID). Sellegipoolest loetakse see RAID-i tasemeks, sest RAID 0 massiivis peab kontroller andmeid jaotama mitme ketta vahel. Kui üks ketas massiivis puruneb, kaob kogu massiiv ja seda ei ole võimalik parandada. Massiivi tõrkevõimalus kasvab iga sinna pandud kettaga, sest terve massiivi tõrkevõimalus on kõigi kõvaketaste purunemisvõimaluse summa. RAID 0 massiivis kirjutatakse andmeid plokkidena, mis on kindla suurusega (ploki suurus (*stripe size* ingl. k), mis on massiivi peamine parameeter, enamasti 16 KiB, 32 KiB ja 64 KiB). Kõigilt ketastelt loetakse ja kirjutatakse andmeid samaaegselt, seetõttu suureneb massiivi andmeedastuskiirus iga lisatud kettaga. RAID 0 ei toeta veatuvastust. Faili lugemisel hargsalvestusega massiivilt, loeb kontroller samaaegselt faili iga osa erinevatelt ketastelt, millel fail paikneb. Seejärel paneb kontroller faili osad enne RAM mällu kirjutamist õiges järjekorras kokku. Kui hargsalvestusega massiivis on rohkem kui kaks ketast, saab seda seadistada hargsalvestusega massiiviks koos paarsusega, mis on RAID 4. Selles massiivis jaotatakse andmed kõikidele ketastele välja arvatud ühele ketastest, mida kasutatakse veaparanduskoodi kirjutamiseks.

* **RAID 1** – peegeldamine teisele kettale, nn "peegelsalvestus". Andmed on kirjutatud identselt mitmele kettale (nn "peegeldatud kettad"). Kuigi enamik RAID 1 massiive tekitatakse kahest kettast, on võimalik ka lisada rohkem kettaid. RAID 1 massiiv võimaldab pärast ketta hävimist tööd jätkata, kuni on olemas vähemalt üks töötav ketas. Sobivate operatsioonisüsteemide olemasolul võib massiivi lugemiskiirus olla suurem kui ühe ketta lugemiskiirus, sest loetakse mitmelt kettalt korraga. Kirjutamiskiirus RAID 1 massiivis sõltub massiivis oleva kõige aeglasema kõvaketta kirjutamiskiirusest.

* **RAID 2** – andmed jaotatakse bittidena, kasutatakse veaparanduskoodi. Kõik kettad on sünkroonitud ja andmed jaotatakse ketaste vahel bittidena. Igale bitireale ketastes arvutatakse veaparanduskood (Hammingi kood ECC), mis salvestatakse massiivis ühele või mitmele kettale. Lugemisel saab ECC koodi alusel korrigeerida üksiku ketta vead.

* **RAID 3** – andmed jaotatakse baitidena plokkide kaupa, kasutatakse kindlat ketast, kuhu salvestatakse paarsusinformatsioon. Kõik kettad on sünkroonitud ja andmed jaotatakse baidi kaupa ketaste vahel. Paarsusinformatsioon arvutatakse kindlatele baitidele eraldi (XOR-tehtega) ja salvestatakse selleks eraldatud kõvakettale.

* **RAID 4** – andmed jaotatakse plokkidena, kasutatakse kindlat ketast, kuhu salvestatakse paarsusinfo. See on põhimõtteliselt sama, mis RAID 5 (vaata ll), kuid paarsusinfo kirjutatakse ainult ühele kindlale kettale. Kõik kettad tegutsevad üksteisest lahus, mistõttu võib lugeda/kirjutada kõikidelt ketastelt korraga. Kuna paarsuskontroll salvestatakse ainult ühele kettale, võib tekkida nn pudelikael, kus infot ei jõuta paarsuskontrolli jaoks mõeldud kettale enam piisava kiirusega kirjutada.

* **RAID 5** – andmed jaotatakse plokkidena, kontrollkood kirjutatakse kõikidele ketastele. Paarsuskontroll jaotatakse kõikide ketaste vahel (iga paarsusinfo kirjutatakse erinevale kettale). Ühe ketta purunemisel massiiv ei hävine ega mõjuta edasise töö tegemist (töö ei peatu, kuid on aeglasem, sest kettal olnud andmed arvutatakse), kuid rikki läinud ketas on vaja välja vahetada ja taastada. Teise ketta purunemisel hävinevad massiivis olevad andmed.

* **RAID 6** – andmed jaotatakse plokkideks, kontrollkood kirjutatakse topelt kasutades XOR-tehet ja Reed-Solomoni koodi. Saab jätkata tööd ka pärast kahe ketta purunemist. See tase muudab suured massiivid mõttekamaks, sest pakub suuremat tõrkekindlust. Samuti on purunenud ketta vahetamiseks rohkem aega, sest võib puruneda ka teine ketas, ilma et töö katkeks.

Järgmine tabel näitab RAID-i tasemete tähtsamaid parameetreid. Mahuefektiivsus on arv vahemikus 0–1 ja näitab, kui suurt hulka on võimalik maksimumist kasutada. Näiteks, kui on kolm ketast paigutatud RAID 3 massiivi, on nende maht 1-(1/3)=0,66. Kui iga sellise ketta mahtuvus on 250 GB, on nende maksimummaht 750 GB, millest RAID 3-s on kasutatav 0,66 ehk 66 %, 500 GB.

## Hübriid-RAID

Paljud andmeedastuskontrollerid lubavad kasutada hübriidseid RAID tasemeid ehk kasutada kahte või enamat RAID taset korraga. Massiivi elemendid võivad olla kettad, kuid ka RAID tasemed. Rohkem kui kahte RAID taset kasutatakse erilistel juhtudel.

Kuna ei ole rohkem kui 9 RAID taset, kirjeldatakse hübriid-RAID-i tasemed liites kaks kasutatavat taset kokku, pannes vahele „+“ märgi. Järjekord on ka oluline: kasutades RAID 1+0 taset, on kettad RAID 1 massiivis ja see on omakorda RAID 0 massiivis. Samuti on võimalik ka RAID 0+1. Tähtis on kindlaks määrata, mis on kõige peamine massiiv. Kui kasutatakse peamist RAID massiivi RAID 0, ei kirjutata enamasti „+“ märki kahe numbri vahele (näiteks RAID 10, RAID 50).

*RAID 0+1: peegeldatud RAID 0 plokid teisele kettale (minimaalselt neli ketast; paarisarv kettaid) garanteerib veakindluse ja parema andmeedastuskiiruse, kuid on keerulisema ehitusega.
:Peamine erinevus RAID 1+0 ja RAID 0+1 vahel on see, et RAID 0+1 puhul võib üks pool RAID 1 massiivist puruneda ilma, et see tööd häiriks.
*RAID 1+0: peegeldatud kettad on RAID 0 massiivis (minimaalsest kaks ketast, kuid kasutatakse tihti nelja, et kasutada ära suuremat andmevahetuskiirust; paarisarv kettaid) garanteerib veakindluse ja parema andmeedastuskiiruse, kuid on keerulisema ehitusega.
:Peamine erinevus RAID 0+1 ja RAID 1+0 vahel on see, et RAID 1+0 puhul on andmeedastuskiirus suurem, kui RAID 0+1 puhul. Kui RAID 1 kaotab ühe poole ketastest, on kogu massiiv hävinenud.
*RAID 5+1: peegeldatakse RAID 5 taset (mõned tootjad kirjeldavad seda kui RAID 53).

## RAID-i paarsus

Mitmed RAID-i tasemed kasutavad veatuvastusalgoritme, nn paarsuskontrolli. Paarsuskontroll on laialt kasutatav meetod, et vähendada vigade protsenti.

Paarsuskontroll seisneb põhimõttel "kas üks või teine, kuid mitte mõlemad ja kumbki." Näiteks:

:0 XOR 0 = 0
:0 XOR 1 = 1
:1 XOR 0 = 1
:1 XOR 1 = 0

XOR operatsioon on põhiline tehe, mida tehakse paarsuse arvutamisel. Seda kasutatakse nii andmete kaitseks, kui andmete taastamiseks.

Olgu RAID massiivis 6 kõvaketast (4 andmete jaoks, üks paarsuse jaoks ja üks käigult vahetatav), kus iga ketas võimaldab hoida ainult üht baiti.
Selline oleks algseis, kus ei ole midagi ketastele kirjutatud:

:Drive #1: -------- (andmed)
:Drive #2: -------- (andmed)
:Drive #3: -------- (andmed)
:Drive #4: -------- (andmed)
:Drive #5 -------- (käigult vahetatav)
:Drive #6 -------- (paarsus)

Nüüd kirjutame mõned bitid kõvaketastele, kus hoitakse andmeid:

:Drive #1: 00101010 (andmed)
:Drive #2: 10001110 (andmed)
:Drive #3: 11110111 (andmed)
:Drive #4: 10110101 (andmed)
:Drive #5 -------- (käigult vahetatav)
:Drive #6 -------- (paarsus)

Iga kord, kui ketastele kirjutatakse andmeid, arvutatakse paarsus. Selle RAID massiivi paarsuse arvutamine tehakse sellise tehtega:

:00101010 XOR 10001110 XOR 11110111 XOR 10110101 = 11100110

"11100110" on paarsus. Nüüd kirjutatakse paarsus selleks ette nähtud kettale:

:Drive #1: 00101010 (andmed)
:Drive #2: 10001110 (andmed)
:Drive #3: 11110111 (andmed)
:Drive #4: 10110101 (andmed)
:Drive #5: -------- (käigult vahetatav)
:Drive #6: 11100110 (paarsus)

Kui nüüd mingil põhjusel kaob üks ketastest ära, siis peab selle jaoks andmed uuesti arvutama kasutades XOR-tehet ja paarsust, kus selle ketta andmed, mis kadus, asendatakse paarsusega. 
Ütleme, et kolmas ketas on katki läinud. Siis näeb arvutus välja selline:

:00101010 XOR 10001110 XOR 11100110 XOR 10110101 = 11110111

Kui kolmas ketas on taastatud, saab massiiv edasi normaalselt töötada.

:Drive #1: 00101010 (andmed)
:Drive #2: 10001110 (andmed)
:Drive #3: -Katki- (andmed)
:Drive #4: 10110101 (andmed)
:Drive #5: 11110111 (käigult vahetatav)
:Drive #6: 11100110 (paarsus)

Tavaliselt vahetatakse rikki läinud ketas uuega ja andmed, mis olid vahepeal käigult vahetatavas, kopeeritakse sinna tagasi. Käigult vahetatav ketas taastab oma algse oleku ja massiiv näeb välja samasugune, nagu oli enne ketta kadumist:

:Drive #1: 00101010 (andmed)
:Drive #2: 10001110 (andmed)
:Drive #3: 11110111 (andmed)
:Drive #4: 10110101 (andmed)
:Drive #5: -------- (käigult vahetatav)
:Drive #6: 11100110 (paarsus)

Samamoodi saab andmeid taastada kõikides RAID-massiivides, mis kasutavad XOR-paarsuskontrolli, olenemata ketaste hulgast ja suurusest.

## Andmete varundamine

RAID-i süsteem, mida kasutatakse põhisüsteemi kettana, ei ole mõeldud asendama andmete varundamist. Paaris paigutus loob andmete varundamise sarnase süsteemi, mis on mõeldud ära hoidma andmete kadumist füüsiliste kahjustuste või vigade puhul üksikutel draiveritel. Paljude teiste funktsioonide andmete varundamine ei ole võimalik ainult antud RAID-i ridade puhul üksinda. Kõige tähelepanuväärsem on võime taastada eelmisi andmete versioone, mida on vaja kaitsta tarkvara vigade eest, mida põhjustab mittesoovitud andmete kirjutamine kettale.

## Rakendused

***Tarkvarapõhine** RAID – rakendusi pakuvad mitu operatsioonisüsteemi. Tavaliselt on nad kas RAID 0 või RAID 1s.
***Riistvarapõhine** RAID – riistvarapõhine RAID kasutab erinevaid patenteeritud ketaste asetusi, nii et pole võimalik ühendada erinevate firmade ühendusi. Nad ei kasuta protsessorit ja BIOS suudab neilt alglaadida, parem integratsioon seadme draiveritega võib pakkuda paremat käitumist vigadega.
***Draiverite põhine** RAID – kasutatakse väikseid kiipe, millel on vajalikud draiverid.
***Võrgupõhine** RAID – pole päris RAID, kuid kasutatakse andmete hoidmiseks üle võrgu.

## Probleemid RAIDI-ga

RAID kaitseb kasutaja andmeid küll kõvaketta rikke puhul, kuid need andmed on nähtavad operaatorile, tarkvarale, riistvarale ja hävitavatele viirustele. Mitmed uuringud näitavad, et põhilised vead tekivad operaatorite süül. Näiteks serverioperaator asendab vale ketta vigasesse RAID-i ja tõkestab süsteemi protsessi. Enamik hästi väljatöötatud süsteeme hõlmab eraldi varundamissüsteemi, mis hoiab andmete koopiaid. 

## Viited

## Kirjandus
* Indrek Zolk *Riistvara ja tehniline dokumentatsioon* Tartu 2008 ISBN 9789949180905

## Välislingid

* Tutorial on RAID 6 & performance implications
* Learning about RAID Tutorial, Levels 0, 1, 5, 10, and 50
* RAID Open Directory Project veebilehel
* Admin's RAID Data Recovery Guide, inglise keeles