RAID er en fellesbetegnelse på ulike metoder (innen RAID kalt nivåer) for samkjøring av lagringsenheter for å oppnå økt ytelse, dataintegritet, større kapasitet og tilgjengelighet. Noen nivåer av RAID tilbyr alle disse egenskapene, mens andre kun tilbyr noen av de. RAID er opprinnelig en forkortelse for Redundant Array of Inexpensive Disks, men har i den senere tid også blitt presentert som Redundant Array of Independent Disks. RAID er svært vanlig i bruk på NAS-enheter (Nettverkstilsuttet datalager).

Faktaboks

Også kjent som
fork. for eng. Redundant Array of Independent Disks

RAID tilbyr et virtuelt lagringsområde, også kalt logisk disk, som som i praksis består av flere fysiske disker. Dette lagringsområdet vil for brukeren fremstå som en vanlig disk i maskinen. Det er RAID-kontrolleren som håndterer de fysiske diskene og hvordan data skal skrives eller leses. Samlet lagringskapasitet i forhold til lagring på én enkelt disk vil bli større, men som regel ikke like stor som summen av lagringskapasitet på diskene som inngår i RAID-systemet. RAID ble utviklet for magnetiske disker, men metodene er generelt anvendbare for alle lagringsenheter.

Nivåer med redundant lagring gir høyere lagringssikkerhet mot tap og utilsiktet endring av data enn det lagring på én disk gjør. Skriving tar imidlertid lengre tid fordi data må skrives på to disker. Mer skrivearbeid er som regel lett å akseptere fordi data vanligvis leses mange flere ganger enn de oppdateres eller skrives.

Beskrivelse av forskjellige RAID-nivåer

Det beskrives i utgangspunktet 7 ulike nivåer nummerert fra 0 til 6. I praksis er RAID 1, RAID 3 og RAID 5 mest brukt. Enkelte RAID-nivåer kan også kombineres, og uttrykkes da med + eller som et tosifret nivå. Kombineres 1 og 0 vil dette uttrykkes som RAID 1+0 eller RAID 10.

I den videre beskrivelsen av nivåene er antall disker i et RAID-oppsett uttrykt ved \( n \). Data på hver disk er organisert i like store blokker. En blokk er et antall byte som skrives eller leses i en operasjon. Størrelsen på en blokk er normalt en potens av 2, for eksempel \(2^{12}=4096\) byte. Data kan plasseres på diskene i forskjellige nivåer (metoder). Egenskapene blir forskjellig etter hvilket nivå som velges.

RAID 0

RAID-nivå 0 er en teknikk for å kombinere flere fysiske disker til en større virtuell lagringsenhet og for å øke hastighetene. Nivået tilbyr ikke redundans. I den opprinnelige standarden var dette nivået ikke med, og ble derfor nummerert med 0 ettersom det er et enklere nivå enn det første nivået som var beskrevet.

I praksis er det slik at blokkene i samme fil skrives skrives fortløpende på diskene i gruppen; blokk 0 på disk 0, blokk 1 på disk 1, ... , blokk \(n \)på disk \( n \), blokk \(n+1\) på disk 0, osv. Dette omtales som stripet lagring eller stripet sett. Samlet lese- og skrivehastighet blir større ved at man kan lese (eventuelt skrive) flere blokker av filen samtidig. Lagringssikkerheten blir derimot mindre; det er større sannsynlighet for at én av \(n\)disker feiler enn at én disk alene feiler.

\( \begin{array}{|r|c|c|c|c|c|} \hline \texttt{Disker} & \texttt{D}0 &\texttt{D}1 & \texttt{D}2 & \texttt{D}3 & \texttt{D}4 \\ \hline \texttt{Stripe nr.}0&0&1&2&3&4 \\ \hline 1&5&6&7&8&9 \\ \hline 2&10&11&12&13&14 \\ \hline {\cdots }&&&&& \\ \hline \end{array} \)

Blokkene i en stripe har samme blokkadresse på sin disk. Tallene i kolonnene under hver disk angir logisk blokknummer i den lagrede filen.

RAID 1

Data skrives parallelt på to disker eller diskgrupper, og de to og to disker i oppsettet vil ha det samme innholdet. RAID 1 kalles også speiling av data. Skrivebelastningen blir dobbelt så stor ved at to disker skal skrives, men tiden det tar øker ikke mye fordi diskene skrives samtidig i parallell. Hvis en disk feiler er data tilgjengelig på den andre, men den ødelagte disken må erstattes med en ny disk, og data må kopieres over fra den operative disken. Tiden fra feil oppstår til en ny kopi er operativ kalles et sårbarhetsvindu. Data vil gå tapt hvis den gjenværende kopien også feiler før den nye kopidisken er etablert. RAID 1 krever dobbel fysisk lagringsplass i forhold til hva som blir tilgjengelig i den logiske disken.

RAID 2

Hver byte splittes i 8 bit som skrives til hver sin disk. I tillegg beregnes 3 bit for feildetektering og korreksjon som også skrives til sine respektive tre disker (Hammingkode-parietet). Dette er en kopi av hvordan arbeidslager er bygget opp, og er ikke en praktisk måte for å lagre data. Dette RAID-nivået er sjelden implementert.

RAID 3

En blokk blir fordelt over \(n-1\) disker, der hver disk lagrer et helt antall delblokker som inngår i blokken. Delblokkene er like store. Den siste disken, disk \(n\), inneholder paritetsdata for de foranstående delblokkene, slik at man oppnår redundans. Når en disk faller ut må en skrive en erstatningsdisk. Data som skal skrives fås ved å lese de gjenværende disker og så benytte paritetsdelblokken.

Paritetsdelblokken beregnes slik: \( b_p = b_0 \oplus b_1 \oplus \cdots \oplus b_{n-2} \). Paritetsdelblokken gjør det mulig å gjenskape en ødelagt delblokk ved å gjøre XOR (symbol: \( \oplus \)) på de gjenværende delblokkene i samme blokk.

Skriving tar lengre tid enn sammenlignet med skriving til én disk. Alle delblokkene må være skrevet for at blokken skal bli ferdigskrevet. Lesing tar på same måte lengre tid enn om blokken var på en disk.

Lagringsbehovet er \( 1+1/(n -1)\) del av nettovolumet.

RAID 4

Raid 4 deler ikke opp blokka. I stedet lagres blokkene forløpende innen hver stripe som i RAID 0, men forskjellen er at siste disken i stripen inneholder paritetsdata for blokkene foran i stripen.

\( \begin{array}{|r|c|c|c|c|c|} \hline & \texttt{D}0 & \texttt{D}1 & \texttt{D}2 & \texttt{D}3 & \texttt{DP} \\ \hline \texttt{Stripe nr.}0&0&1&2&3&P \\ \hline 1&4&5&6&7&P \\ \hline 2&8&9&10&11&P \\ \hline {\cdots } &&&&& \\ \hline \end{array} \)

RAID 4 er effektiv for lesing, men skriving blir noe mer omstendelig. For å beregne nytt innhold i paritetsblokken må en først fjerne paritetsbidraget fra gammelt innhold i blokken, deretter må en legge til bidraget fra det nye innholdet. Prosessen med å skrive nytt innhold i en blokk blir:

\( \begin{array}{l @\texttt{ } l} \texttt{les } (b_{gammel})& \\ \texttt{les } (P) & \\ P = P \oplus b_{gammel} \oplus b_{ny} & \\ \texttt{skriv } (P)& \\ \texttt{skriv } (b_{ny}) & \\ \end {array} \)

Begge berørte blokker må både leses og skrives.

Hvis en disk feiler kan innholdet på den gjenskapes ved å XOR-e de gjenværende diskene, stripe for stripe.

Ved mye oppdatering vil paritetsdisken bli overbelastet, den må leses og skrives for hver oppdatering av de andre blokkene i samme stripe. I perioder med bare lesing blir derimot ikke paritetsdisken brukt, forutsatt at alle disker er intakte. RAID-nivå 5 gir jevnere belastning.

RAID 5

RAID 5 fungere som RAID 4, men med den forskjell at paritetsblokkene er fordelt over alle diskene. Dermed får også alle diskene den samme belastningen under normale driftsforhold. Et mønster for å spre paritetsblokkene kan se slik ut:

\( \begin{array}{|r|c|c|c|c|c|} \hline & \texttt{D}0 &\texttt{D}1 & \texttt{D}2 & \texttt{D}3 & \texttt{D}4 \\ \hline \texttt{Stripe nr.} 0&\mathbf{P}&0&1&2&3 \\ \hline 1&4&\mathbf{P}&5&6&7 \\ \hline 2&8&9&\mathbf{P}&10&11 \\ \hline 3&12&13&14&\mathbf{P}&15 \\ \hline 4&16&17&18&19&\mathbf{P} \\ \hline 5&\mathbf{P}&20&21&22&23 \\ \hline \end{array} \)

RAID 6

I RAID 6 benyttes to disker til paritetsblokker, slik at også to disker kan feile uten at data går tapt. Paritetsblokkene er distribuert på ulike disker, slik som ved RAID 5. En fordel med RAID 6 fremfor RAID 5 er at man unngår sårbarhetsvinduet når en disk feiler. Spesielt ved store fysiske disker som det tar lang tid å gjenskape er det viktig å unngå dette sårbarhetsvinduet.

Sårbarhetsvindu

For å redusere lengden på sårbarhetsvinduet kan en ha en montert, men ubrukt disk i RAID-kabinettet. Ved diskfeil kan systemet umiddelbart starte rekonstruksjon av innholdet på den havarerte disken og skrive det til den ubrukte disken.

Eksempel på gjenoppretting

I figuren nedenfor er det beregnet pariteten (partallsparitetsbit) for data i fire blokker: D0 til D3. Resultatet er vist i den femte blokken: DP.

\(\begin{array}{ccccc cccc} \texttt{D0}& \oplus& \texttt{D1}& \oplus& \texttt{D2}& \oplus & \texttt{D3}& = & \texttt{DP}\\ {\begin{array}{|c|} \hline 1\\1\\0\\0\\1 \\ \hline \end{array}}& \oplus & {\begin{array}{|c|} \hline 1\\0\\0\\1\\1 \\ \hline \end{array}}& \oplus & {\begin{array}{|c|} \hline 1\\1\\0\\0\\0 \\ \hline \end{array}}& \oplus & {\begin{array}{|c|} \hline 1\\1\\1\\0\\0 \\ \hline \end{array}}& = & {\begin{array}{|c|} \hline 0\\1\\1\\1\\0 \\ \hline \end{array}}\end{array}\)

En kan slette innholdet i en vilkårlig blokk og det kan gjenskapes ved å XOR-e innholdet av de gjenstående blokkene og paritetsblokken. Tas det utgangspunkt i at blokk D3 ble borte/skadet, vil denne blokken kunne gjenskapes ved:

\(\begin{array}{ccccc cccc} \texttt{D0}& \oplus& \texttt{D1}& \oplus& \texttt{D2}& \oplus & \texttt{DP}& = & \texttt{D3}\\ {\begin{array}{|c|} \hline 1\\1\\0\\0\\1 \\ \hline \end{array}}& \oplus & {\begin{array}{|c|} \hline 1\\0\\0\\1\\1 \\ \hline \end{array}}& \oplus & {\begin{array}{|c|} \hline 1\\1\\0\\0\\0 \\ \hline \end{array}}& \oplus & {\begin{array}{|c|} \hline 0\\1\\1\\1\\0 \\ \hline \end{array}}& = & {\begin{array}{|c|} \hline 1\\1\\1\\0\\0 \\ \hline \end{array}}\end{array}\)

Les mer i Store norske leksikon

Litteratur

  • David A. Patterson, Garth Gibson, og Randy H. Katz. «A Case for Redundant Arrays of Inexpensive Disks (RAID)» i H. Boral og P. Larson (red). Proc. 1988 ACM SIGMOD Intl. Conf. on Management of Data (SIGMOD '88), New York: The Association for Computing Machinery, Inc., 1988, side 109-116.

Kommentarer

Kommentarer til artikkelen blir synlig for alle. Ikke skriv inn sensitive opplysninger, for eksempel helseopplysninger. Fagansvarlig eller redaktør svarer når de kan. Det kan ta tid før du får svar.

Du må være logget inn for å kommentere.

eller registrer deg