Miklix

Ersetzen eines ausgefallenen Laufwerks in einem mdadm-Array unter Ubuntu

Veröffentlicht: 15. Februar 2025 um 22:01:14 UTC

Wenn bei Ihnen die gefürchtete Situation eines Laufwerkausfalls in einem mdadm-RAID-Array vorliegt, erklärt dieser Artikel, wie Sie es auf einem Ubuntu-System richtig ersetzen.


Diese Seite wurde maschinell aus dem Englischen übersetzt, um sie so vielen Menschen wie möglich zugänglich zu machen. Leider ist die maschinelle Übersetzung noch keine ausgereifte Technologie, so dass Fehler auftreten können. Wenn Sie es vorziehen, können Sie sich die englische Originalversion hier ansehen:

Replacing a Failed Drive in an mdadm Array on Ubuntu

Die Informationen in diesem Beitrag basieren auf Ubuntu 18.04 und der in seinen Repositories enthaltenen Version von mdadm; zum Zeitpunkt des Schreibens war dies v4.1-rc1. Sie können für andere Versionen gültig sein oder nicht.

Ich hatte vor kurzem einen plötzlichen Laufwerksausfall auf meinem Heimdateiserver, der aus neun Laufwerken in einem mdadm RAID-6-Array besteht. Das ist immer beängstigend, aber glücklicherweise konnte ich schnell ein Ersatzlaufwerk beschaffen, das 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 Laufwerke sind echte NAS-Laufwerke (Seagate IronWolf), während der Rest Desktop-Laufwerke (Seagate Barracuda) sind. Wenig überraschend war es eines der Desktop-Laufwerke, das den Geist aufgegeben hatte (allerdings nach fast drei Dienstjahren). Es war völlig tot; nachdem ich es in ein Desktop-USB-Gehäuse gesteckt hatte, kam nur ein beunruhigendes Klickgeräusch von ihm, und weder Ubuntu 20.04 noch Windows 10 konnten es erkennen.

Nun gut, nun zum Ersatzteil (und ja, das neue Laufwerk, das ich gekauft habe, war ein IronWolf, Lektion gelernt) – so beängstigend es auch ist, ein Laufwerk in einem laufenden Array zu verlieren, es ist noch beängstigender, wenn man nicht weiß, wie man es richtig ersetzt. Es ist nicht das erste Mal, dass ich ein ausgefallenes Laufwerk in einem mdadm-Array ersetzen musste, aber zum Glück kommt das so selten vor, dass ich normalerweise die richtigen Befehle nachschlagen muss. Dieses Mal habe ich beschlossen, meinen eigenen kleinen Leitfaden für zukünftige Referenzzwecke zusammenzustellen.

Wenn Sie also die gefürchtete Fehler-E-Mail von mdadm erhalten, müssen Sie zunächst feststellen, welches Laufwerk ausgefallen ist. Natürlich 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 Booten des Computers ändern können.

Wenn Sie nicht einmal sicher sind, welcher Gerätename ausgefallen ist, können Sie den folgenden Befehl verwenden, um dies herauszufinden (ersetzen Sie /dev/md0 durch Ihr RAID-Gerät):

mdadm -–query -–detail /dev/md0

Wie erwähnt war es in meinem Fall /dev/sdf, also machen wir damit weiter.

Anschließend können Sie versuchen, die Seriennummer des ausgefallenen Laufwerks zu ermitteln, indem Sie den folgenden Befehl eingeben:

smartctl -–all /dev/sdf | grep -i 'Serial'

(wenn smartctl nicht gefunden wird, müssen Sie das smartmontools-Paket auf Ubuntu installieren)

Die Seriennummer kann dann mit den Seriennummern auf dem physischen Etikett der Laufwerke verglichen werden, um herauszufinden, welches Laufwerk ausgefallen ist.

Dieses Mal hatte ich allerdings nicht so viel Glück. Das Laufwerk war völlig tot und weigerte sich sogar, SMART oder andere Daten, einschließlich der Seriennummer, bereitzustellen.

Da ich physischen Zugriff auf den Server hatte (was man wirklich braucht, wenn man ein physisches Laufwerk selbst austauschen will, nehme ich an ;-)) und der Server tatsächlich lief, als die Festplatte ausfiel (und dank der RAID-6-Redundanz weiterhin einwandfrei lief), habe ich mich für die wirklich primitive, aber eigentlich sehr effektive und naheliegende Methode entschieden, einfach eine große Datei auf den Server zu kopieren und zu beobachten, welche HDD-Leuchte nicht flackerte. Innerhalb weniger Sekunden hatte ich den Übeltäter identifiziert.

Bevor Sie nun das physische Laufwerk herausreißen, ist es eine gute Idee, mdadm formell über diese Absicht zu informieren, indem Sie diesen Befehl ausführen (ersetzen Sie die Gerätenamen ggf. durch Ihre eigenen):

mdadm -–manage /dev/md0 -–remove /dev/sdf1

Bei Erfolg antwortet mdadm mit der Meldung, dass das Laufwerk im laufenden Betrieb entfernt wurde, offenbar weil das virtuelle RAID-Gerät zu diesem Zeitpunkt tatsächlich ausgeführt wird.

Wenn dies mit einer Fehlermeldung wie „Gerät oder Ressource belegt“ fehlschlägt, kann es sein, dass mdadm das Laufwerk tatsächlich nicht als komplett ausgefallen registriert hat. Um dies zu erreichen, geben Sie diesen Befehl ein (denken Sie auch hier daran, die Gerätenamen ggf. durch Ihre eigenen zu ersetzen):

mdadm --manage /dev/md0 --fail /dev/sdf

Danach sollten Sie das Gerät mit dem vorherigen Befehl aus dem Array entfernen können.

Jetzt ist es an der Zeit, das Laufwerk tatsächlich auszutauschen. Wenn Sie wirklich, wirklich – also wirklich – sicher sind, dass Ihr Computer und Controller Hot Swapping unterstützen, können Sie dies tun, ohne den Computer herunterzufahren. Das wäre die Vorgehensweise bei kritischen Produktionssystemen, die auf echter, richtiger Serverhardware laufen, von der Sie sicher wissen, dass sie damit umgehen kann. Mein Heimdateiserver basiert jedoch auf einem Desktop-Motherboard für Verbraucher mit ein paar Semi-Noname-SATA-Controllern in den PCIe-Steckplätzen, um mehr SATA-Anschlüsse bereitzustellen.

Obwohl SATA im Allgemeinen Hot Swapping unterstützen sollte , wollte ich bei diesem Setup kein Risiko eingehen und entschied mich daher dafür, die Maschine während des Laufwerksaustauschs herunterzufahren.

Bevor Sie das tun, sollten Sie das RAID-Gerät in der Datei /etc/fstab auskommentieren, damit Ubuntu nicht versucht, es beim nächsten Start automatisch zu mounten, da es sonst aufgrund des degradierten RAID-Arrays hängen bleiben und Sie in den Wiederherstellungsmodus zwingen könnte. Bei einem Desktop-System ist das vielleicht kein großes Problem, aber ich betreibe diesen Server ohne angeschlossenen Monitor oder Tastatur, daher wäre das ein bisschen mühsam.

Nachdem Sie die Maschine mit dem brandneuen Laufwerk gebootet haben, verwenden Sie lsblk oder eine andere Methode, um es zu identifizieren. Wenn Sie sonst nichts geändert haben, wird es wahrscheinlich (aber nicht unbedingt ) denselben Namen erhalten wie das Laufwerk, das Sie ersetzt haben. In meinem Fall war das so, also heißt das neue Laufwerk auch /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 genau gleich sind. Wenn Sie Ihr Array stattdessen auf physischen Geräten ausführen, können Sie diesen Schritt überspringen.

Ich habe zu diesem Zweck sgdisk verwendet und die Partitionstabelle von /dev/sdc nach /dev/sdf kopiert. Achten Sie darauf, die Gerätenamen entsprechend Ihren eigenen Namen zu ersetzen.

Beachten Sie hier die Reihenfolge: Sie listen zuerst das „Ziel“-Laufwerk auf! Das ist für mich etwas kontraintuitiv, aber stellen Sie sicher, dass Sie es richtig machen, damit es nicht noch zu einem weiteren Laufwerksausfall im Array kommt ;-)

sgdisk -R /dev/sdf /dev/sdc

Um UUID-Konflikte zu vermeiden, generieren Sie dann neue UUIDs für das neue Laufwerk:

sgdisk -G /dev/sdf

Und jetzt ist es endlich an der Zeit, das neue Laufwerk zum Array hinzuzufügen und die Wiederaufbauparty zu starten! (Okay, es ist nicht wirklich eine Party, es ist eigentlich ein ziemlich langsamer und nervenaufreibender Prozess, da Sie wirklich, wirklich nicht wollen, dass zu diesem Zeitpunkt noch ein Laufwerk ausfällt. Bier könnte jedoch helfen)

Um das neue Laufwerk zum Array hinzuzufügen, geben Sie diesen Befehl ein (ersetzen Sie die Gerätenamen ggf. durch Ihre eigenen):

mdadm -–manage /dev/md0 -–add /dev/sdf1

Wenn alles gut geht, wird das Laufwerk ohne Probleme zum Array hinzugefügt. Ich glaube, es wird standardmäßig als „Hot Spare“ hinzugefügt, aber da in diesem Array eine Festplatte fehlt (die, die ausgefallen ist), wird sie sofort in Betrieb genommen und der Wiederherstellungsprozess beginnt.

Sie können es folgendermaßen im Auge behalten:

watch cat /proc/mdstat

Dies wird wahrscheinlich eine Weile dauern; auf meinem einfachen Server (der größtenteils auf Consumer-Hardware und Desktop-Laufwerken basiert, wohlgemerkt) konnte er knapp 100 MB/s erreichen. Bedenken Sie, dass es sich um RAID 6 handelt, sodass bei einem Neuaufbau viele Paritätsberechnungen erforderlich sind; ein RAID 10 wäre viel schneller gewesen. Diese spezielle Maschine verfügt über eine AMD A10 9700E Quad-Core-CPU (das „E“ bedeutet, dass es sich um ein untertaktetes, energieeffizientes Modell handelt, also nicht superschnell), nur um Ihnen eine Vorstellung davon zu geben, was Sie erwarten können. Mit den neun 8-TB-Laufwerken in meinem Setup dauerte der vollständige Neuaufbau etwas mehr als 24 Stunden.

Während des Wiederaufbaus können Sie das Dateisystem auf dem Array mounten und es wie gewohnt verwenden, wenn Sie möchten, aber ich bevorzuge es, es mit dem Wiederaufbau zu belassen, bis dieser abgeschlossen ist. Bedenken Sie, dass, wenn ein Laufwerk ausfällt, bald ein anderes folgen kann. Sie möchten also, dass der Wiederaufbau so schnell wie möglich abgeschlossen wird, da Sie wirklich nicht möchten, dass währenddessen ein weiteres Laufwerk ausfällt. Belasten Sie es daher nicht mit anderen IO, die nicht unbedingt erforderlich sind.

Sobald dies erledigt ist, fügen Sie es wieder zu Ihrer Datei /etc/fstab hinzu, starten Sie neu und genießen Sie Ihre Dateien :-)

Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Bang Christensen

Über den Autor

Mikkel Bang Christensen
Mikkel ist der Schöpfer und Eigentümer von miklix.com. Er verfügt über mehr als 20 Jahre Erfahrung als professioneller Computerprogrammierer/Softwareentwickler und ist derzeit in Vollzeit für ein großes europäisches IT-Unternehmen tätig. Wenn er nicht gerade bloggt, verbringt er seine Freizeit mit einer Vielzahl von Interessen, Hobbys und Aktivitäten, was sich bis zu einem gewissen Grad in der Vielfalt der auf dieser Website behandelten Themen widerspiegelt.