This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

RAID

12.4. RAID

12.4.1. Software RAID

12.4.1.1. ccd (Concatenated Disk Configuration)

Geschrieben von Christopher Shumway. Mark Up von Valentino Vaschetto.

Die wichtigsten Faktoren bei der Auswahl von Massenspeichern sind Geschwindigkeit, Zuverlässigkeit und der Preis. Selten findet sich eine ausgewogene Mischung aller drei Faktoren. Schnelle und zuverlässige Massenspeicher sind für gewöhnlich teuer. Um die Kosten zu senken, muss entweder an der Geschwindigkeit oder an der Zuverlässigkeit gespart werden. Bei der Planung meines Systems habe ich die Faktoren nach ihrer Wichtigkeit geordnet. Der wichtigste Faktor waren die Kosten, da ich sehr viel Speicher zu einem guten Preis brauchte. Der nächste Faktor, Geschwindigkeit, war nicht so wichtig, da auf die Daten über ein geswitchtes 100 Mbit Ethernet, das wahrscheinlich den Engpass darstellen würde, zugegriffen werden sollte. Die Möglichkeit, die Ein- und Ausgabeoperationen auf mehrere Platten zu verteilen, sollte für dieses Netzwerk mehr als schnell genug sein. Die Frage nach der Zuverlässigkeit war leicht zu beantworten, da sich die Daten ja schon auf CD-Rs befanden und der Massenspeicher nur für den leichteren Zugriff auf die Daten sorgen sollte. Wenn ein Laufwerk kaputt geht, kann es leicht ersetzt werden und die Daten können nach dem Wiederherstellen des Dateisystems von CD-Rs wieder kopiert werden.

Unter dem Strich wollte ich also möglichst viel Speicher für mein Geld. Große IDE-Laufwerke sind heutzutage billig: Ich fand IDE-Laufwerke von Western Digital mit 30,7 GB und 5400 RPM für 130 US Dollars, von denen ich drei und damit ungefähr neunzig Gigabyte Speicher kaufte.

12.4.1.1.1. Installation der Hardware

Die Laufwerke wurden in ein System eingebaut, das schon ein IDE-Laufwerk als Systemplatte besaß. Es wäre ideal gewesen, für jedes IDE-Laufwerk einen eigenen Controller und ein eigenes Kabel zu haben, doch haben das die damit verbundenen Kosten verboten. Zwei Platten wurden als Slave und eine als Master konfiguriert. An den ersten IDE-Controller schloss ich eine als Slave konfigurierte Platte zusätzlich zur Systemplatte an. Die beiden anderen Platten wurden als Master und Slave an den zweiten Controller angeschlossen.

Beim Reboot wurde das BIOS so konfiguriert, dass es die angeschlossenen Platten automatisch erkennt und FreeBSD erkannte die Platten ebenfalls:

    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

Wenn FreeBSD die Platten jetzt nicht erkennt, überprüfen Sie, ob die Jumper korrekt konfiguriert sind. Ich habe von vielen Problemen gehört, die dadurch entstanden sind, dass die Platten mit ``cable select'' anstatt richtig als Master und Slave konfiguriert waren.

Die nächste Überlegung war, wie die Platten in das Dateisystem eingebunden werden sollten. Ich schaute mir vinum(8) (Kapitel 13) und FreeBSDs ccd(4) im Hinblick auf meine Konfiguration an. Die Entscheidung fiel zugunsten von ccd(4), da es aus weniger Teilen besteht und weniger Teile häufig eine höhere Stabilität anzeigen. Vinum schien für meine Zwecke ein bisschen zuviel zu sein.

12.4.1.1.2. Konfiguration von CCD

Mit ccd können mehrere gleiche Platten zu einem logischen Dateisystem zusammengefasst werden. Um ccd zu benutzen, muss der Kernel mit der entsprechenden Unterstützung übersetzt werden. Ich fügte die folgende Zeile zu meiner Konfigurationsdatei hinzu und übersetzte den Kernel neu:

    pseudo-device   ccd     4

Anmerkung: Ab FreeBSD 5.0 muss die gewünschte Anzahl an Geräten nicht mehr angegeben werden, da die Geräte automatisch zur Laufzeit erzeugt werden.

In FreeBSD 4.0 und späteren Versionen kann ccd auch als Kernelmodul geladen werden.

Um ccd zu benutzen, müssen die Laufwerke zuerst mit einem Label versehen werden. Die Label erstellte ich mit den folgenden Kommandos:

    disklabel -r -w ad1 auto
    disklabel -r -w ad2 auto
    disklabel -r -w ad3 auto

Damit wurden die Label ad1c, ad2c und ad3c erstellt, die jeweils das gesamte Laufwerk umfassen.

Im nächsten Schritt muss der Typ des Labels geändert werden. Zum Editieren der Lables benutzte ich folgende Kommandos:

    disklabel -e ad1
    disklabel -e ad2
    disklabel -e ad3

Für jedes Label startete dies den durch EDITOR gegebenen Editor, in meinem Fall vi(1), der dann einen Abschnitt, wie den folgenden zeigte:

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

Für ccd musste ich eine ``e'' Partition erstellen. Diese kann durch Kopieren der ``c'' Partition erstellt werden, allerdings muss fstype auf 4.2BSD gesetzt werden. Der editierte Label sah dann wie folgt aus:

    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)

12.4.1.1.3. Erstellen des Dateisystems

Nachdem die Label erstellt waren, musste ich ccd konfigurieren. Dazu dient ccdconfig(8), das als ersten Parameter das zu konfigurierende Gerät, in meinem Fall /dev/ccd0c, erwartet. Wenn die Gerätedatei für ccd0c noch nicht existiert, können Sie diese mit den folgenden Kommandos erstellen:

    cd /dev
    sh MAKEDEV ccd0

Anmerkung: Ab FreeBSD 5.0 werden die Gerätedateien automatisch von devfs(5) erzeugt. MAKEDEV muss also nicht aufgerufen werden.

Das nächste Argument, das ccdconfig erwartet, ist der Interleave für das Dateisystem. Der Interleave definiert die Größe eines Streifens in Blöcken, die normal 512 Bytes groß sind. Ein Interleave von 32 ist demnach 16384 Bytes groß.

Nach der Angabe des Interleaves können Sie Optionen für ccdconfig angeben. Wenn Sie gespiegelte Laufwerke einrichten möchten, müssen Sie an dieser Stelle eine Option angeben. Da ich keinen Spiegel erstellen wollte, habe ich 0 eingesetzt.

Zum Schluss werden die Geräte des Verbundes angegeben. Die komplette Kommandozeile sieht dann wie folgt aus:

    ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e

Damit ist ccd konfiguriert und mit newfs(8) kann nun ein Dateisystem angelegt werden:

    newfs /dev/ccd0c

12.4.1.1.4. Automatisierung

Damit ccd beim Start automatisch aktiviert wird, ist die Datei /etc/ccd.conf mit dem folgenden Kommando zu erstellen:

    ccdconfig -g > /etc/ccd.conf

Wenn /etc/ccd.conf existiert, wird beim Reboot ccdconfig -C von /etc/rc aufgerufen. Damit wird ccd eingerichtet und die darauf befindlichen Dateisysteme können angehängt werden.

Wenn Sie in den Single-User Modus booten, müssen Sie den Verbund erst konfigurieren, bevor Sie darauf befindliche Dateisysteme anhängen können:

    ccdconfig -C

In /etc/fstab ist noch ein Eintrag für das auf dem Verbund befindliche Dateisystem zu erstellen, damit dieses beim Start des Systems immer angehängt wird:

    /dev/ccd0c              /media       ufs     rw      2       2

12.4.1.2. Der Vinum Volume Manager

Der Vinum Volume Manager ist ein Block-Gerätetreiber, der virtuelle Platten zur Verfügung stellt. Er trennt die Verbindung zwischen der Festplatte und dem zugehörigen Block-Gerät auf. Im Gegensatz zur konventionellen Aufteilung einer Platte in Slices lassen sich dadurch Daten flexibler, leistungsfähiger und zuverlässiger verwalten. vinum(8) stellt RAID-0, RAID-1 und RAID-5 sowohl einzeln wie auch in Kombination zur Verfügung.

Mehr Informationen über vinum(8) erhalten Sie in Kapitel 13.

12.4.2. Hardware RAID

FreeBSD unterstützt eine Reihe von RAID-Controllern, die mit Hilfe eines BIOS auf der Karte ein RAID System aufbauen und verwalten können. Wie ein RAID System eingerichtet wird, sei kurz am Beispiel des Promise IDE RAID-Controllers gezeigt. Nachdem die Karte eingebaut ist und der Rechner neu gestartet wurde, erscheint eine Eingabeaufforderung. Wenn Sie den Anweisungen auf dem Bildschirm folgen, gelangen Sie in eine Maske, in der Sie mit den vorhandenen Festplatten ein RAID System aufbauen können. Das RAID System erscheint später unter FreeBSD als eine Festplatte.

12.4.3. Wiederherstellen eines ATA-RAID-1 Verbunds

Mit FreeBSD können Sie eine ausgefallene Platte in einem RAID-Verbund während des Betriebs auswechseln, vorausgesetzt Sie bemerken den Ausfall vor einem Neustart.

Einen Ausfall erkennen Sie, wenn in den Protokollen von syslogd(8) oder dmesg(8) Meldungen wie die folgenden auftauchen:

    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

Überprüfen Sie den RAID-Verbund mit atacontrol(8):

    # 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. Damit Sie die Platte ausbauen können, muss sie zuerst aus dem Verbund entfernt werden:

        # atacontrol detach 3
    
  2. Ersetzen Sie dann die Platte.

  3. Nehmen Sie die neue Platte in den Verbund auf:

        # atacontrol attach 3
        Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
        Slave:   no device present
    
  4. Stellen Sie die Organisation des Verbunds wieder her:

        # atacontrol rebuild ar0
    
  5. Das Kommando blockiert den Terminal bis der Verbund wiederhergestellt ist. Den Fortgang des Prozesses können Sie in einem anderen Terminal mit den folgenden Befehlen kontrollieren:

        # dmesg | tail -10
        [output removed]
        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
    
  6. Warten Sie bis die Wiederherstellung beendet ist.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine EMail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine Email an <de-bsd-translators@de.FreeBSD.org>.