nedstat_alt

Mirror of The BalusC Server

 

RAID >

Introductie

Goedkoop of Onafhankelijk?

De term 'RAID', Redundant Arrays of Inexpensive Disks, vindt haar oorsprong in de Universiteit van Californië op Berkeley. Op 1987 bogen een aantal onderzoekers zich over een goedkope oplossing voor een snelle doch veilige opslagsysteem. In die tijd waren grote, snelle en zeer betrouwbare harde schijven relatief duur, je mag gerust spreken van prijsverschillen in tienvoud. Het idee achter RAID is om een aantal goedkope kleine schijven samen te laten werken als één grote schijf. Al die kleine schijven bij elkaar waren toentertijd goedkoper dan één grote schijf van dezelfde capaciteit.

Preventie dataverlies: wanneer je meerdere schijven bij elkaar als één schijf laat werken, wordt de (gezamelijke) kans groter dat een schijf overlijdt en dat daarmee gepaard dataverlies optreedt. De betrouwbaarheid van zulke schijfconfiguraties werd dan verhoogd met behulp van RAID.

Verschillende configuraties: in de loop van de tijd waren er steeds verschillende RAID configuraties onderzocht en ontwikkeld. Elke RAID configuratie heeft zo haar eigen voor- en nadelen, welke kunnen worden afgewogen tegen de eisen en doelstellingen van het opslagsysteem. Bijvoorbeeld Databaseservers hebben naast een zo optimaal mogelijk benut opslagcapaciteit een grotere eis met betrekking tot leessnelheid dan tot schrijfsnelheid, in dit geval is RAID5 een geschikte oplossing. Videobewerking daarentegen vereist naast een snelle leessnelheid ook nog een snelle schrijfsnelheid, hiervoor is RAID 01 of 10 (ook wel 0+1 respectievelijk 1+0 genoemd) uitermate geschikt.

Van goedkoop naar onafhankelijk: eind de jaren negentig waren de prijsverschillen tussen de kleine en grote harde schijven steeds kleiner; tegenwoordig is het zelfs zo dat bijvoorbeeld één 40GB harde schijf goedkoper is dan twee 20GB harde schijven. Mede daardoor was de term Inexpensive (goedkoop) in RAID een beetje misplaatst, deze werd langzamerhand dan ook gewijzigd in Independent (onafhankelijk).

Single of Multiple?

Er zijn veel verschillende manieren om een RAID array (samenwerkende harde schijven) te configureren, hieronder vallen de volgende methoden: mirroring (kopieren), striping (verdelen) en parity check (berekening van de pariteit bit). De verschillende manieren om een array te maken worden levels genoemd. De levels worden weer onderverdeeld in single en multiple levels, afhankelijk van de gebruikte RAID methode. Zo is de single level RAID 0 louter striping en is de multiple level RAID 15 een combinatie van mirroring (1) en parity check (5).

Twee mogelijkheden: de multiple levels worden dus aangeduid door de twee single levels samen te voegen, zoals dat de multiple level RAID 10 een combinatie is van de single levels RAID 0 en RAID 1. Maar de multiple level RAID 01 is óók een combinatie van dezelfde single levels. Het verschil zit 'em in de configuratie:

RAID 01  -  verdeel acht harde schijven in twee RAID 0 arrays
   -  nu heb je twee virtuele harde schijven
   -  laat de twee virtuele harde schijven in RAID 1 lopen
RAID 10  -  verdeel acht harde schijven in vier RAID 1 arrays
   -  nu heb je vier virtuele harde schijven
   -  laat de vier virtuele harde schijven in RAID 0 lopen

Hardware of Software?

Het verschil is simpel: hardwarematige RAID controllers hebben een eigen processor en vaak ook eigen cache geheugen. De softwarematige controllers maken gebruik van de processor en het geheugen op het moederbord. Hardwarematige controllers zijn over het algemeen sneller, maar ook duurder.

HardwareRAID: dankzij een gespecialiseerde I/O processor zijn praktisch alle RAID levels met pariteitsberekeningen (RAID3, RAID5, RAID15, etc) sneller op hardwarematige controllers dan op softwarematige controllers. Bij RAID0, RAID1, RAID10 en JBOD is een hardwarematige controller in principe geldverspilling. De snelheidsverschil is haast nihil en soms zelfs in het voordeel van de softwarematige oplossing.

SoftwareRAID: de gangbare Promise en Highpoint chipjes/kaartjes (FT100/FT133/HPT370/HPT374/etc) zijn allemaal softwarematige RAID controllers. Het maakt nog steeds misbruik van de CPU en het geheugen op het moederbord. De echte hardwarematige RAID controllers maken allemaal gebruik van een éigen CPU en éigen geheugenruimte (nooit afgevraagd waarom die 'zware' RAID controllers zoals Areca in verhouding erg duur zijn? ;) ).

Twee soorten SoftwareRAID: je hebt wel twee soorten softwarematige RAID. De ene wordt gestuurd via de BIOS/drivers, zoals bij de welbekende Promise en Highpoint controllers (ook wel firmware RAID genoemd), en de andere wordt louter via gespecialiseerde software gestuurd, zoals die is geïntegreerd in Win2K/XP. Met het eerste heb je het voordeel dat je van elk denkbaar RAID array kunt booten, bij de tweede kun je alleen booten van een mirror, terwijl de striped array's pas benaderbaar zijn wanneer het hele besturingssysteem is opgestart.

Prestatieverschillen: de prestaties tussen deze twee vormen van software RAID verschillen nauwelijks. In ieder geval is de tweede vorm over het algemeen beter schaalbaar. Oftewel een extra schijf levert een snelheidstoename op wat haast gelijk is aan de snelheid van desbetreffende schijf.

MultiRAID: een ander groot voordeel van OS-based software RAID onder Win2K/XP is dat je meerdere RAID levels door elkaar heen kunt gebruiken en dan wel RAID0, RAID1 en RAID5, al dan niet met behulp van een kleine Hack. Zie ook de onderste screenshot op de rechterkolom en Tweaks | Win2K/XP RAID Hack.

Spanning: RAID of niet?

Velen denken dat Spanning ook onder RAID valt, maar het tegendeel is waar. Spanning is zo ongeveer het tegengestelde van meerdere partities op één harde schijf: één partitie bestaande uit meerdere harde schijven. De manier van het lezen en schrijven van de data blijft onveranderd; er treedt dus geen mirroring, striping en parity check op. Wanneer de eerste harde schijf is volgeschreven, dan wordt er simpelweg aan de volgende harde schijf begonnen en ga zo voorts. Spanning wordt overigens ook weleens JBOD genoemd: Just a Bunch Of Disks.

Kan ik een single HDD aan een RAID controller hangen?

Ja, dat kan. Gewoon even de HDD aan de controller hangen. Bij sommige RAID controllers (bijv. Highpoint) hoef je verder niks te doen, terwijl je bij andere RAID controllers (bijv. oudere Promise exemplaren) eerst een array moet toewijzen eer je van de HDD gebruik kan maken. Duik hiertoe de RAID BIOS in, selecteer de harddisk en maak een single-disk RAID0/1/whatever array aan.

Jumper of BIOS: op de modernere moederborden hoef je zelfs slechts een jumpertje te omzetten of een BIOS instelling te aanpassen om de RAID controller om te zetten in een normale IDE controller. Zie de handleiding van het moederbord voor meer details.

Verschillende schijven in RAID mogelijk?

Ja, dat kan. Alleen moet je rekening houden met het feit dat de grootte en de snelheid van de kleinste resp langzaamste schijf bepalend is voor de totale grootte en snelheid. Stel, je hebt een 20GB 5400rpm 2MB cache schijf en een 40GB 7200rpm 8MB cache schijf en je wilt deze in RAID0 laten draaien. Er wordt dan slechts 20GB van de 40GB schijf benut en de totale snelheid is ongeveer tweemaal de snelheid van de 5400rpm schijf. De schijfcache blijft onaangeroerd.

SoftwareRAID: mocht je in het geval van verschillende schijfgroottes de beschikbare schijfruimte 100% te willen benutten, dan ben je beter af met OS-based software RAID.

Kan ik veranderen van RAID controller met behoud van data?

Bij zuivere mirrors (RAID1) is dat tot zover bekend geen probleem. Je hoeft enkel de array te verhuizen en eventueel in de BIOS de bronschijf opnieuw rebuilden naar de mirrorschijf. Maar bij RAID levels waarbij striping wordt gebruikt (RAID0, RAID5, RAID10, etc) is dat minder makkelijk.

De stelregel is:
- zelfde merk/type > zelfde merk/type = geen probleem
- zelfde merk, ene type > andere type = geen probleem, meestal alleen "forward compatible"
- ene merk > andere merk = no-go

Forward compatible: met "forward compatible" wordt er dus bedoeld, dat wanneer je de schijven verplaatst van een oudere controller (bijv. Promise Fasttrak66) naar een nieuwere type controller van hetzelfde merk (bijv. Promise Fasttrak133), dat de array gewoon opnieuw wordt herkend en de data dus behouden blijft. Omgekeerd gaat dat niet altijd.

Kan ik een schijf uit een RAID1 array halen en deze zó uitlezen?

Dat hangt ervan af: wanneer je OS-based SoftwareRAID gebruikt, dan is het totaal geen probleem. Een voorwaarde is wel dat je Windows 2000 of XP draait. Soms laat de schijf zich niet zien, dan zul je deze even via de schijfbeheer moeten "importeren", dat wijst normaal gesproken vanzichzelf uit. Wanneer je daarentegen FirmwareRAID of HardwareRAID draait, dan geldt hiervoor de punt hierboven: "Kan ik veranderen van RAID controller met behoud van data?" De beste aanpak is dus: aan dezelfde controller hangen en dan uitlezen.

Kan ik een schijf/array zonder dataverlies uitbreiden?

Dat hangt af van de RAID controller. De meeste controllers ondersteunen de uitbreiding van een bestaande RAID array met extra schijf/schijven zonder dataverlies alleen bij single RAID levels met een pariteit (RAID3/4/5/etc). Enkele controllers, vooral de duurdere exemplaren (Areca bijvoorbeeld), ondersteunen uitbreidingen bij alle denkbare levels. Dat is normaliter wel in de handleiding van de controller terug te vinden en het is vooralsnog niet mogelijk bij firmware RAID en software RAID. Het zonder dataverlies uitbreiden van een enkele schijf naar een RAID array is in het algemeen alleen mogelijk bij mirrors (RAID1) en dat wordt door praktisch alle controllers ondersteund, ook door firmware RAID en software RAID. De duurdere controllers (Areca bijvoorbeeld) kunnen zonder dataverlies van een enkele schijf naar een willekeurige RAID array omgezet worden.

Kan ik een RAID level zonder dataverlies omzetten in andere level?

Dat is alleen mogelijk met specifieke hardware- en firmware controllers, bijvoorbeeld die van Areca, Intel en Promise. Dat is gewoonlijk wel in de specificaties en de handleiding van de controller terug te vinden. Dit eigenschap wordt gewoonlijk "RAID level migration" genoemd. Bij andere software/firmware/hardware controllers die het niet ondersteunen moet je dus backuppen naar andere harddisk(s) CD's, DVD's en/of tapes, de array breken, een nieuwe array bouwen en vervolgens de backup terugzetten.

Wat is het verschil tussen Cluster size en Block size?

Kort: cluster size geldt voor de partitie en block size (ook wel stripe size genoemd) geldt voor de array. Hieronder volgt een iets diepzinnigere uitleg.

Partitie: bij een cluster size van bijvoorbeeld 4KB wordt de data wordt per blokjes van 4KB over de partitie verdeeld. Stel: je hebt een bestand van 10KB, dan zullen er 3 volledige clusters in beslag worden genomen: 4KB - 4KB - 2KB. De resterende 2KB wordt slackspace genoemd en kan niet gevuld worden met andere bestanden.

Schijven: bij een block size van bijvoorbeeld 64KB wordt de data wordt per blokjes van 64KB over de schijven verdeeld. Stel: je hebt een bestand van 200KB en een 2-disk RAID0 array, dan komt eerst 64KB op schijf A, daarna 64KB op schijf B, daarna weer 64KB op schijf A en tenslotte de resterende 8KB op schijf B. Hierbij is geen sprake van de zgn slackspace. De block size staat boven de cluster size, dus deze blokken worden weer onderverdeeld over clusters.

Prestaties: de block size is overigens minder relevant bij mirrors. Maar bij stripes is een grotere block size van minimaal 128KB sneller wanneer je veel met grote bestanden werkt (audio/video, etc). En een kleinere block size van maximaal 128KB is dan weer sneller wanneer je veel met kleine bestanden werkt (Word documenten, mailtjes, Operating System, etc).

En waar is de Chunk size goed voor?

Bij sommige RAID controllers zie je ook de BIOS optie 'Chunk size' staan. Dat is de minimale grootte van een datarequest dat de controller aan een schijf van een RAID config kan doen. Het is alleen nuttig bij RAID configs waarin striping wordt gebruikt (RAID0, RAID5, RAID10, etc.. en dus niet bij RAID1 - mirroring).

Voorbeeldje: hier heb je even een simpel voorbeeldje van de werking van Chunk size: stel, je hebt een 2-disk RAID0 config met een block size (stripesize) van 16KB en je wil daarvan een bestand van 1MB lezen. De controller moet dus 64 maal een blok van 16KB uitlezen. Bij een chunk size van 32KB wordt dus eerst twee blokken (chunk size / block size = 32/16 = 2) bij de ene schijf uitgelezen, daarna 2 blokken bij de andere schijf en dan weer 2 blokken bij de ene schijf etcetera. Bij een chunk size van 128KB wordt dus omstebeurt 128/16 = 8 blokken bij de schijven uitgelezen.

Prestaties: wat betreft performance, hier geldt hetzelfde als bij de block size/stripesize: wanneer je veel met grote bestanden werkt (audio/video, etc), dan is een grotere chunk size sneller. Een kleinere chunk size is dan weer sneller wanneer je veel met kleine bestanden werkt (Word documenten, mailtjes, Operating System, etc). Ook geldt: hoe sneller de schijfconfig is (SCSI, SATA, IDE schijven op aparte kanalen, etc), hoe kleiner de chunk size kan zijn, zonder dat je performanceverlies bemerkt bij grote bestanden t.o.v. de kleine bestanden.

Mijn RAID array is broken, hoe red ik de data?

Deze kun je meestal nog wel herstellen door nogmaals exact dezelfde RAID array in de BIOS van de controller te instellen. Verder zijn er (freeware) tooltjes beschikbaar wanneer je serieuze Broken RAID Array problemen hebt. Kijk eens op de Highpoint RAID Controller FAQ van Sudhian.com. Een groot deel van deze tips werken ook met de andere merken RAID controllers. De datarecoverytooltjes UFS Explorer en R-Studio kunnen trouwens ook met broken RAID arrays werken. Met het RAID Reconstructor tooltje kun je een image maken van een broken RAID array, waarna je GetDataBack erop los kan laten.

RAID 0


een stripe

RAID 1


een mirror

RAID 01


een mirror van stripes

RAID 10


een stripe van mirrors

EEN ATLAS

Klik om de foto te vergrotenATTO score van één U320 SCSI schijf (~80MB/s)

TWEE ATLASSEN

Klik om de foto te vergrotenATTO score van twee U320 SCSI schijven in SWRAID0 onder WinXP (~160MB/s)

VIER ATLASSEN

Klik om de foto te vergrotenATTO score van vier U320 SCSI schijven in SWRAID0 onder WinXP (~320MB/s)

ZES ATLASSEN

Klik om de foto te vergrotenATTO score van zes U320 SCSI schijven in SWRAID0 onder WinXP (~500MB/s)

VRIJHEID VAN SWRAID

Klik om de foto te vergrotenMet software RAID onder Win2K/XP kun je diverse RAID levels door elkaar gebruiken