19.4. RAID

19.4.1. Software RAID

19.4.1.1. Concatenated Disk Driver (CCD) instellingen

Origineel werk van Christopher Shumway. Herzien door Jim Brown.

Bij het kiezen van een medium voor massa-opslag zijn de belangrijkste afwegingen snelheid, betrouwbaarheid en kosten. Het komt zelden voor dat alle drie in balans zijn. Normaalgesproken is een snel, betrouwbaar apparaat voor massa-opslag duur en kosten sparen gaat ten koste van òfwel snelheid òfwel betrouwbaarheid.

Bij het ontwerpen van het onderstaande systeem werd primair op de kosten gelet, gevolgd door snelheid en als laatste betrouwbaarheid. De overdrachtsnelheid van gegevens wordt voor dit systeem uiteindelijk beperkt door het netwerk. En hoewel betrouwbaarheid erg belangrijk is, wordt onderstaande CCD-schijf gebruikt voor het serven van on-line gegevens die reeds volledig op CD-R's zijn geback-upt en eenvoudig vervangen kunnen worden.

De eerste stap in het kiezen van een massa-opslagoplossing is het bepalen van de eigen benodigdheden. Indien snelheid belangrijker is dan betrouwbaarheid of kosten, wijkt de oplossing af van het systeem dat in deze sectie wordt beschreven.

19.4.1.1.1. Hardware installeren

Als aanvulling op de IDE systeemschijf zijn drie Western Digital IDE-schijven van 30 GB, 5400 RPM vanuit de kern van de onderstaande CCD-schijf aanwezig, die ongeveer 90 GB aan on-line opslag bieden. Ideaal gezien heeft iedere IDE-schijf een eigen IDE-controller en kabel, maar om de kosten te minimaliseren zijn geen aanvullende IDE-kabels gebruikt. In plaats hiervan zijn de schijven zodanig met jumpers ingesteld dat elke IDE-controller één master en één slave heeft.

Tijdens het opnieuw opstarten werd het systeem-BIOS zodanig ingesteld dat het automatisch de aangekoppelde schijven detecteerde. Het was belangrijker dat FreeBSD ze tijdens het opnieuw opstarten herkende:

ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

Opmerking: Indien FreeBSD niet alle schijven detecteert, moet gecontroleerd worden of de jumpers juist zijn ingesteld. De meeste IDE-schijven hebben ook een jumper voor “Cable Select”. Dit is niet de jumper voor de master/slave-instelling. Voor hulp met het identificeren van de juiste jumper dient de documentatie van de schijf geraadpleegd te worden.

Vervolgens dient besloten te worden hoe ze deel gaan uitmaken van het bestandssysteem. Hiervoor dienen vinum(4) (Hoofdstuk 22) en ccd(4) bestudeerd te worden. Voor deze instellingen werd voor ccd(4) gekozen.

19.4.1.1.2. CCD installeren

Het stuurprogramma ccd(4) biedt de mogelijkheid om meerdere identieke schijven aaneen te rijgen tot één logisch bestandssysteem. Om gebruik te kunnen maken van ccd(4) is een kernel met ingebouwde ondersteuning voor ccd(4) nodig. De volgende regel dient toegevoegd te worden aan het kernelinstellingenbestand en de kernel dient opnieuw gebouwd en geïnstalleerd te worden:

device  ccd

Om ccd(4) te installeren dient eerst bsdlabel(8) gebruikt te worden om de schijven te labelen:

bsdlabel -w -ad1 auto
bsdlabel -w ad2 auto
bsdlabel -w ad3 auto

Bovenstaande maakt een schijflabel aan voor ad1c, ad2c en ad3c die de gehele schijf beslaat.

Vervolgens dient het labeltype van de schijf veranderd te worden. Voor het bewerken van de schijven kan bsdlabel(8) gebruikt worden:

bsdlabel -e ad1
bsdlabel -e ad2
bsdlabel -e ad3

Dit zorgt ervoor dat het huidige schijflabel van elke schijf met de tekstverwerker wordt geopend die door de omgevingsvariabele EDITOR wordt gespecificeerd, vaak vi(1).

Een ongewijzigd schijflabel ziet er ongeveer als volgt uit:

8 partitions:
# size	offset	fstype	[fsize	bsize bps/cpg]
c: 60074784 0 unused  0	0 0 # (Cyl. 0 - 59597)

Er dient een nieuwe partitie e toegevoegd te worden die door ccd(4) gebruikt kan worden. Deze kan gewoonlijk van partitie c overgenomen worden, maar het fstype moet 4.2BSD zijn. Het schijflabel ziet er nu ongeveer als volgt uit:

8 partitions:
# size	offset	fstype	[fsize	bsize bps/cpg]
c:  60074784  0	unused	0 0 0 # (Cyl. 0 - 59597)
e:  60074784  0	4.2BSD	0 0 0 #	(Cyl. 0 - 59597)

19.4.1.1.3. Bestandssysteem aanmaken

Nu alle schijven gelabeld zijn, moet de ccd(4) gebouwd worden. Om dit te doen, dient ccdconfig(8) gebruikt te worden met opties die ongeveer gelijk zijn aan de volgende:

ccdconfig ccd0(1) 32(2) 0(3) /dev/ad1e(4) /dev/ad2e /dev/ad3e

Hieronder staat het gebruik en de betekenis van elke optie:

(1)
Het eerste argument is het in te stellen apparaat, in dit geval /dev/ccd0c. Het gedeelte /dev/ is optioneel.
(2)
De interleave voor het bestandssysteem. De interleave definiëert de grootte van een stripe in schijfblokken, elk schijfblok is normaalgesproken 512 bytes groot. Een interleave van 32 is dus 16.384 bytes groot.
(3)
Vlaggen voor ccdconfig(8). Indien het gewenst is om schijfspiegeling aan te zetten, kan er hier een vlag voor gespecificeerd worden. Deze opstelling biedt geen spiegeling voor ccd(4), dus is die op 0 (nul) ingesteld.
(4)
De laatste argumenten voor ccdconfig(8) zijn de apparaten die in de rij geplaatst dienen te worden. Voor elk apparaat dient de complete padnaam gebruikt te worden.

Nadat ccdconfig(8) gedraaid is, is de ccd(4) ingesteld. Er kan een bestandssysteem worden geïnstalleerd. Er kan in newfs(8) worden gekeken voor opties, of het draaien van het onderstaande commando is ook toereikend:

newfs /dev/ccd0c

19.4.1.1.4. Alles automatisch maken

In het algemeen is het wenselijk om de ccd(4) telkens te mouten wanneer er opnieuw opgestart wordt. Dit dient eerst ingesteld te worden. Met het volgende commando worden de huidige instellingen naar /etc/ccd.conf geschreven:

ccdconfig -g > /etc/ccd.conf

Tijdens het opstarten draait het script /etc/rc ccdconfig -C indien /etc/ccd.conf bestaat. Dit stelt automatisch de ccd(4) in, zodat die kan worden aangekoppeld.

Opmerking: Indien er in enkele-gebruiker-modus wordt opgestart, dient het volgende commando te worden uitgevoerd om de rij in te stellen voordat de ccd(4) aangekoppeld kan worden:

ccdconfig -C

Om de ccd(4) automatisch aan te koppelen, kan er een regel voor de ccd(4) in /etc/fstab geplaatst worden, zodat die tijdens het opstarten aangekoppeld wordt:

/dev/ccd0c  /media  ufs rw  2	2

19.4.1.2. Volumebeheerder Vinum

De volumebeheerder Vinum is een blokstuurprogramma dat virtuele schijven implementeert. Het isoleert schijfhardware van de blokapparaat-interface en projecteert gegevens op een manier die de flexibiliteit, prestatie en betrouwbaarheid verhoogt in vergelijking met de traditionele slice-blik op schijfopslag. vinum(4) implementeert de modellen RAID-0, RAID-1 en RAID-5, zowel individueel als als combinatie.

In Hoofdstuk 22 staat meer informatie over vinum(4).

19.4.2. Hardwarematige RAID

FreeBSD ondersteunt ook een verscheidenheid aan hardwarematige RAID-stuurprogramma's. Deze apparaten besturen een RAID-deelsysteem zonder dat er FreeBSD-specifieke software nodig is om de rij te beheren.

Door gebruik te maken van een BIOS die op de kaart aanwezig is, beheert de kaart de meeste schijfbewerkingen zelf. Nu volgt een korte beschrijving van een opzet waarbij een Promise IDE-stuurprogramma is gebruikt. Wanneer deze kaart geïnstalleerd en het systeem opgestart is, beeldt het een prompt af waarbij om informatie wordt gevraagd. De instructies dienen opgevolgd te worden om bij het instelscherm van de kaart te komen. Van hieruit kunnen alle aangekoppelde schijven gecombineerd worden. Nadat dit gedaan is, zien de schijven er voor FreeBSD als één enkele schijf uit. Andere RAID-niveaus kunnen overeenkomstig ingesteld worden.

19.4.3. ATA RAID1-rijen opnieuw bouwen

Met FreeBSD is het mogelijk om een defecte schijf in een rij te vervangen terwijl de computer aanstaat (“hot replace”). Hiervoor dient de schijf vóór het opnieuw opstarten vervangen te zijn.

Waarschijnlijk is zoiets als het volgende in /var/log/messages of in de uitvoer van dmesg(8) te zien:

ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\
status=59 error=40
ar0: WARNING - mirror lost

Meer informatie kan met behulp van atacontrol(8) gezocht worden:

# atacontrol list
ATA channel 0:
	Master:      no device present
	Slave:   acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0

ATA channel 1:
	Master:      no device present
	Slave:       no device present

ATA channel 2:
	Master:  ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
	Slave:       no device present

ATA channel 3:
	Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
	Slave:       no device present

# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
  1. Ontkoppel eerst het ata kanaal met de falende schijf zodat deze veilig kan worden verwijderd:

    # atacontrol detach ata3
    
  2. Vervang de schijf.

  3. Koppel het ata kanaal opnieuw aan:

    # atacontrol attach ata3
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:   no device present
    
  4. Voeg de nieuwe schijf toe aan de rij als reserve:

    # atacontrol addspare ar0 ad6
    
  5. De rij dient nu opnieuw opgebouwd te worden:

    # atacontrol rebuild ar0
    
  6. Het is mogelijk de voortgang te volgen met het volgende commando:

    # dmesg | tail -10
    [uitvoer verwijderd]
    ad6: removed from configuration
    ad6: deleted from ar0 disk1
    ad6: inserted into ar0 disk1 as spare
    
    # atacontrol status ar0
    ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
    
  7. Nu moet er gewacht worden tot de bewerking voltooid is.