SelfLinux Systemverwaltung Linux Software-RAID HOWTO Abschnitt 10 | SelfLinux-0.13.0

| Linux Software-RAID HOWTO | Autor Formatierung GPL

#### 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 ausgiebiger 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 sehr sehr schwierig.

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

Alle drei RAID-Modi versprechen Redundanz. Doch was muss 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, dass 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.

#### 10.2.1 Der "heiße" Weg (Hot Plugging) ohne Spare-Disk

Vorab muss gesagt werden, dass Hot Plugging unter Linux auch vom SCSI-Treiber unterstützt werden muss, 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 kosten etwa 125,- EUR und haben alle Hot Plugging Tests 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 muss 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:

root@linux ~# 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 level5, 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 1024sectors 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):

root@linux ~# raidhotremove /dev/md0 /dev/sdd1

Ein cat /proc/mdstat hat sich nun dahingehend verändert, dass 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 1024sectors 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:

root@linux ~# 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 1024sectors md0 : active raid5 sdd1[4] sdc6[2] sdb6[1] sda5[0] 633984 blockslevel5, 32k chunk, algorithm 2 [4/3] [UUU_] recovery=7% finish=4.3min unused devices: <none>

Der Abschluss 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 1024sectors md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU] unused devices: <none>

Als ob nicht gewesen wäre.

#### 10.2.2 Der sichere Weg ohne Spare-Disk

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:

root@linux ~# 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 level5, 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 1024sectors 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 entsprechende Partition möglichst auch mit der RAID-Autostart Option durch das fd Flag 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. Weiterhin ist es erforderlich, dass Ihr RAID-Verbund läuft. Ist das nicht bereits während des Bootvorganges erfolgt, müssen Sie selbiges jetzt nachholen:

root@linux ~# raidstart /dev/md0

Jetzt fehlt noch der 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 noch mal. Ansonsten:

root@linux ~# raidhotadd /dev/md0 /dev/sdd1

Dieser Befehl suggeriert zwar, dass hier eine Art Hot Plugging stattfindet, heißt in diesem Zusammenhang aber nichts anderes, als dass eine RAID-Partition in ein vorhandenes RAID-Array eingearbeitet wird. Würden Sie stattdessen den Befehl mkraid mit seinen Parametern aufrufen, würde dies zwar auch zu dem Erfolg führen, ein neues RAID-Array zu erstellen, jedoch dummerweise ohne Daten und damit natürlich auch und vor allem ohne die bisher vorhandenen Daten.

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

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

Der Abschluss 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 1024sectors md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU] unused devices: <none>

Das RAID-5 Array muss nun lediglich wieder in den Verzeichnisbaum gemountet werden, falls Ihr RAID-Array nicht bereits innerhalb der /etc/fstab während des Bootvorganges gemountet wurde:

root@linux ~# 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

#### 10.3.1 Der "heiße" Weg (Hot Plugging) mit Spare-Disk

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, dass 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 muss.

Auch an dieser Stelle muss 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.

#### 10.3.2 Der sichere Weg mit Spare-Disk

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 level5, 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-Prozess ü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 sollten Sie nun sichern, indem Sie

root@linux ~# umount /dev/md0

ausführen. Mit

root@linux ~# raidstop /dev/md0

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

root@linux ~# raidstart -a root@linux ~# 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 Sie erkennen können, 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 Sie den Rechner herunterfahren und den Festplattenaustausch durchführt. Wenn Sie neu booten, geht zunächst nichts mehr. Nun bloß keine Panik kriegen, sondern erst mal der /etc/raidtab Datei den neuen Zustand beibringen:

root@linux # 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

root@linux ~# raidhotadd /dev/md0 /dev/sdc1

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 noch mal 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 level5, 32k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>

Nun ruft man

root@linux ~# 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

root@linux ~# mount /dev/md0 /mount-point

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

root@linux ~# raidstart /dev/md0

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