mdadm raid5 stellt doppelten Festplattenfehler wieder her - mit einem Dreh (Laufwerksreihenfolge)

14

Lassen Sie mich zunächst feststellen, dass ich Fehler gemacht habe und ein Backup für die meisten, aber nicht alle Daten auf diesem RAID erstellt habe. Ich habe immer noch die Hoffnung, den Rest der Daten wiederherzustellen. Ich habe nicht das Geld, um die Laufwerke zu einem Recovery-Experten zu bringen.

Fehler # 0, keine 100% ige Sicherung. Ich kenne.

Ich habe ein mdadmRAID5-System mit 4 x 3 TB. Laufwerke / dev / sd [be], alle mit einer Partition /dev/sd[b-e]1. Mir ist bewusst, dass RAID5 auf sehr großen Laufwerken riskant ist, aber ich habe es trotzdem getan.

Die jüngsten Ereignisse

Das RAID wird nach einem Ausfall von zwei Laufwerken herabgesetzt. Ein Laufwerk [/ dev / sdc] ist wirklich nicht mehr vorhanden, das andere [/ dev / sde] wurde nach einem Aus- und Wiedereinschalten wiederhergestellt, dem RAID jedoch nicht automatisch neu hinzugefügt. So blieb mir ein RAID mit 4 Geräten mit nur 2 aktiven Laufwerken [/ dev / sdb und / dev / sdd].

Fehler Nr. 1: Verwenden Sie keine Festplattenkopien zum Wiederherstellen des RAID. Ich hatte weder die Laufwerke noch die Zeit. Fehler Nr. 2: Der Superblock und mdadm -Edie verbleibenden Laufwerke werden nicht gesichert .

Wiederherstellungsversuch

Ich habe das RAID im herabgesetzten Modus mit wieder zusammengebaut

mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.

Ich konnte dann auf meine Daten zugreifen. Ich habe es durch /dev/sdcein Ersatzteil ersetzt. leeren; identisches Laufwerk.

Ich habe die alte /dev/sdc1aus dem RAID entfernt

mdadm --fail /dev/md0 /dev/sdc1

Fehler 3: Tun Sie dies nicht, bevor Sie das Laufwerk austauschen

Ich habe dann das neue partitioniert /dev/sdcund es dem RAID hinzugefügt.

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

Dann wurde begonnen, das RAID wiederherzustellen. ETA 300 min. Ich verfolgte den Prozess /proc/mdstatbis zu 2% und machte dann andere Sachen.

Überprüfen Sie das Ergebnis

Einige Stunden (aber weniger als 300 Minuten) später überprüfte ich den Prozess. Es hatte auf Grund eines Lesefehlers aufgehört /dev/sde1.

Hier fängt der Ärger erst richtig an

Ich habe dann /dev/sde1aus dem RAID entfernt und es wieder hinzugefügt. Ich kann mich nicht erinnern, warum ich das getan habe. es war spät.

mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1

Wurde /dev/sde1jetzt jedoch als Reserve markiert. Also entschied ich mich, das gesamte Array mit --assume-clean neu zu erstellen, wobei ich dachte, es sei die richtige Reihenfolge und es /dev/sdc1fehlte.

mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1

Das hat funktioniert, aber das Dateisystem wurde beim Einhängen nicht erkannt. (Es sollte EXT4 gewesen sein).

Gerätebestellung

Ich habe dann ein kürzlich erstelltes Backup überprüft /proc/mdstatund die Laufwerksreihenfolge ermittelt.

md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1]
      8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

Ich erinnerte mich dann, dass dieses RAID vor etwa einem Jahr einen Laufwerksverlust erlitten hatte und erholte sich, indem das fehlerhafte Laufwerk durch ein Ersatzlaufwerk ersetzt wurde. Das hat die Gerätereihenfolge möglicherweise ein wenig durcheinander gebracht ... also gab es kein Laufwerk [3], sondern nur [0], [1], [2] und [4].

Ich habe versucht, die Laufwerksreihenfolge mit dem Permute_array-Skript zu finden: https://raid.wiki.kernel.org/index.php/Permute_array.pl, aber das hat nicht die richtige Reihenfolge gefunden.

Fragen

Ich habe jetzt zwei Hauptfragen:

  1. Ich habe alle Superblöcke auf den Laufwerken vermasselt, aber nur Folgendes gegeben:

    mdadm --create --assume-clean
    

    Befehle (also hätte ich die Daten selbst nicht überschreiben dürfen) /dev/sd[bde]1. Habe ich recht, dass das RAID theoretisch wiederhergestellt werden kann (vorausgesetzt, es ist für einen Moment in /dev/sde1Ordnung), wenn ich nur die richtige Gerätereihenfolge finde?

  2. Ist es wichtig, /dev/sde1dass die Gerätenummer [4] im RAID angegeben wird? Wenn ich es mit schaffe

    mdadm --create /dev/md0 --assume-clean -l5 -n4 \
      /dev/sdb1 missing /dev/sdd1 /dev/sde1
    

    es wird die Nummer [3] zugewiesen. Ich frage mich, ob das für die Berechnung der Paritätsblöcke relevant ist. Wie kann ich das Array mit /dev/sdb1[0]fehlender [1] neu erstellen, wenn es sich als wichtig herausstellt /dev/sdd1[2] /dev/sde1[4]? Wenn ich das zum Laufen bringen könnte, könnte ich es im herabgesetzten Modus starten und das neue Laufwerk hinzufügen /dev/sdc1und es erneut synchronisieren lassen.

Es ist in Ordnung, wenn Sie mich darauf hinweisen möchten, dass dies möglicherweise nicht die beste Vorgehensweise war, aber Sie werden feststellen, dass ich dies erkannt habe. Es wäre toll, wenn jemand irgendwelche Vorschläge hat.

Peter Bos
quelle
1
+1 Dies ist eine sehr gut durchdachte und dokumentierte Frage. Ich wünschte, ich hätte eine Antwort für dich.
Grant
Vielen Dank für Ihren Kommentar, ich denke, das ist eine schwierige Frage.
Peter Bos
Haben Sie das aufgegeben oder arbeiten Sie noch daran? Wenn Sie daran arbeiten, mein Rat, durchsuchen Sie alle Laufwerke, die Sie herumliegen, und erstellen Sie einen JBOD auf einem anderen Computer, auf dem Sie DD-Images erstellen können. Es ist viel besser, so damit umzugehen, da Sie es immer wieder versuchen können . (Verwenden Sie LVM und verwenden Sie anschließend die Snapshots, damit Sie den Snapshot weiterhin löschen können und nicht das Ganze erneut kopieren müssen.) Ich war in einem ähnlichen Boot und konnte das Array mit den meisten intakten Daten wiederherstellen.
Regan
Danke für deine Reaktion. Nach einer Weile gab ich dies auf, ersetzte zwei Laufwerke durch neue, stellte 98% aus dem Backup wieder her, akzeptierte den Datenverlust von 2% und ging weiter. Ich benutze jetzt RAID-Z und habe meine Backup-Strategie aktualisiert. So weit, ist es gut.
Peter Bos

Antworten:

3

Um Ihre Fragen zu beantworten,

  1. Kann es wiederhergestellt werden?

    • Das erste ist das erste - STOP, lehne dich zurück und denke nur ein wenig nach. Ja, Algorithmus, Blockgröße und Festplattenreihenfolge sind entscheidend, um das vorhandene Dateisystem ordnungsgemäß wieder zusammenzusetzen. Aber da Sie die Superblöcke überschrieben haben, haben Sie nur noch Versuch und Irrtum.
    • Zweitens, gibt es eine Möglichkeit, das vorherige Festplattenlayout abzurufen? Ich mache immer ein mdadm --detail> backupfile, um das Festplattenlayout an einem sicheren Ort zu halten. Überprüfen Sie dmesg, / var / log auf Hinweise darauf, wie die Festplatten im RAID konfiguriert wurden.
    • Wenn Sie mit der vorherigen Blockgröße und Festplattenreihenfolge übereinstimmen, haben Sie möglicherweise den ext4-Superblock beschädigt - es gibt Möglichkeiten, schnell nach anderen Superblöcken zu suchen (und es gibt ein geschicktes Programm namens TestDisk, das nach Superblöcken vorhandener Dateisysteme sucht und versucht, diese zu durchsuchen manuell: http://www.cgsecurity.org/wiki/Main_Page )
  2. Da sdc neu ist, würde ich weiterhin versuchen, die Assemblierung manuell über die fehlende Klausel durchzuführen, und ja, sde muss in der richtigen Reihenfolge vorliegen, damit die Assemblierung im herabgesetzten Modus erfolgt. Sobald Sie das richtige Layout gefunden haben, kopieren Sie alle Daten aus dem Array und beginnen Sie erneut, um das Layout zu dokumentieren (damit Sie dieses Problem nicht erneut angehen).

Viel Glück

Litch
quelle
1
ext3 / 4 schreibt redundante Superblöcke. Sie können den Superblock-Offset als Argument an mount übergeben oder fsck, um stattdessen die Backup-Superblöcke zu verwenden. Trotzdem sind zwei Laufwerke in einem RAID 5 = Spiel vorbei.
Dmourati
1

Bevor Sie etwas anderes tun, sollten Sie in der Lage sein, für jedes der Laufwerke, die sich in Ihrem Array befanden, ein "mdadm --examine / dev / sdX1" und daraus ein "mdadm --detail / dev / md0" zu bestimmen das genaue Layout.

Ich musste dies nur selbst tun, um ein Synology-Array in einer separaten Frage wiederherzustellen:

Wie stelle ich ein mdadm-Array auf einem Synology NAS mit Laufwerk im Status "E" wieder her?

Edit: Sorry, habe gerade gesehen, dass du gesagt hast, dass du die Superblocks auf allen Laufwerken verloren hast.

Ihre späteren Befehle sehen korrekt aus. Am einfachsten ist es möglicherweise, die Erstellungen bei jeder möglichen Reihenfolge auszuführen und dann zu prüfen, ob Sie das Dateisystem einbinden und schreibgeschützt darauf zugreifen können.

Nathan Neulinger
quelle
1

Diese Frage ist alt und ich bin sicher, niemand kann Ihnen jetzt helfen, aber für andere lesen:

Der gefährlichste Fehler, den Sie gemacht haben, ist nicht der, den Sie nummeriert haben.

mdadm --create ...

auf den Originaldisketten, bevor Sie wissen, was zu tun ist. Dadurch wurden die Metadaten überschrieben, sodass Sie keine Aufzeichnungen über Laufwerksreihenfolge, Datenoffset, Blockgröße usw. haben.

Um dies zu beheben, müssen Sie diese erneut mit den richtigen Werten überschreiben. Der einfachste Weg, dies zu erfahren, besteht darin, sich die Metadaten anzusehen, die Sie jedoch bereits zerstört haben. Der nächste Weg ist zu raten. Erraten Sie die verschiedenen Kombinationen eines solchen Befehls mit unterschiedlichen Werten für eine der Optionen, außer dem, was Sie wissen (4 Geräte, Stufe 5), und auch unterschiedlicher Festplattenreihenfolge:

mdadm --create /dev/md0 --assume-clean --metadata=1.2 --raid-devices=4 --level=5 --layout=... --chunk=512 --data-offset=128M /dev/sdb1 missing /dev/sdd1 /dev/sde1

Da Sie jedoch das richtige Ergebnis NICHT kennen, sollten Sie es nicht auf den alten Festplatten ausführen, um sie weiter zu zerstören, und dabei den gleichen schwerwiegenden Fehler machen. Verwenden Sie stattdessen eine Überlagerung. zum Beispiel dieses Verfahren sollte die Originale sicher zu halten arbeiten.

Wenn Sie einige Argumente gefunden haben, die ein funktionierendes Array erzeugen, das Sie prüfen oder einbinden und überprüfen können (z. B. die Prüfsumme einer Datei prüfen, die groß genug ist, um sich über alle Raid-Mitglieder zu erstrecken, wie eine ISO, die Sie mit ihrer Prüfsumme / pgp hätten speichern sollen Signatur, oder entpacken -t oder gunzip -ta großes Archiv)

Peter
quelle
Vielen Dank. In der Zwischenzeit bin ich zu ZFS (RAIDZ2) übergegangen. Es war jedoch sehr interessant, Ihre Notizen zu lesen. Ich weiß jetzt , dass das Erstellen Befehl hat die Metadaten überschreiben, während ich zu der Zeit angenommen , würde nicht. Außerdem wusste ich nichts über Overlay-Dateien. Das ist wirklich ordentlich! Vielen Dank!
Peter Bos