Inhalt

10. Fehlerbehebung

An dieser Stelle wird auf das Verhalten der unterschiedlichen RAID-Verbunde im Fehlerfall eingegangen. Die Szenarien zum Restaurieren defekter RAID-Verbunde reichen von den verschiedenen RAID-Modi bis hin zu Hot Plugging und Spare-Disks.

Die folgenden Beschreibungen stützen sich alle auf den Kernel 2.2.10 mit den passenden RAID-Tools und Kernel-Patches, entsprechen also der Einrichtfunktionalität des Abschnittes über die neuen RAID-Tools Version 0.9x. Die RAID-Verbunde, welche mit den MD-Tools unter der DLD 6.0 und DLD 6.01 eingerichtet und damit quasi auf die alte Art mit den RAID-Tools Version 0.4x erstellt wurden, werden mangels ausgiebieger Tests nicht berücksichtigt.

Da sich viele Möglichkeiten der Synchronisation und der Überwachung von RAID-Verbunden auf spezielle Funktionen und Optionen der neuen RAID-Tools beziehen, kann man die im folgenden geschilderten Prozeduren nicht mal näherungsweise auf RAID-Verbunde, die mit den alten RAID-Tools Version 0.4x eingerichtet wurden, beziehen. Solange das noch nicht getestet wurde, sind Sie hier auf sich gestellt.

10.1 Linear (Append) Modus und RAID-0 (Stripping)

Hier ist die Möglichkeit der Rekonstruktion von Daten schnell erklärt. Da diese RAID-Modi keine Redundanz ermöglichen, sind beim Ausfall einer Festplatte alle Daten verloren. Definitiv gilt das für RAID-0; beim Linear Modus können Sie eventuell mit viel Glück noch einige Daten einer RAID-Partition sichern, so es denn die erste Partition ist und Sie irgendwie in der Lage sind, die Partition einzeln zu Mounten. Da RAID-0 die Daten parallel schreibt, erhalten Sie - auch wenn Sie eine Partition des RAID-0 Verbundes gemountet bekommen - niemals mehr als einen zusammenhängenden Block. Meiner Meinung nach ist an dieser Stelle eine Datenrettung von einem RAID-0 Verbund unmöglich.

10.2 RAID-1, RAID-4 und RAID-5 ohne Spare-Disk

Alle drei RAID-Modi versprechen Redundanz. Doch was muß gezielt getan werden, wenn hier eine Festplatte oder eine RAID-Partition ausfällt? Generell bieten sich einem zwei Wege, um die defekte Festplatte durch eine neue zu ersetzen. Bedenken Sie bei dieser Beschreibung, daß RAID-Partition und Festplatte synonym verwendet wird. Ich gehe von einer Partition je Festplatte aus. Die eine Methode beschreibt den »heißen« Weg. Hierbei wird die Festplatte im laufenden Betrieb ausgetauscht. Die andere Methode beschreibt entsprechend den sicheren Weg. Beide Möglichkeiten haben für die RAID-Modi 1, 4 und 5 funktioniert. Seien Sie insbesondere mit dem »heißen« Weg trotzdem sehr vorsichtig, da die Benutzung dieser Befehle nicht Hot Plugging fähige Hardware zerstören könnte.

Der »heiße« Weg (Hot Plugging)

Vorab muß gesagt werden, daß Hot Plugging unter Linux auch vom SCSI-Treiber unterstützt werden muß, versuchen Sie Hot Plugging aber niemals mit (E)IDE Laufwerken. Zwar sollen alle Linux SCSI-Treiber des hier verwendeten 2.2.10er Kernels Hot Plugging unterstützen, jedoch ist dies nur bei dem Adaptec und Symbios Treiber sicher der Fall.

Auch sollte Ihre Hardware und damit Ihr SCSI Kontroller und Ihre SCSI-Festplatten Hot Plugging unterstützen. Wie man das herausbekommt, ist schwer zu sagen, allerdings hat es auch mit einem fünf Jahre alten Symbios Kontroller und mehreren IBM-DCAS-UW Festplatten funktioniert. Generell ist die meiste im Consumer Bereich verfügbare Hardware nicht Hot Plugging fähig. Die zu Testzwecken eingesetzten UW-Wechselrahmen sind mit 250,- DM zwar recht günstig, haben aber die Hot Plugging Tests alle klaglos verkraftet.

Haben Sie irgendwelche Zweifel und sind nicht gezwungen, Hot Plugging zu nutzen, dann lesen Sie hier gar nicht erst weiter, sondern springen Sie sofort zu der »sicheren« Beschreibung. Auch ergeben sich aus meinen erfolgreichen Tests keine Garantien für irgendeinen Erfolg. Mit allem Nachdruck muß daher an dieser Stelle auf die Möglichkeit der Zerstörung Ihrer Hardware durch die Benutzung von Hot Plugging mit ungeeigneter Hardware hingewiesen werden.

Ihr RAID-1, 4 oder 5 ist gemäß einer der vorherigen Anleitungen erstellt worden und betriebsbereit. Um den ganzen Ablauf zu vereinfachen, wird ab jetzt nur noch von einem RAID-5 ausgegangen und auch die Beispielauszüge mittels cat /proc/mdstat beschreiben ein RAID-5; RAID-1 und RAID-4 Benutzer können analog verfahren, richten aber bitte eine erhöhte Aufmerksamkeit auf die Unterscheidung und Abstraktion der Meldungsparameter.

Das Beispiel-RAID-5 ist in der /etc/raidtab so eingetragen:

raiddev /dev/md0
        raid-level              5
        nr-raid-disks           4
        nr-spare-disks          0
        parity-algorithm        left-symmetric
        persistent-superblock   1
        chunk-size              32

        device                  /dev/sda5
        raid-disk               0
        device                  /dev/sdb6
        raid-disk               1
        device                  /dev/sdc6
        raid-disk               2
        device                  /dev/sdd1
        raid-disk               3

cat /proc/mdstat meldet einen ordentlich laufenden RAID-5-Verbund:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/4] [UUUU] 
unused devices: <none> 

Jetzt fällt die Festplatte /dev/sdd komplett aus. Beim nächsten Zugriff auf das RAID-5 wird der Mangel erkannt, der SCSI-Bus wird resetet und das RAID-5 läuft relativ unbeeindruckt weiter. Die defekte RAID-Partition wird lediglich mit »(F)« gekennzeichnet und fehlt in den durch ein »U« markierten gestarteten RAID-Partitionen:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3](F) sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/3] [UUU_] 
unused devices: <none> 

Jetzt möchten Sie wieder ein redundantes System bekommen, ohne den Rechner neu booten zu müssen und ohne Ihr gemountetes RAID-5 stoppen zu müssen. Entfernen Sie dafür die defekte RAID-Partition (/dev/sdd1) mittels des bei den RAID-Tools beiliegenden Hilfsprogramms raidhotremove aus dem aktiven RAID-Verbund (/dev/md0):

raidhotremove /dev/md0 /dev/sdd1 

Ein cat /proc/mdstat hat sich nun dahingehend verändert, daß die defekte Partition komplett rausgenommen wurde und Ihnen eine fehlende Partition, um Redundanz zu gewährleisten, mit »[UUU_]« angezeigt wird:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5,
 32k chunk, algorithm 2 [4/3] [UUU_] 
unused devices: <none> 

Tauschen Sie jetzt Ihre hoffentlich in einem guten Wechselrahmen befindliche defekte Festplatte gegen eine neue aus und erstellen Sie eine Partition darauf. Anschließend geben Sie den Befehl, diese neue RAID-Partition wieder in das laufende Array einzubinden:

raidhotadd /dev/md0 /dev/sdd1 

Der Daemon raid5d macht sich nun daran, die neue RAID-Partition mit den anderen zu synchronisieren:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[4] sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/3] [UUU_] recovery=7%
finish=4.3min 
unused devices: <none> 

Der Abschluß dieses Vorganges wird mit einem ebenso lapidaren wie beruhigendem »resync finished« quittiert. Eine Kontrolle ergibt tatsächlich ein wieder vollständig redundantes und funktionstüchtiges RAID-5:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/4] [UUUU] 
unused devices: <none> 

Als ob nicht gewesen wäre.

Der sichere Weg

Diese Methode sieht einen Wechsel einer defekten Festplatte in einem System vor, das ruhig für einige Zeit heruntergefahren werden kann.

Ihr RAID-1, 4 oder 5 ist gemäß einer der vorherigen Anleitungen erstellt worden und betriebsbereit. Um den ganzen Ablauf zu vereinfachen, wird ab jetzt nur noch von einem RAID-5 ausgegangen und auch die Beispielauszüge mittels cat /proc/mdstat beschreiben ein RAID-5; RAID-1 und RAID-4 Benutzer können analog verfahren, richten aber bitte eine erhöhte Aufmerksamkeit auf die Unterscheidung und Abstraktion der Meldungsparameter.

Das Beispiel RAID-5 ist in der /etc/raidtab so eingetragen:

raiddev /dev/md0 
        raid-level              5 
        nr-raid-disks           4 
        nr-spare-disks          0 
        parity-algorithm        left-symmetric 
        persistent-superblock   1 
        chunk-size              32 

        device                  /dev/sda5 
        raid-disk               0 
        device                  /dev/sdb6 
        raid-disk               1 
        device                  /dev/sdc6 
        raid-disk               2 
        device                  /dev/sdd1 
        raid-disk               3 

cat /proc/mdstat meldet einen ordentlich laufenden RAID-5-Verbund:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/4] [UUUU] 
unused devices: <none> 

Jetzt fällt die Festplatte /dev/sdd komplett aus. Beim nächsten Zugriff auf das RAID-5 wird der Mangel erkannt, der SCSI-Bus wird resetet und das RAID-5 läuft relativ unbeeindruckt weiter. Die defekte RAID-Partition wird lediglich mit »(F)« gekennzeichnet:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3](F) sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/3] [UUU_] 
unused devices: <none> 

Jetzt möchten Sie wieder ein redundantes System bekommen. Fahren Sie dazu Ihren Rechner herunter und tauschen Sie die defekte Festplatte gegen eine neue aus. Nach dem Startup müssen Sie auf der neuen Festplatte eine Partition einrichten. Ist die neue Partitionsangabe identisch mit der auf der defekten Festplatte, brauchen Sie nichts weiter zu machen, ansonsten müssen Sie noch Ihre /etc/raidtab anpassen. Nun stoppen Sie Ihren RAID-5 Verbund, falls er läuft:

umount /dev/md0 
raidstop /dev/md0 

Geben Sie den Befehl, um die neue RAID-Partition wieder in das RAID-5 einzuarbeiten und die »persistent-superblocks« neu zu schreiben. Hierbei werden keine vorhandenen Daten auf dem bestehenden RAID-5 Verbund zerstört, es sei denn, Sie haben sich bei der eventuell nötigen Aktualisierung der /etc/raidtab vertan. Prüfen Sie alles dringend nochmal.

mkraid -f /dev/md0 

Inspizieren Sie anschließend den Verlauf wieder mittels cat /proc/mdstat:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/4] [UUUU] resync=57%
finish=1.7min 
unused devices: <none> 

Der Abschluß dieses Vorganges wird mit einem ebenso lapidaren wie beruhigendem »resync finished« quittiert. Eine Kontrolle ergibt tatsächlich ein wieder vollständig redundantes und funktionstüchtiges RAID-5:

Personalities : [linear] [raid0] [raid1] [raid5] [hsm] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks
 level 5, 32k chunk, algorithm 2 [4/4] [UUUU] 
unused devices: <none> 

Das RAID-5 Array ist durch den mkraid Aufruf bereits aktiviert worden und muß lediglich wieder in den Verzeichnisbaum gemountet werden:

mount /dev/md0 /mount-point 

Hiermit haben Sie wieder ein vollständig redundantes und lauffähiges RAID-5 Array hergestellt.

10.3 RAID-1, RAID-4 und RAID-5 mit Spare-Disk

Der »heiße« Weg (Hot Plugging)

Um bei einem RAID-1, 4 oder 5 Verbund mit einer Spare-Disk per Hot Plugging, also ohne den RAID-Verbund auch nur herunterzufahren, eine RAID-Partition per raidhotremove aus dem laufenden Verbund zu entfernen und durch eine neue RAID-Partition zu ersetzen, sind die aktuellsten RAID-Tools erforderlich. Erst diese haben durch das neue Programm raidsetfaulty die Möglichkeit, die ausgefallene RAID-Partition als defekt zu markieren und so den Befehl raidhotremove zu ermöglichen. Zu beachten ist hier, daß bei einem Festplattenausfall die Spare-Disk sofort eingearbeitet und das System anschließend auch wieder Redundant ist und somit natürlich nicht die Spare-Disk, sondern die ausgefallene RAID-Partition als defekt markiert, ausgetauscht und als neue Spare-Disk wieder eingesetzt werden muß.

Auch an dieser Stelle muß auf die Gefahr der teilweisen oder vollständigen Zerstörung Ihrer Hardware hingewiesen werden, sollte diese nicht Hot Plugging fähig sein. Haben Sie die Möglichkeit zu wählen, benutzen Sie immer die sichere Methode.

Der sichere Weg

Ein normal laufender RAID-5 Verbund mit Spare-Disk sollte bei einem RAID-Verbund /dev/md0 mit den RAID-Partitionen /dev/sdb1, /dev/sdc1 und /dev/sdd1 plus der Spare-Disk /dev/sde1 unter /proc/mdstat folgendes zeigen:

 
Personalities : [raid5] 
read_ahead 1024 sectors 
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0] 782080 blocks
 level 5, 32k chunk, algorithm 2 [3/3] [UUU] 
unused devices: <none> 

Durch das Entriegeln des Wechselrahmens wird ein Defekt der Partition /dev/sdc1 simuliert. Sobald wieder auf den RAID-5 Verbund zugegriffen wird, wird der Defekt bemerkt, der SCSI-Bus resetet und der Recovery-Prozeß über den raid5d Daemon beginnt. Ein cat /proc/mdstat zeigt jetzt folgendes:

Personalities : [raid5] 
read_ahead 1024 sectors 
md0 : active raid5 sde1[3] sdd1[2] sdc1[1](F) sdb1[0] 782080 blocks 
 level 5, 32k chunk, algorithm 2 [3/2] [U_U] recovery=4%
 finish=15.4min 
unused devices: <none> 

Nach dem erfolgreichen Ende des Recovery-Prozesses liefert cat /proc/mdstat folgendes:

Personalities : [raid5] 
read_ahead 1024 sectors 
md0 : active raid5 sde1[3] sdd1[2] sdc1[1](F) sdb1[0] 782080 blocks 
 level 5, 32k chunk, algorithm 2 [3/2] [U_U] 
unused devices: <none> 

Den neuen Zustand sollte man nun sichern, indem man

umount /dev/md0

ausführt. Mit

raidstop /dev/md0

wird der aktuelle Zustand auf die RAID-Partitionen geschrieben. Ein

raidstart -a
cat /proc/mdstat

zeigt dann:

Personalities : [raid5] 
read_ahead 1024 sectors 
md0 : active raid5 sdd1[2] sde1[1] sdb1[0] 782080 blocks level 5,
 32k chunk, algorithm 2 [3/3] [UUU] 
unused devices: <none> 

Wie man erkennen kann, fehlt die defekte Partition /dev/sdc1[1](F), dafür hat die Spare-Disk /dev/sde1[1] deren Funktion übernommen. Das ist jetzt der aktuelle Zustand des RAID-5. Nun wird die defekte Festplatte ersetzt, indem man den Rechner herunterfährt und den Festplattenaustausch durchführt. Wenn man neu bootet, geht zunächst nichts mehr. Nun bloß keine Panik kriegen, sondern erstmal der /etc/raidtab Datei den neuen Zustand beibringen:

raiddev /dev/md0 
        raid-level              5 
        nr-raid-disks           3 
        nr-spare-disks          1 
        persistent-superblock   1 
        parity-algorithm        left-symmetric 
        chunk-size              32 

        device                  /dev/sdb1 
        raid-disk               0 
        device                  /dev/sde1 
        raid-disk               1 
        device                  /dev/sdd1 
        raid-disk               2 
        device                  /dev/sdc1 
        spare-disk              0 

Anschließend bringt ein

mkraid -f /dev/md0

dem RAID-Verbund die neue Konstellation bei, ohne dabei die Daten auf dem RAID-5 Verbund zu beschädigen, solange Sie sich in der Datei /etc/raidtab nicht vertan haben. Schauen Sie sich die Einträge in Ihrem eigenen Interesse bitte nochmal genau an. Ein cat /proc/mdstat zeigt jetzt die Resynchronisation. Man sieht jetzt die neue Zuordnung der RAID-Partitionen im RAID-Verbund, die exakt den neuen Stand der Zuordnung darstellen sollte.

Personalities : [raid5] 
read_ahead 1024 sectors 
md0 : active raid5 sdc1[3] sdd1[2] sde1[19] sdb1[0] 782080 blocks
 level 5, 32k chunk, algorithm 2 [3/3] [UUU] resync=36%
 finish=6.7min 
unused devices: <none> 

Am Ende erscheint:

raid5: resync finished 

Ein cat /proc/mdstat sieht nun so aus:

Personalities : [raid5] 
read_ahead 1024 sectors 
md0 : active raid5 sdc1[3] sdd1[2] sde1[1] sdb1[0] 782080 blocks
 level 5, 32k chunk, algorithm 2 [3/3] [UUU] 
unused devices: <none> 

Nun ruft man

raidstop /dev/md0

auf, um alles auf die Platten zu schreiben. Hat der Kernel das RAID-Array bereits gestartet (persistent-superblock 1), kann man mit einem

mount /dev/md0 /mount-point

den RAID-Verbund wieder in das Dateisystem einhängen. Ansonsten ist vorher noch folgender Befehl notwendig:

raidstart /dev/md0

Hiermit haben Sie wieder ein vollständiges laufendes RAID-5 Array hergestellt.


Inhalt