Wie kann eine noch nicht ausgefallene Festplatte in einem Linux RAID5-Array sicher ersetzt werden?

26

Ich habe ein Software-RAID5-Array (Linux md) auf 4 Festplatten.

Ich möchte eine der Festplatten durch eine neue ersetzen, ohne das Array in einen herabgesetzten Zustand zu versetzen , und wenn möglich online. Wie wäre das möglich?

Es ist wichtig, weil ich nicht möchte:

  • Gehen Sie das Risiko ein, die anderen Festplatten zu belasten, damit sie während des Wiederaufbaus abstürzen können.
  • Gehen Sie das Risiko ein, in einem Zustand ohne Parität zu sein, damit ich für einige Zeit kein Sicherheitsnetz habe.

Ich nehme an, dies online zu tun, ist zu anstrengend und ich sollte einfach dddie Daten der alten Festplatte offline auf die neue kopieren und sie dann ersetzen, aber ich denke, es ist theoretisch möglich ...

Ein wenig Kontext : Diese Festplatten drehen sich seit mehr als 5,5 Jahren fast ununterbrochen. Sie arbeiten im Moment noch einwandfrei und bestehen alle den (langen) SMART-Selbsttest. Ich habe jedoch Grund zu der Annahme, dass eine dieser 4 Festplatten nicht mehr lange hält (vermuteter prädiktiver Ausfall).

Totor
quelle

Antworten:

36

Mdadm verwenden 3.3

Seit Version mdadm3.3 (veröffentlicht am 3. September 2013) können Sie mit einem Kernel ab Version 3.2 wie folgt vorgehen:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1ist das Gerät, das Sie ersetzen möchten, sdc1ist das bevorzugte Gerät und muss in Ihrem Array als Ersatzgerät deklariert werden.

Die --withOption ist optional. Falls nicht angegeben, werden alle verfügbaren Ersatzlaufwerke verwendet.

Ältere mdadm-Version

Hinweis: Sie benötigen noch einen 3.2+ Kernel .

Fügen Sie zunächst ein neues Laufwerk als Ersatzlaufwerk hinzu (ersetzen Sie md0und sdc1durch Ihr RAID- bzw. Festplattengerät):

# mdadm /dev/md0 --add /dev/sdc1

Initiieren Sie dann einen solchen Vorgang zum Ersetzen von Kopien ( sdd1das fehlerhafte Gerät):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

Ergebnis

Das System kopiert alle lesbaren Blöcke von sdd1nach sdc1. Wenn es zu einem unlesbaren Block kommt, wird er aus der Parität rekonstruiert. Sobald der Vorgang abgeschlossen ist, wird das frühere Ersatzlaufwerk (hier sdc1:) aktiviert, und das fehlerhafte Laufwerk wird als fehlerhaft markiert (F), damit Sie es entfernen können.

Hinweis: Kredit geht an Frostschutz und Ansgar Esztermann , die die ursprüngliche Lösung gefunden (siehe die doppelte Frage ).

Ältere Kerne

Andere Antworten schlagen vor:

  • Johnny ‚s Ansatz : convert Array RAID6, "Ersetzen" die Scheibe, dann zurück zu RAID5,
  • Hauke Laging ‚s Ansatz : kurz auf die Platte aus dem Array RAID5 entfernen, macht es Teil einer RAID1 (Mirror) mit der neuen Festplatte und fügen Sie diesen Spiegel Fahrt zurück zum RAID5 - Array (theoretischen) ...
Totor
quelle
2
mdadm --addwird noch gebraucht bevor --replacees klappt. ( mdadm3.3, Ubuntu 15.10). Wenn Sie das tun , --addnach --replace, wird das Kopieren beginnen, sobald ein Ersatz hinzugefügt wird. (Das Gerät bleibt als "Austausch gewünscht" markiert).
Peter Cordes
3

Dies kann möglich sein, um die Anforderungen zu erfüllen

  1. online
  2. Belasten Sie keine Festplatte außer der, die ersetzt werden soll

Aber selbst wenn das Folgende funktioniert, werden Sie wahrscheinlich keine Empfehlung dieser Art "in den Büchern" finden ...

Idee:

  1. Nehmen Sie die alte Festplatte aus dem Array (für einen kurzen Moment): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Erstellen Sie ein neues MD-Gerät (RAID-1) von alten und neuen Festplatten: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. Setzen Sie das RAID-1 wieder in das Array ein (anstelle von / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

Was soll passieren :-):

  1. Das RAID-5 synchronisiert / dev / md42. Dies sollte nicht lange dauern.
  2. Das RAID-5 ist normalerweise wieder betriebsbereit (aber langsamer).
  3. / dev / NEW wird mit / dev / OLD synchronisiert.

Beobachten Sie den Synchronisierungsfortschritt ( cat /proc/mdstatoder mdadm --monitor). Wenn die Synchronisierung abgeschlossen ist, nehmen Sie das RAID-1 aus dem RAID-5 heraus, stoppen Sie das RAID-1, fügen Sie dem RAID-5 erneut / dev / NEW hinzu. Wenn alles in Ordnung ist, überschreiben Sie die mdraid-Superblöcke auf / dev / OLD, um Probleme zu vermeiden:mdadm --zero-superblock

Warnung: Die schnelle RAID-5-Synchronisierung funktioniert möglicherweise nur, wenn Sie eine Bitmap verwenden. Wenn Sie keine haben, sollten Sie zuerst einen Test mit einem Dummy-RAID-5 (ohne Bitmap) durchführen. Oder füge eins hinzu. Zumindest ein externes sollte möglich sein. Andernfalls muss das RAID-5 möglicherweise gestoppt werden, bevor die Geräte gewechselt werden können. Wenn Sie von RAID-5 booten, wird dies jedoch etwas kompliziert.

Hauke ​​Laging
quelle
3

Wenn es Ihnen nichts ausmacht, RAID-6 (2 Paritätsfestplatten anstelle von 1) auszuführen, und wenn Sie mdadmin 3.1.x oder höher ausführen, können Sie Ihr RAID-5-Array in RAID-6 konvertieren , um eine zusätzliche Paritätsfestplatte hinzuzufügen . Dadurch wird das Array jedoch während der Wiederherstellung einer Belastung ausgesetzt. Dies hat einige Auswirkungen auf die Leistung, da beim Schreiben mehr Paritätsfestplatten aktualisiert werden müssen.

Wenn dies jedoch erfolgreich abgeschlossen wurde, können Sie die fehlerhafte Festplatte an ihrem Platz belassen. Wenn die Festplatte letztendlich ausfällt, ist der Paritätsschutz für das Array weiterhin gewährleistet. Ich denke, Sie können das Array von RAID6 zurück auf RAID5 konvertieren, wenn Sie nicht darauf warten, es als RAID6 zu behalten.

Ich kenne keine Online-Methode, um das Array als RAID-5 zu speichern und die Festplatte zu ersetzen, ohne das Array in den herabgesetzten Modus zu versetzen, da ich denke, dass Sie es als fehlgeschlagen markieren müssen, um es zu ersetzen. Möglicherweise ist Ihre Idee, eine DVD zu kopieren, der richtige Weg, dies zu tun.

Johnny
quelle
@haukelaging FYI es ist jetzt möglich seit Kernel 3.2, siehe meine Antwort .
Totor