# Redundant array of independent disks

RAID, oorspronkelijk een afkorting voor redundant array of inexpensive disks (Engels: redundante opstelling van goedkope (harde) schijven) en tegenwoordig voor redundant array of independent disks (Engels: redundante opstelling van onafhankelijke schijven), is een dataopslagtechnologie, waarbij meerdere fysieke harde schijven gecombineerd worden tot één of meer logische virtuele opslageenheden. Dit met als doel de veiligheid, snelheid en/of capaciteit te vergroten. RAID werd gelanceerd als een goedkopere alternatief op de zeer dure enkelvoudige harde schijf in de mainframecomputer van weleer.
Met RAID worden gegevens over de schijven verdeeld op verschillende RAID-niveaus, afhankelijk of de fouttolerantie, doorvoersnelheid of capaciteit verhoogd moet worden. De verschillende datadistributieschema's worden aangeduid met de term RAID, gevolgd door een nummer (0 t/m 6). Alle RAID-niveaus groter dan 0 voorzien in een vorm van fouttolerantie, waarbij het falen van een volledige schijf kan worden opgevangen door de overige schijven.
RAID-schijven komen typisch voor in NAS-opstellingen.

## Geschiedenis

De term "RAID" werd in 1987 bedacht door David Patterson, Garth Gibson en Randy Katz van de Universiteit van Californië – Berkeley, zij beweerden dat de beste harde schijven voor mainframecomputers qua snelheid en betrouwbaarheid verslagen konden worden door een array van goedkope harde schijven die primair ontworpen waren voor de pc-markt. Ondanks dat de kans op falen evenredig toeneemt met het aantal schijven, door de schijven te configureren in een redundante array, de betrouwbaarheid beter was dan een grote enkelvoudige schijf.

## Werking fouttolerantie

De meeste RAID-niveaus gebruiken een fouttolerantieschema op basis van een zogenaamd pariteitsbit. Deze methode wordt veelvuldig toegepast binnen de ICT om in fouttolerantie te voorzien. In veel gevallen wordt de eenvoudige XOR-functie toegepast, met uitzondering van RAID 6, waarbij twee verschillende soorten pariteit berekeningen worden gebruikt. Dit is nodig omdat bij dit RAID-niveau twee schijven mogen uitvallen.
RAID kan ook databeveiliging voor SSD (solid state disk) voorzien, zonder dat het nodig is gehele array op te bouwen met de kostbare SSD's. Een voorbeeld is dat een snelle SSD gespiegeld wordt met een mechanische schijf. Voor dit soort configuraties zijn speciale diskcontrollers beschikbaar die voor alle leesopdrachten uitsluitend de snelle SSD adresseren, waardoor een substantiële snelheidswinst behaald wordt, ondanks de aanwezigheid van de relatief trage mechanische schijf in de array.

## RAID-niveaus

| RAID- niveau | Minimaal aantal schijven | Voordelen | Nadelen |
| 0 | 2 | Snelste doorvoer van data voor alle data, eenvoudige opzet, eenvoudig in te voeren | Geen foutcorrectie: bij een defect op een van de schijven gaat de data op alle schijven verloren |
| 1 | 2 | Volledige foutcorrectie, eenvoudige opzet, goede leesprestaties | Relatief duur |
| 2 | 3 | Foutcorrectie, ook voor schijven zonder ingebouwd correctiesysteem | Geen praktische toepassing |
| 3 | 3 | Snelle doorvoer voor aaneengesloten data, efficiënte foutcorrectie | Kan niet gelijktijdig schrijven en lezen |
| 4 | 3 | Goede leesprestaties, efficiënte foutcorrectie | Schrijfsnelheid vanwege pariteitsberekeningen afhankelijk van de gebruikte processor of controller |
| 5 | 3 | Goede leesprestaties, efficiënte foutcorrectie | Schrijfsnelheid vanwege pariteitsberekeningen afhankelijk van de gebruikte processor of controller |
| 6 | 4 | Robuuste foutcorrectie, tolereert twee falende schijven. Array is ook fouttolerant tijdens de reconstructie van één defecte en vervangen schijf. | Nog rekenintensiever dan RAID-4 en -5. Schrijfsnelheid vanwege pariteitsberekeningen afhankelijk van de gebruikte processor of controller |

### RAID-0

* RAID-0
* RAID-1
* RAID-2
* RAID-3
* RAID-4
* RAID-5
* RAID-6
* RAID-10
RAID-0 (ook bekend als striping); een aantal schijven wordt in een array geplaatst en benaderd als één grote schijf. De gegevens worden in kleine (enige tientallen kilobyte) blokken (ook wel 'stripes' genoemd) verdeeld en op de verschillende schijven weggeschreven. Hiermee wordt een snelheidsverhoging bereikt omdat meerdere schijven tegelijkertijd gegevens kunnen ophalen of wegschrijven. Theoretisch zou de snelheidsverhoging recht evenredig kunnen zijn met het aantal schijven, in de praktijk wordt dit echter meestal niet bereikt.
RAID-0 biedt geen foutcorrectie. Als één schijf uitvalt dan zijn alle gegevens van de hele array verloren.
De (qua capaciteit) kleinste schijf in de array bepaalt de omvang van alle RAID-systemen. Als bijvoorbeeld een 50GB-, 100GB- en een 250GB-schijf in een RAID-0-array worden gezet, dan zal de controller aan de pc een schijf aanbieden van 150 GB (50 GB × 3). Hierbij gaat bij veel controllers dus effectief 250 GB verloren. Sommige controllers kunnen echter de overblijvende ruimte nog gebruiken voor een andere RAID-set.
Software RAID-0 wordt ook wel aangeduid als Volume Sets. Hierbij is echter niet altijd sprake van striping op blokniveau, maar worden mappen en de daarin aanwezige bestanden door het filesysteem op die schijf binnen de Volume Set geplaatst die op dat moment de meeste vrije ruimte heeft.

### RAID-1

De eerste fouttolerante implementatie van RAID wordt RAID-1 genoemd en is het spiegelen van twee schijven, in het Engels ‘disk mirroring’ genoemd. Hierbij worden alle gewijzigde datablokken van de ene schijf direct gekopieerd naar een tweede schijf, waardoor een 1:1 kopie ontstaat. Omdat de data op blokniveau gekopieerd wordt zijn beide schijven te gebruiken als boot-schijf (een schijf waarmee het systeem kan worden opgestart). De eenvoudigste manier van ‘disk mirroring’ betreft twee schijven aangesloten op één diskcontroller. Hiermee is het falen van een schijf geborgd, maar niet het falen van de controller. Naast -mirroring kent men ook disk duplexing, hierbij hebben beide schijven een eigen controller. Dit is niet alleen robuuster, maar ook sneller omdat beide schijven gelijktijdig geadresseerd kunnen worden.

### RAID-2

RAID-2 bestaat uit het verdelen van bits over meerdere schijven, afgesloten met de zogenaamde hamming-code. Alle schijven draaien synchroon en de data worden dusdanig gedistribueerd over de schijven dat elke opeenvolgende bit op een andere schijf weggeschreven wordt. Vervolgens wordt de hamming-codepariteit berekend over de corresponderende bits en weggeschreven op ten minste één toegewijde pariteitschijf. Dit RAID-niveau is alleen van historisch belang omdat het sinds 2014 geen commerciële toepassing meer kent.

### RAID-3

RAID-3 bestaat uit het verdelen van bytes over meerdere schijven, waarbij de keten wordt afgesloten met een pariteitsbyte. Alle schijven draaien gesynchroniseerd en data worden dusdanig verdeeld dat elke byte op een verschillende schijf geschreven wordt. Pariteit wordt berekend over de corresponderende bytes en geschreven op een toegewijde pariteitsschijf. RAID-3 wordt in de praktijk nog maar mondjesmaat gebruikt.

### RAID-4

RAID-4 bestaat uit een verdeling over de schijven op blokniveau met een toegewijde pariteitschijf. Dit RAID-niveau werd vroeger gebruikt door NetApp, maar is tegenwoordig vervangen door een eigen variant van RAID-6 met twee pariteitschijven, RAID-DP genoemd.

### RAID-5

RAID-5 bestaat uit een verdeling over de schijven op blokniveau maar zonder een toegewijde pariteitschijf. De pariteitsblokken worden bij RAID-5 gedistribueerd over alle schijven in de array. Het voordeel hierbij is dat er geen overmatige belasting optreedt van een separate pariteitdisk, die bij elke schrijfopdracht op een van de andere schijven ook beschreven moet worden. Door nu het pariteitsblok ook te verdelen over alle schijven, worden de schijven gelijkwaardig belast.
Voorbeeld van RAID-5-opslag over 4 schijven:
| | schijf1 | schijf2 | schijf3 | schijf4 |
| stripe 1-4: | Data01 | Data02 | Data03 | Par 01,02,03 |
| stripe 5-8: | Data04 | Data05 | Par 04,05,06 | Data06 |
| stripe 9-12: | Data07 | Par 07,08,09 | Data08 | Data09 |
| stripe 13-16: | Par 10,11,12 | Data10 | Data11 | Data12 |
| stripe 17-20: | Data13 | Data14 | Data15 | Par 13,14,15 |
| stripe 21-n: | ... | ... | ... | ... |

#### Voorbeeld pariteitsberekening

De pariteitsberekening werkt vrij eenvoudig, alle te controleren bits van een set worden via een XOR-functie met elkaar gecombineerd. De XOR-functie geeft een 1 bij een oneven aantal enen en een 0 bij een even aantal enen. De berekening is dan als volgt:
Merk op dat het aantal eenen in elke kolom een even aantal is. Op deze wijze is het eenvoudig verloren informatie te reconstrueren.

### RAID-6

RAID 6 is te vergelijken met RAID-5 maar gebruikt twee pariteitsblokken die verdeeld worden over alle schijven. De effectief bruikbare ruimte neemt dan ook met twee schijven af. De pariteitsberekening is veel complexer dan voor RAID-5, en is alleen op een beperkt aantal RAID-controllers beschikbaar. Hiermee kunnen dan wel twee willekeurige schijven falen.

### RAID-DP

RAID-DP is een uitbreiding op RAID 4 met een tweede pariteitsdisk. Hierdoor is net zoals bij RAID-6 een reconstructie van de array mogelijk bij twee falende schijven. Het verschil echter met RAID-6 is dat er met toegewijde pariteitsschijven wordt gewerkt in plaats van het distribueren van de pariteitsblokken over het gehele array. De toegewijde pariteitsschijven bij RAID-DP geven als voordeel dat bij het uitbreiden van de array niet het gehele array herbeschreven hoeft te worden en dus sneller en veiliger is. Het argument dat de toegewijde pariteitsschijven zwaarder belast worden is bij RAID-DP niet van toepassing, omdat de schijven in de array synchroon draaien en de belasting daarmee redelijk evenredig is.
Ten behoeve van reconstructie bij RAID-DP is een speciaal algoritme ontwikkeld dat navolgend beknopt wordt besproken aan de hand van de figuur hierboven. Er zijn twee voorwaarden voor RAID-DP om te herstellen van dubbele schijfdefecten: de eerste voorwaarde is dat elke diagonale pariteitsstreep één en slechts één schijf mist, maar elke diagonaal een andere schijf mist. De andere voorwaarde is dat er één diagonale streep is, waarop geen pariteit wordt gegenereerd op de tweede diagonale pariteitsschijf. In het figuur bestaat deze diagonale streep uit de witte blokken. In het bovenstaande reconstructie-voorbeeld zal het duidelijk zijn dat het weglaten van de ene diagonale streep geen invloed heeft op het vermogen van RAID-DP om alle gegevens in een dubbele schijfstoring te herstellen.

## Combinaties

RAID-configuraties kunnen ook in combinaties voorkomen, waarmee sommige van de nadelen van specifieke oplossingen verminderd worden. Zo kunnen RAID-0 en 1 gecombineerd worden tot RAID-10 (zie afbeelding), waarmee met minimaal 4 schijven de snelheid van RAID-0 en de betrouwbaarheid van RAID-1 gecombineerd worden. Ook RAID 5 wordt gecombineerd met RAID-0 in RAID-50 voor extra snelheid, of met RAID-1 in RAID-51 voor extra betrouwbaarheid.

### Hybride RAID

Sommige systemen ondersteunen ook hybride RAID-configuraties, waarbij de ruimte op schijven met verschillende groottes optimaal benut kan worden. Een combinatie van drie schijven van 2 TB en twee van 3 TB kan op deze manier voor de eerste 2 TB van elke schijf een RAID-5-set van 5 schijven vormen, de twee resterende stukken van 1 TB op de grotere schijven kunnen samen als RAID-1-set nog een TB extra opleveren.
| Schijfnr. | 1 | 2 | 3 | 4 | 5 | Constructie | Netto |
| Totale capaciteit | 2 TB | 2 TB | 2 TB | 3 TB | 3 TB | JBOD | 12 TB |
| Partitie 1 | 2 TB | 2 TB | 2 TB | 2 TB | 2 TB | 5 × 2 TB in RAID-5 | 8 TB |
| Partitie 2 | - | - | - | 1 TB | 1 TB | 2 × 1 TB in RAID-1 | 1 TB |

## Speciale functies
### Hot-spare

Veel RAID-controllers kunnen met een speciaal hiervoor geïnstalleerde "hot-spare"-schijf meteen beginnen met het reconstrueren van gegevens zodra een schijf uitvalt. Hiermee wordt de periode dat het systeem kwetsbaar is voor uitval van een tweede schijf zo kort mogelijk gehouden.

### Realtime migratie en uitbreiding

Sommige RAID-controllers kunnen ook zonder verlies van gegevens en soms zelfs zonder te hoeven stoppen, migreren van het ene naar het andere RAID-niveau. Stel er is een RAID-controller met twee schijven in RAID-1, door het bijplaatsen van een extra schijf kan dan de effectieve capaciteit verdubbeld worden door er een RAID-5 set van te maken. Een bestaande RAID-5 set kan door bijplaatsen van extra schijven ook nog eens uitgebreid worden.

## Externe link

* RAID-uitleg met afbeeldingen