Ersetzen eines ausgefallenen Laufwerks in einem mdadm-Array unter Ubuntu
Veröffentlicht: 15. Februar 2025 um 22:01:14 UTC
Zuletzt aktualisiert: 12. Januar 2026 um 08:49:52 UTC
Falls Sie sich in der gefürchteten Situation befinden, dass eine Festplatte in einem mdadm RAID-Array ausfällt, erklärt Ihnen dieser Artikel, wie Sie diese auf einem Ubuntu-System korrekt ersetzen.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Die Informationen in diesem Beitrag basieren auf Ubuntu 18.04 und der in den zugehörigen Repositories enthaltenen Version von mdadm; zum Zeitpunkt der Erstellung dieses Beitrags war dies Version 4.1-rc1. Ob sie auch für andere Versionen gültig sind, ist ungewiss.
Vor Kurzem hatte ich einen plötzlichen Festplattenausfall auf meinem Heimserver, der aus neun Festplatten in einem mdadm RAID-6-Verbund besteht. Das ist immer beunruhigend, aber glücklicherweise konnte ich schnell eine Ersatzfestplatte besorgen, die bereits am nächsten Tag geliefert wurde, sodass ich mit dem Wiederaufbau beginnen konnte.
Ich war zugegebenermaßen etwas zu geizig, als ich den Dateiserver ursprünglich eingerichtet habe; nur zwei der Festplatten sind echte NAS-Festplatten (Seagate IronWolf), der Rest sind Desktop-Festplatten (Seagate Barracuda). Wenig überraschend gab eine der Desktop-Festplatten den Geist auf (nach fast drei Jahren im Einsatz). Sie war komplett tot; nachdem ich sie in ein USB-Gehäuse für den Desktop-PC eingebaut hatte, gab sie nur noch ein beunruhigendes Klickgeräusch von sich, und weder Ubuntu 20.04 noch Windows 10 erkannten sie.
Nun gut, weiter geht's mit dem Ersatzteil (und ja, die neue Festplatte, die ich gekauft habe, war eine IronWolf – daraus habe ich gelernt). So beängstigend es auch ist, eine Festplatte in einem laufenden Array zu verlieren, ist es noch beängstigender, wenn man nicht weiß, wie man sie richtig austauscht. Es ist nicht das erste Mal, dass ich eine defekte Festplatte in einem mdadm-Array ersetzen musste, aber zum Glück kommt das so selten vor, dass ich normalerweise die richtigen Befehle nachschlagen muss. Diesmal habe ich mich entschlossen, eine kleine Anleitung für zukünftige Fälle zu erstellen.
Wenn Sie also die gefürchtete E-Mail mit der Fehlermeldung von mdadm erhalten, müssen Sie zunächst herausfinden, welches Laufwerk ausgefallen ist. Zwar wird Ihnen der Gerätename angezeigt (in meinem Fall /dev/sdf), aber es ist wahrscheinlich nicht offensichtlich, um welches physische Laufwerk es sich tatsächlich handelt, da sich diese Namen beim Hochfahren des Rechners ändern können.
Wenn Sie nicht einmal sicher sind, welches Gerät ausgefallen ist, können Sie dies mit dem folgenden Befehl herausfinden (ersetzen Sie /dev/md0 durch Ihr RAID-Gerät):
Wie bereits erwähnt, war es in meinem Fall /dev/sdf, also fahren wir damit fort.
Anschließend können Sie versuchen, die Seriennummer des defekten Laufwerks mit folgendem Befehl zu ermitteln:
(Falls smartctl nicht gefunden wird, müssen Sie das Paket smartmontools unter Ubuntu installieren.)
Die Seriennummer kann dann mit den Seriennummern auf dem physischen Etikett der Laufwerke verglichen werden, um herauszufinden, welches Laufwerk defekt ist.
Diesmal hatte ich allerdings weniger Glück. Das Laufwerk war komplett defekt und weigerte sich sogar, SMART-Daten oder andere Daten, einschließlich der Seriennummer, auszugeben.
Da ich physischen Zugriff auf den Server hatte (was man ja unbedingt braucht, wenn man selbst eine Festplatte austauschen will ;-)) und der Server zum Zeitpunkt des Festplattenausfalls sogar noch lief (und dank der RAID-6-Redundanz weiterhin einwandfrei funktionierte), entschied ich mich für die zwar simple, aber tatsächlich sehr effektive und naheliegende Methode, einfach eine große Datei auf den Server zu kopieren und zu beobachten, welche Festplatten-LED nicht blinkte. Innerhalb weniger Sekunden hatte ich den Übeltäter identifiziert.
Bevor Sie das physische Laufwerk entfernen, sollten Sie mdadm formell über diese Absicht informieren, indem Sie folgenden Befehl ausführen (ersetzen Sie die Gerätenamen gegebenenfalls durch Ihre eigenen):
Bei Erfolg antwortet mdadm mit einer Meldung, dass das Laufwerk „im laufenden Betrieb entfernt“ wurde, offenbar weil das virtuelle RAID-Gerät zu diesem Zeitpunkt tatsächlich in Betrieb ist.
Falls eine Fehlermeldung wie „Gerät oder Ressource belegt“ erscheint, hat mdadm das Laufwerk möglicherweise noch nicht als vollständig ausgefallen registriert. Um dies zu erzwingen, führen Sie folgenden Befehl aus (ersetzen Sie dabei gegebenenfalls die Gerätenamen durch Ihre eigenen):
Anschließend sollten Sie das Gerät mit dem vorherigen Befehl aus dem Array entfernen können.
Jetzt ist es an der Zeit, die Festplatte tatsächlich auszutauschen. Wenn Sie sich absolut sicher sind, dass Ihr Rechner und Controller Hot-Swapping unterstützen, können Sie dies im laufenden Betrieb durchführen. Das wäre die empfohlene Vorgehensweise bei kritischen Produktionssystemen, die auf professioneller Serverhardware laufen, von der Sie sicher wissen, dass sie Hot-Swapping unterstützt. Mein Heimserver basiert allerdings auf einem Desktop-Mainboard für Endverbraucher mit zwei No-Name-SATA-Controllern in den PCIe-Steckplätzen, um zusätzliche SATA-Anschlüsse bereitzustellen.
Obwohl SATA im Allgemeinen Hot-Swapping unterstützen sollte, wollte ich in dieser Konfiguration kein Risiko eingehen und entschied mich daher dafür, den Rechner während des Festplattenwechsels herunterzufahren.
Vorher empfiehlt es sich, das RAID-Gerät in der Datei `/etc/fstab` auszukommentieren, damit Ubuntu es beim nächsten Start nicht automatisch einbindet. Andernfalls könnte es sich aufhängen und aufgrund des beschädigten RAID-Arrays in den Wiederherstellungsmodus gezwungen werden. Bei einem Desktop-System mag das kein großes Problem sein, aber da ich diesen Server ohne Monitor und Tastatur betreibe, wäre das etwas umständlich.
Nach dem Hochfahren des Rechners mit der neuen Festplatte können Sie diese mit dem Befehl `lsblk` oder einem anderen Tool identifizieren. Wenn Sie sonst nichts geändert haben, erhält sie wahrscheinlich (aber nicht unbedingt) denselben Namen wie die alte Festplatte. In meinem Fall war das der Fall, daher heißt die neue Festplatte ebenfalls `/dev/sdf`.
Da mein Array auf Partitionen und nicht auf physischen Geräten basiert, musste ich die Partitionstabelle von einem funktionierenden Laufwerk auf das neue Laufwerk kopieren, um sicherzustellen, dass sie identisch sind. Wenn Sie Ihr Array stattdessen auf physischen Geräten betreiben, können Sie diesen Schritt überspringen.
Ich habe hierfür sgdisk verwendet und die Partitionstabelle von /dev/sdc nach /dev/sdf kopiert. Ersetzen Sie gegebenenfalls die Gerätenamen durch Ihre eigenen.
Beachten Sie die Reihenfolge: Das Ziellaufwerk wird zuerst aufgeführt! Das ist für mich etwas unintuitiv, aber stellen Sie sicher, dass Sie es richtig machen, damit es nicht zu einem weiteren Laufwerksausfall im Array kommt ;-)
Um UUID-Konflikte zu vermeiden, müssen anschließend neue UUIDs für das neue Laufwerk generiert werden:
Und nun ist es endlich soweit, die neue Festplatte ins Array einzubauen und mit dem Wiederaufbau zu beginnen! (Okay, es ist nicht wirklich ein Vergnügen, sondern eher ein ziemlich langsamer und nervenaufreibender Prozess, da man wirklich keinen weiteren Festplattenausfall zu diesem Zeitpunkt gebrauchen kann. Ein Bier könnte da aber helfen.)
Um das neue Laufwerk zum Array hinzuzufügen, geben Sie folgenden Befehl ein (ersetzen Sie dabei gegebenenfalls die Gerätenamen durch Ihre eigenen):
Wenn alles planmäßig verläuft, wird das Laufwerk problemlos in das Array integriert. Es wird meines Wissens standardmäßig als „Hot Spare“ hinzugefügt, da dem Array jedoch eine Festplatte fehlt (die ausgefallene), wird es sofort verwendet und der Wiederherstellungsprozess startet.
Sie können es folgendermaßen im Auge behalten:
Das wird wahrscheinlich eine Weile dauern; auf meinem einfachen Server (der größtenteils aus Consumer-Hardware und Desktop-Festplatten besteht) erreichte ich knapp 100 MB/s. Beachten Sie, dass es sich um RAID 6 handelt, daher sind beim Wiederaufbau viele Paritätsberechnungen nötig; RAID 10 wäre deutlich schneller gewesen. Dieser Rechner hat einen AMD A10 9700E Quad-Core-Prozessor (das „E“ steht für ein untertaktetes, energieeffizientes Modell, also nicht besonders schnell), nur um Ihnen eine Vorstellung von der zu erwartenden Leistung zu geben. Mit den neun 8-TB-Festplatten in meinem System dauerte der vollständige Wiederaufbau etwas über 24 Stunden.
Während des Wiederaufbaus können Sie das Dateisystem auf dem Array einbinden und wie gewohnt verwenden, wenn Sie möchten. Ich empfehle jedoch, den Wiederaufbau bis zum Abschluss laufen zu lassen. Bedenken Sie, dass bei einem Festplattenausfall möglicherweise bald eine weitere Festplatte ausfällt. Daher sollte der Wiederaufbau so schnell wie möglich erfolgen, um einen weiteren Festplattenausfall währenddessen unbedingt zu vermeiden. Belasten Sie den Wiederaufbau daher nicht mit unnötigen E/A-Operationen.
Sobald dies erledigt ist, fügen Sie es wieder Ihrer /etc/fstab-Datei hinzu, starten Sie den Computer neu und viel Spaß mit Ihren Dateien :-)
