Raid

Uit Linuxdocs.nl
Ga naar: navigatie, zoeken

Door: Michaell Bakker
Website: http://www.linuxdocs.nl
Versie: 2-9-2009.


Hardware vs Software RAID

Indien u een RAID oplossing wilt bouwen, heeft u de keuze uit 2 mogelijkheden.
Namelijk: Hardwarematige RAID en Softwarematige RAID. Maar wat zijn nou precies de verschillen en welke is voor u het beste geschikt?.

Software RAID: Is geschikt voor elke pc. Uw hardwarecontroller hoeft deze functie niet per se te ondersteunen om toch een RAID oplossing op te bouwen.
Nadeel is wel; dat wegens gebrek aan hardware support de CPU alle berekeningen tot zich moet nemen. Ik raad aan om softwarematig alleen RAID-0 en RAID-1 op te zetten. RAID-5 kan uw pc zwaar vertragen en vooral als er een herstel procedure moet plaatsvinden (Uw pc wordt dan zelfs bijna onbruikbaar).

Hardware RAID: Is als uw SCSI, IDE of S-ATA kaart is voorzien van een eigen CPU en geheugen. Alle RAID parity berekeningen zullen door de controller worden gedaan. Hierdoor komt deze belasting niet op de CPU te zitten.
Hierdoor zal het systeem niet vertragen en kunt u vrijwel elke RAID level gebruiken zonder dat uw systeem merkbaar vertraagt. Hardware RAID verdient hier ook de voorkeur. Deze laat zich vaak eenvoudig opzetten via het BIOS van uw kaart/pc. Eenmaal ingesteld en u bent klaar. Linux zal de Hardware RAID oplossing direct accepteren zonder vragen te stellen.

De meeste pc's kunnen RAID opzetten vanuit hun BIOS. Dit is echter een Software RAID opstelling die door het BIOS uitgevoerd word. De computer's eigen CPU en het systeemgeheugen worden gebruikt voor de parity berekeningen.

(E)IDE vs SCSI

De meeste pc's hebben (E)IDE en/of S-ATA disken. En de high end gebruiker zal alleen SCSI willen.
IDE en S-ATA zijn trager dan SCSI. De gem. moderne IDE/S-ATA schijf heeft 7500RPM en die kunnen niet op tegen de 10.000 en 15.000RPM SCSI schijven van vandaag, en IDE/S-ATA is minder duurzaam. Gebruik bij voorkeur geen IDE/S-ATA als u een server hebt die 24u per dag aanstaat. IDE en S-ATA schijven slijten helaas sneller dan SCSI schijven.
Dit wil niet zeggen dat IDE en S-ATA schijven bij de fabrikant zo in elkaar gepruts worden. Integendeel: IDE en S-ATA schijven worden met veel zorg in elkaar gezet maar ze moeten ook betaalbaar blijven.
IDE en S-ATA is daarentegen wel goedkoper dan SCSI (Een 10.000RPM SCA SCSI schijf kost tegenwoordig ca. 2 euro per 1GB inkoop) en heeft geen speciale host adapter nodig (Ze zitten standaard op het moederbord). SCSI daarentegen zit meestal niet standaard op een moederbord en verijst een (dure) SCSI host adapter kaart in uw PCI(e/ex) slot.

Zowel SCSI als IDE/S-ATA schijven werken perfect in een RAID oplossing.

Hardware setup

Waarschuwing: Door uw drives in RAID te zetten wist u alle data op deze schijven!!! Dit geld voor zowel software als hardware RAID

SCSI: De meeste SCSI adapter hebben wel hardware RAID support. Ik raad aan deze te gebruiken, omdat deze manier sneller en veiliger is.
Heeft u geen SCSI hardware support, of wilt u dat gewoon niet, dan zijn er verder geen speciale aanpassingen nodig.

IDE: Net als bij SCSI gaat de voorkeur uit naar een hardware RAID config.
Heeft u deze support niet of wilt u gewoon software RAID? Pas uw hardware dan als volgt aan:

  • Gebruik geen 2 hardeschijven op 1 IDE kabel! Dit zal de prestaties zwaar onderdrukken (geld voor zowel Hardware als Software RAID), omdat IDE geen 2 schijven tegelijkertijd kan benaderen op 1 bus. Zet daarom 1 Hardeschijf op 1 bus als "Master".
  • Software RAID is minder betrouwbaar dan Hardware RAID. Maak dus altijd backups.

Risico's van software RAID

Als u gebruik maakt van b.v. RAID-5, dan weet u dat als er een HDD "poeft" dat dan de gehele array herbouwd wordt om deze HDD automatisch te vervangen.
Software RAID-5, zal dit over het algemeen prima doen. Maar er zijn 4 zaken die u zwaar in het achterhoofd moet houden!

  • Software RAID vertraagt uw systeem enorm bij het rebuilden van de data. De HDD's zijn dan natuurlijk bezig en het CPU en FPU gebruik zal stijgen tot 100%.
  • Door een software fout in de RAID, SCSI of IDE driver kan het zijn dat het rebuilden faalt en de gehele array onbruikbaar word.
  • Door een hardware fout kan de SCSI of IDE chipset falen. Hierdoor wordt ook weer de gehele array onbruikbaar.
  • Data uit een RAID array zijn zeer moeilijk te herstellen na een RAID crash (Zie bovenstaande punten). Voor de gem. gebruiker acht ik dit zelfs onmogelijk wegens gebrek aan kennis

Hotswap (Hotplug)

Niet direct van toepassing, maar wel van belang aangezien ik hier nog wel eens mensen op betrap met een RAID-5 config.

IDE heeft GEEN Hotswap support (Nee, die van u ook niet. Er bestaan geen IDE chipsets met "hotswap" support.).
Een Defecte HDD vervangen in uw softwarematige RAID-5 config mag u nooit doen als de pc aan staat!.
Goed, het kan een paar keer goed gaan. Maar als u dat blijft doen is de kans groot dat u een defecte IDE chipset eraan overhoudt.

Dit geld ook voor SCSI. Al bestaan er voor SCSI wel Hotswap hardware waar dat wel bij mag. (B.v. de HP SMARTxxx array kaarten hebben hotplug support).

S-ATA daarintegen is altijd hotplug. Echter betekend dit vaak niet voor de software en gaan er dan alsnog dingen mis.
Zet daarom de pc gewoon uit als het geen SCSI hotplug systeem betreft.

Hou er rekening mee dat Hotswap hardware alleen "hot kan swappen" als zowel de SCSI host als de Hardeschijf dit ondersteund. Raadpleeg hierover uw handleiding of u dit kunt doen en wat het eventuele stappenplan is (ruk nooit zomaar een HDD uit een array en hoop dat het goed gaat. Data corruptie kan het gevolg zijn.).

Onthoudt: Als een HDD gemarkeerd wordt als "Defect" betekend het nog niet dat de array deze niet meer in gebruik heeft. De HDD doet zijn werk vaak nog in een RAID-5 array. Deze verwijderen kan uw array beschadigen. Daarom hebben HDD's in servers ook 3 statusLEDS erop zitten, zodat de beheerder kan zien of deze HDD verwijderd mag worden (Een goed voorbeeld zijn de Hotplug UW-SCSI schijven van HP in combinatie met een HP SMARTxxx Array kaart).

RAID opzetten

Om een RAID array te bouwen, heeft u het volgende nodig:

  1. Een kernel. Het liefst een uit de 2.4.x of 2.6.x reeks. Voor 2.0 en 2.2.x kernel is een kernel patch nodig.
  2. RAID tools.
  3. Wat geduld, een stuk pizza en een sixpack Heineken. :)

Deze zitten vrijwel altijd in de moderne Linux disto's van vandaag.

Als uw systeem RAID ondersteuning heeft, dan moet er een bestand bestaan genaamd /proc/mdstat. Onthoudt dat dit bestand uw vriend is. Als u dat bestand niet heeft, dan heeft uw kernel waarschijnlijk geen support voor RAID.
Laten we een kijken wat dit bestand bevat, door de opdracht: cat /proc/mdstat te geven. Het zal u vertellen dat u aan de eisen voldoet om een RAID systeem te bouwen, maar dat er op dit moment geen RAID arrays aanwezig zijn.

RAID tools downloaden

De RAID tools zijn standaard aanwezig in uw systeem.

Downloaden en het installeren van mdadm

U kunt de meest recente versie van mdadm downloaden vanaf: http://www.cse.unsw.edu.au/~neilb/source/mdadm

Om nu alles te installeren, doet u het volgende:

[root@linuxdocs.nl tmp]# tar -xvzf mdadm-*.tgz
[root@linuxdocs.nl tmp]# cd mdadm-*
[root@linuxdocs.nl tmp]# make install

Indien u gebruik maakt van een RPM gebaseerd systeem, download dan een .rpm pakket vanaf: http://www.cse.unsw.edu.au/~neilb/source/mdadm/RPM

En installeer deze met:

[root@linuxdocs.nl tmp]# rpm -ivh mdadm-*.rpm

En voor debian gebruikt u:

[root@linuxdocs.nl tmp]# apt-get install mdadm

En voor Gentoo:

[root@linuxdocs.nl tmp]# emerge mdadm

Een array maken in Linear mode

u heeft nu 2 of meer schijven die niet noodzakelijk dezelfde grootte hebben.
Eem lineare raid laat de 2 schijven samensmelten tot 1 schijf.
De grootte van uw array zal worden: Capaciteit van schijf 1 + Capaciteit van schijf 2 + Capaciteit van schijf 3 enz

Pas nu het bestand /etc/raidtab bestand aan, zodat deze voldoet aan uw configuratie. Ik Heb dit bestand opgezet voor 2 SCSI disken in lineare mode, en het bestand ziet er zo uit:

raiddev /dev/md0
        raid-level      linear
        nr-raid-disks   2
        chunk-size      32
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

Reserve disken worden hier niet ondersteund! Als een drive faalt, dan zakt de array in elkaar. Er is geen informatie om op de reserve disk te zetten.

u vraagt u misschien af waarom we hier een chunk-size opgeven.. u heeft helemaal gelijk, het is maf. Maar doe het maar gewoon en denk hier niet meer aan :)

Ok, laten we de RAID array maken. Geef de opdracht:

[root@linuxdocs.nl tmp]# mkraid /dev/md0

Dit zal de array gaan opbouwen en starten.

Als u gebruik maakt van mdadm geef dan de opdracht:

# mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdb6 /dev/sdc5

Dit zal de array maken en starten. De parameters spreken voor zich. De output zal hierop lijken als u het goed heeft gedaan:

mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.

Neem nu een kijkje in /proc/mdstat. u zult nu zien dat de array werkt.

Nu moeten we alleen nog een bestandssysteem maken en de schijf mounten om te kunnen gebruiken.

Een RAID-0 array maken.

U heeft 2 hardeschijven (of meer) van precies dezelfde grootte en u wilt dat de 2 schijven samensmelten tot 1 schijf die sneller kan lezen en schijven dan dat ze normaal zouden gaan doen

De maximale grootte van de RAID-0 array zal worden:
Capaciteit van kleinste schijf x aantal schijven

Edit het bestand /etc/raidtab zodat het er als volgt uit komt te zien

raiddev /dev/md0
        raid-level      0
        nr-raid-disks   2
        persistent-superblock 1
        chunk-size      4
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

Net als bij linear mode worden reserve disken niet ondersteund. Als een HDD faalt, dan zakt alles in elkaar en bent u al uw data kwijt.

Zoals in de vorige stap. Geef de opdracht:

[root@linuxdocs.nl tmp]# mkraid /dev/md0

Om de array op te bouwen en te starten. Neem weer een kijkje in /etc/mdstat Om te kijken wat er gaande is. U zult zien dat de array is gestart en klaar is voor gebruik.

Uw schijf in /dev/md0 is na het formatteren en mounten klaar voor gebruik.

Een RAID-1 array maken

U heeft 2 schijven van dezelfde grootte en u wilt dat ze elk 2 kopieen gaan vormen van elkaar om data te beschermen mocht er een schijf poefen. En u kunt ook gebruik maken van reserve disken voor het geval een HDD faalt.

De grootte van uw array gaat worden:
Capaciteit van de kleinste schijf

Edit het bestand /etc/raidtab zodat het er ongeveer zo uit ziet:

raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        nr-spare-disks  0
        persistent-superblock 1
	chunk-size      16
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

Heeft u een reserve disk die u in wilt zetten? Voeg dan deze 2 regels toe onder dit bestand:

device          /dev/sdd5
                spare-disk      0

Geef zoals gebruikelijk weer de opdracht:

[root@linuxdocs.nl tmp]# mkraid /dev/md0

Om uw array te starten en te initializeren

Neem weer een kijkje in /proc/mdstat om te kijken wat er gebeurd. Het zal u vertellen dat /dev/md0 klaar is voor gebruik en dat een eventuele reservedisk wordt opgebouwd met de verwachte tijd wanneer deze klaar is voor gebruik.

Het bouwen van deze array neemt enige tijd in beslag. Uw pc zal flink afgeremd worden tijdens dit proces en de HDD LEDS zullen flink te keer gaan.

Het bouwen van de array is een transparant proces. U zult dus instaat zijn de array normaal te kunnen gebruiken tijdens dit proces. Hou alleen rekening met wat vertraging
Formatteer de array gerust tijdens dit proces. U kunt deze zelfs al mounten.

Een RAID-4 array maken

U heeft 3 of meer schijven van dezelfde grootte. 1 schijf is een stuk sneller dan de anderen en u wilt ze combineren tot 1 grote schijf en dat uw data beschermt word tegen het falen van een disk en uitijdelijk wilt u nog een schijf inschakelen als reserve disk.

De grootte van uw array word:
Capaciteit van de kleinste schijf x (aantal schijven -1)

Edit het bestand /etc/raidtab en geef deze de volgende inhoud:

raiddev /dev/md0
        raid-level      4
        nr-raid-disks   4
        nr-spare-disks  0
        persistent-superblock 1
        chunk-size      32
        device          /dev/sdb1
        raid-disk       0
        device          /dev/sdc1
        raid-disk       1
        device          /dev/sdd1
        raid-disk       2
        device          /dev/sde1
        raid-disk       3

Heeft u een reserve disk? Voeg dan deze regel onderaan toe:

device         /dev/sdf1
               spare-disk     0

Zoals gewoonlijk. Geeft u weer de opdracht:

[root@linuxdocs.nl tmp]# mkraid /dev/md0

Ik beveel u aan om onderaan deze how2 te kijken naar het hoofdstuk opties voor mke2fs voordat u deze array gaat formatteren.

Een RAID-5 array maken

U heeft 3 of meer schijven met dezelfde capaciteit en deze wilt u combineren tot 1 grote schijf maar u wilt wel dat uw data beschermt is tegen het uitvallen van 1 schijf. Tot slot wilt u ook gebruik maken van 1 reserve disk Die niet deelnemen aan de array totdat een schijf faalt.

De grootte van deze array word:
Capaciteit van de kleinste schijf x (aantal schijven -1)

Edit /etc/raidtab zodat het deze info bevat:

raiddev /dev/md0
        raid-level      5
        nr-raid-disks   7
        nr-spare-disks  0
        persistent-superblock 1
        parity-algorithm        left-symmetric
        chunk-size      32
        device          /dev/sda3
        raid-disk       0
        device          /dev/sdb1
        raid-disk       1
        device          /dev/sdc1
        raid-disk       2
        device          /dev/sdd1
        raid-disk       3
        device          /dev/sde1
        raid-disk       4
        device          /dev/sdf1
        raid-disk       5
        device          /dev/sdg1
        raid-disk       6

Heeft u een reserve disk? voeg dat deze 2 regeltje toe

 device         /dev/sdh1
 spare-disk     0

Een chunk-size van 32Kb is een goede standaard waarde voor algemeen gebruik. De array in dit voorbeeld is 7x6=32GB groot, met een EXT2 bestandssysteem met een 4Kb block size. U kunt een hogere waarde opgeven aan chunk-size en block-size als uw bestandssysteem groter is, of veel grote bestanden zal gaan krijgen.

Ok, genoeg gepraat. bouw en start nu de array met:

[root@linuxdocs.nl tmp]# mkraid /dev/md0

En kijk wat er gebeurd. Hopelijk gaan de schijven nu flink tekeer en gaan aan de gang om de array op te bouwen. Neem een kijkje in /proc/mdstat om te kijken wat er gebeurd.

Als de array met succes is aangemaakt, dan begint het constructieproces. U kunt uw array gewoon gebruiken tijdens dit proces, maar hou er rekening mee dat de fout tolerancie nog niet werkt. Mocht een disk falen tijdens dit proces, dan bent u alle data kwijt die u op deze array heeft gezet.

Bekijk het hoofdstuk Opties voor mke2fs voordat u deze array gaat formatteren

Ok, nu heeft u uw RAID array aan de praat gekregen.
Onthoudt dat u de array ten alle tijden kunt in of uitschakelen met de opdracht:

[root@linuxdocs.nl tmp]# raidstop /dev/md0
[root@linuxdocs.nl tmp]# raidstart /dev/md0

Als u gebruikmaakt van mdadm. Dan tikt u in:

[root@linuxdocs.nl tmp]# mdadm -S /dev/md0 (Stop)
[root@linuxdocs.nl tmp]# mdadm -R /dev/md0 (Start)

Het hardnekkige superblock

Terug "In die goeje ouwe tijd (tm)", de RAID-tools leesde altijd het /etc/raidtab bestand om de array te bouwen en te koppelen aan uw Linux systeem.
Hoedanook, dit vereist dat het bestandssysteem die dit bestand heeft is gemount. Dit is helaas niet het geval als u van uw RAID array wilt booten.

De oude manier leidde soms tot complicaties voor het mounten van schijven die in RAID staan. Deze konden niet in /etc/fstab worden geplaatst zoals u dat waarschijnlijk normaal zou doen, maar moesten worden gemount via de init scripts

Het hardnekkige superblock verhelpt al deze problemen. Als de array wordt gekoppeld met de persistent-superblock optie in het /etc/raidtab bestand, dan word een speciaal superblock geschreven op het begin van alle disken die deel uitmaken van de array. Dit staat de kernel toe om de configuratie van de RAID apparatuur direct te lezen van de disken die hierbij betrokken zijn, inplaats van eerst van een of ander config. bestand te moeten lezen dat niet altijd beschikbaar is.

U zult hoedanook nog steeds het bestand /etc/raidtab moeten onderhouden, omdat u het wellicht nog nodig zult hebben als u de array opnieuw moet opbouwen of wijzigingen wilt aanbrengen in de array.


Opties voor mke2fs

Er zijn speciale opties aanwezig als u een RAID-4/5 array wilt formatteren met mke2fs. De -R stride=nn optie zal mke2fs toestaan om beter verschillende EXT2 specefieke data-structuren in een intelligente manier op te slaan in een RAID-4/5 array.

Als de chunk-size 32Kb is, dan betekend dat er 32Kb opeenvolgende data zal worden opgeslagen op 1 disk. Als we een EXT2 bestandssysteem willen bouwen met een 4Kb block-size, we realiseren dat er dan 8 bestandssysteem blokken in 1 array-blok zullen zijn. We geven deze informatie door aan de mke2fs opdracht, voor het maken van ons bestandssysteem.

[root@linuxdocs.nl tmp]# mke2fs -b 4096 -R stride-8 /dev/md0

De RAID-4/5 prestaties worden door deze optie zwaar beinvloed. Ik ben alleen onzeker over hoe de stride optie effect zou hebben op andere RAID levels. Als iemand hier meer ervaring mee heeft, neem dan contact met mij op.

De EXT2 bestandssysteem blocksize heeft zeer veel invloed op de prestaties van het bestandssysteem. U doet er goed aan om altijd 4Kb te gebruiken als block-size op uw bestandssysteem indien deze groter is dan een paar 100MB, tenzij u een groot aantal kleine bestanden op uw array wilt zetten.

Bent u onzeker hierover of in de war?
Formatteer de array dan op de normale standaard manier. Deze manier werkt altijd wel, aldanniet met optimale prestaties.

[root@linuxdocs.nl tmp]# mke2fs /dev/md0



How-TO's | Hoofdpagina | Linux Nieuws | Externe links | Help