Homeserver 14: Festplattenausfall im RAID

Im Grunde könnten wir jetzt einfach mal mit dem RAID arbeiten und Daten kopieren. Ich denke aber, bevor wir das tun, sollten wir die Gelegenheit nutzen. Noch ist nichts drauf, was wichtig ist, also können wir auch bedenkenlos experimentieren. Denn was nutzt eine Ausfallsicherheit, wenn man nicht weiß, was passiert, wenn was passiert?

Ergänzungen zum vorherigen Artikel

Zuvor aber will ich noch mal auf ein paar Punkte eingehen, die ich im vorherigen Artikel entweder vergessen habe, oder nur viel zu oberflächlich angesprochen habe.

Superblock

Ihr erinnert euch? Wenn man die Datei mdstat anzeigt, bekommt man in der dritten Zeile die Angabe „super 1.2“. Ich bin nicht weiter darauf eingegangen, dabei ist der Superblock sehr wichtig.

Der Superblock ist ein Datensatz, der auf jede am RAID beteiligte Platte geschrieben wird. Viele Angaben stehen hier drin, wie der Typ des RAID, welcher Algorithmus verwendet wird und dergleichen. Wenn ein RAID gestartet wird, wird dieser Superblock gelesen und dessen Informationen ausgewertet. So können die einzelnen Laufwerke im RAID korrekt zusammengestellt werden.

Die Angabe „super 1.2“ sagt eigentlich nichts weiter aus, als dass die Definition der Version 1.2 des Superblocks verwendet wird.

Was passiert bei Neuinstallation?

Niemals wieder darf auf diesen Laufwerken der Befehl mdadm --create verwendet werden! Es gibt widersprüchliche Texte, wobei manche sagen, es würde nur der Superblock neu erstellt, manche sagen aber, die Daten gingen verloren.

Wenn ihr, aus welchen Gründen auch immer, mal euer Linux neu installieren müsst, ist das RAID erst mal nicht vorhanden. Aber ihr braucht es nicht neu zu erstellen, sondern könnt es ganz einfach wieder zusammenstellen. Hier helfen euch die Superblöcke, die auf den Laufwerken gespeichert sind und die nötigen Informationen des RAIDs beinhalten. Und so stellt ihr euer bisheriges RAID einfach wieder zusammen:

sudo mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1

Fertig! Das RAID ist wieder da und funktioniert auch. Weil aber die Superblocks auf den Festplatten gespeichert sind, würde auch folgender Befehl funktionieren:

sudo mdadm --assemble --scan

Das RAID mit all euren Daten wäre wieder da. Nun müsstet ihr nur noch das Dateisystem einhängen und die fstab editieren. Neu anlegen braucht, und dürft, ihr das Dateisystem nicht, es ist ja schon vorhanden.

Und wie im vorherigen Artikel müsst ihr das RAID nur noch in die Konfigurationsdatei mdadm.conf eintragen. Das ist alles.

Festplatte ausgefallen, was nun?

Ein RAID ersetzt niemals ein Backup! Sichert eure Daten irgendwo auf externen Platten oder auf einem anderen Server. Ein RAID kann euch helfen, beim Ausfall einer Platte weiterarbeiten zu können oder die Daten noch eben schnell sichern zu können. Aber ein RAID schützt euch nicht vor versehentlichem Löschen, Virusbefall oder einer Alien-Invasion. OK, ein Backup schützt euch vor der Alien-Invasion jetzt auch nicht wirklich … 🙂 Gerade ein RAID 5 schützt euch, zumindest für eine gewisse Zeit, vor dem Ausfall einer Platte. Wenn aber zwei Platten ausfallen, was zwar ziemlich unwahrscheinlich ist aber dennoch passieren kann, sind alle Daten weg. Macht also immer ein Backup!

Wenn im RAID 5 also eine Festplatte ausfällt, so kann man dennoch weiter arbeiten. Man sollte die ausgefallene Festplatte aber so schnell wie möglich auswechseln. Denn wenn nun noch eine ausfällt, sind die Daten weg. Man hat zwar ein Backup, aber das wiederherzustellen dauert seine Zeit.

Bei fertigen NAS-Systemen, wie z. B. meinem QNAP NAS, weiß ich, welche Platte defekt ist. Zum Einen sind die Platten durchnummeriert, zum Anderen leuchtet an der defekten Platte ein rotes Lämpchen. Mein Selbstbauserver hat weder feste Laufwerksnummern noch kleine rote Lämpchen, die mir dabei helfen. Wie kriege ich also heraus, welche Platte ausgefallen ist?

Festplattenausfall simulieren

Ich könnte jetzt natürlich einfach zum Server rennen und eines der Festplattenkabel rausziehen. Das ist aber witzlos, weil ich dann ja weiß, welche Platte als kaputt simuliert werden soll. Es geht ja eben gerade darum, dass man das in der Praxis ja nicht weiß. Also werde ich MDADM einfach anweisen, eine der Platten als kaputt zu markieren.

sudo mdadm -f /dev/md0 /dev/sdc1

Somit habe ich MDADM angewiesen, die Platte /dev/sdc1 als kaputt zu markieren. Und Prompt bekomme ich auch schon eine Mail vom Server!

Fail event on /dev/md0:server01
This is an automatically generated mail message from mdadm
running on server01

A Fail event had been detected on md device /dev/md0.

It could be related to component device /dev/sdc1.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb1[0] sdd1[3] sdc1[1](F)
      7813772544 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>

Wie ihr sehen könnt, sagt er mir auch schon, welche Platte evtl. kaputt ist. Die Datei mdstat zeigt dies in der zweiten Zeile an:

md0 : active raid5 sdb1[0] sdd1[3] sdc1[1](F)

Neben sdc1 ist ein F in Klammern, (F). Damit ist die Platte als kaputt markiert, auch in der dritten Zeile, [U_U], wird angezeigt, dass die mittlere Platte kaputt ist.

Übrigens, in der zweiten Zeile, wo sdc1[1] (F) steht, weiß ich nicht, was die Zahl in eckigen Klammern bedeutet. Es ist jedenfalls nicht die Position im RAID. Aber das soll erst mal nicht von Bedeutung sein.

Festplatte aus dem RAID-Verbund entfernen

Bevor wir die Festplatte nun ausbauen können, müssen wir sie erst aus dem RAID-Verbund entfernen.

sudo mdadm -r /dev/md0 /dev/sdc1

Nun ist die Festplatte aus dem RAID entfernt und kann ausgebaut werden.

Finden der Festplatte

Aber welche der 3 ist es denn nun? Wir wollen ja nicht die falsche Platte ausbauen. Das würde dem RAID nicht besonders gut tun.

Das Tool lshw, welches wir früher schon installiert haben, wird uns dabei helfen, die Festplatte zu identifizieren. Sie kann uns sagen, an welchem Port sie angeschlossen ist. Ich habe ja das Layout meiner SATA-Ports beschrieben, und dass die Platte an Port 1 ganz unten, und Port 5 ganz oben im Gehäuse eingebaut ist. Also schauen wir doch mal nach, wo welche Platte angeschlossen ist.

sudo lshw -c disk

Damit werden mir nur die Festplatten angezeigt. Würde ich lshw ohne Parameter ausführen, würde mir alles über jede verbaute Hardware angezeigt werden. Das ist aber jetzt zu viel Information, daher interessiere ich mich zur Zeit nur für die Festplatten.

Auch hier, die Ausgabe ist so umfangreich, dass ich mal nur die Ausgabe der betreffenden Festplatte hier einfüge:

  *-disk:2
       description: ATA Disk
       product: ST4000VN000-1H41
       vendor: Seagate
       physical id: 2
       bus info: scsi@2:0.0.0
       logical name: /dev/sdc
       version: SC46
       serial: S300ZDWJ
       size: 3726GiB (4TB)
       capabilities: gpt-1.00 partitioned partitioned:gpt
       configuration: ansiversion=5 guid=36d24ddd-4bcb-44bf-9de2-97e057ee3e79 sectorsize=4096

Wenn ihr also eine Ausgabe mit mehreren Festplatten bekommt, sucht nach der Zeile „logical name: /dev/sdc“. Ich habe jetzt nur mal diese Festplatte hier eingefügt.

All diese Informationen sind für euch zwar interessant, aber nicht wirklich wichtig. Die einzige Zeile, die uns eigentlich interessiert ist diese hier:

bus info: scsi@2:0.0.0

Aus dieser Zeile interessiert uns auch nur die Zahl direkt hinter dem @-Zeichen, alles andere ist irrelevant. Nun weiß ich, dass die kaputte Platte an Port 2 hängt, somit weiß ich, es ist die zweite Platte von unten. Also schalte ich den Server mal aus und ziehe nun das Kabel ab. Wenn ich den Server wieder hochfahre, müsste das RAID, wenn auch im herabgesetzten Modus, weiter arbeiten.

Das tut es sogar, der Server ist gerade ohne /dev/sdc1 normal hochgefahren, und das RAID funktioniert noch. Allerdings ist jetzt die Ausfallsicherheit nicht mehr da. Fällt jetzt noch eine Platte aus, war es das.

Noch eine Besonderheit am Rande: Die Bezeichnungen /dev/sdc usw. werden dynamisch vergeben. Somit ist /dev/sdd gerade zu /dev/sdc geworden. Das könnte hinterher wichtig sein, wenn ihr eine neue Platte einbaut und partitionieren wollt.

Neue Festplatte einbauen und ins RAID integrieren

Nun baut ihr dort, wo die kaputte Platte war, eine neue, gleichgroße Festplatte ein. Diese muss selbstverständlich noch partitioniert werden. Dies tut ihr, wie ich es im Teil 12 beschrieben habe.

Ich habe jetzt die Festplatte wieder angeschlossen und den Server wieder hochgefahren. Die Laufwerksbezeichnungen haben sich wieder verschoben, /dev/sdc wurde wieder zu /dev/sdd, wie es sich gehört, und die eigentliche Festplatte /dev/sdc ist wieder da, wo sie hingehört.

Partitioniert ist die Festplatte jetzt auch. Nun muss die Platte aber wieder in den RAID-Verbund integriert werden.

sudo mdadm -add /dev/md0 /dev/sdc1

Die Wiederherstellung des RAID-Arrays beginnt sofort von selbst. Dies kann, je nach Anzahl der Platten und der Größe aber schon mal mehrere Stunden dauern. Die Datei mdstat sagt, es könne so um die 470 Minuten dauern. OK, warte ich halt… 🙁

Weiterarbeiten möglich?

Natürlich. Genau wie beim Erstellen des RAIDs, ist das Arbeiten ohne Einschränkungen möglich. Nur die Ausfallsicherheit ist halt nicht gegeben, bis das Array sich wieder komplett synchronisiert hat.

Fazit

Es können eine Vielzahl von Problemen mit einem RAID entstehen. Mit den meisten Sonderfällen hat man in der Regel aber nie zu tun. Daher gehe ich jetzt da auch nicht weiter drauf ein. Der häufigste Fall, also ein Festplattenausfall, kann jeden treffen, daher habe ich diesen auch ausführlich beschrieben. Der wohl wichtigste Aspekt ist, die richtige Platte zu finden, wenn ein Array sich im herabgesetzten Modus befindet. Die falsche Platte auszubauen wäre nicht von Vorteil.

Wenn man aber damit umgehen kann, also die richtige Festplatte herausfinden kann, die ausgetauscht werden muss, und wenn man dann noch ein aktuelles Backup seiner Daten hat, kann einem eigentlich nichts wirklich schlimmes passieren. Dann habt ihr im schlimmsten Fall eine Menge Arbeit und eine Menge Zeit verloren. Aber eure Daten sind weiterhin sicher.

Ausblick

Das Grundgerüst des Servers steht ja und funktioniert auch. Nun müssen wir es noch mit Leben füllen. Als nächstes werden daher auf dem RAID Ordner angelegt und Netzwerkfreigaben erstellt. Dann können wir auch endlich Daten auf das RAID kopieren.