Wie kann ich Dateien von einem einzelnen heruntergekommenen mdadm raid1-Laufwerk wiederherstellen? "Nicht genug, um das Array zu starten"

7

Kann ein einzelnes raid1-Laufwerk in einem heruntergekommenen / wiederhergestellten Zustand zwangsmontiert werden? Ich möchte alle Dateien wiederherstellen, bevor ich die gefährliche Operation zum Koppeln und Wiederherstellen durchführe. Soweit ich das beurteilen kann, ist das Laufwerk in einwandfreiem Zustand und vollständig intakt. Das Paarlaufwerk ist teilweise ausgefallen.

Wenn sich das Laufwerk nicht im Wiederherstellungszustand befindet, weiß ich genau, was zu tun ist. Folgendes habe ich versucht:

# mdadm --verbose --assemble /dev/md8 /dev/sdb1  --force
mdadm: looking for devices for /dev/md8
mdadm: /dev/sdb1 is identified as a member of /dev/md8, slot 1.
mdadm: no uptodate device for slot 0 of /dev/md8
mdadm: added /dev/sdb1 to /dev/md8 as 1
mdadm: /dev/md8 assembled from 0 drives and  1 rebuilding - not enough to start the array.

# cat /proc/mdstat                       
md8 : inactive sdb1[1](S)
      976759808 blocks super 1.2          
md0 : active raid1 sdc1[0]
      976759672 blocks super 1.2 [2/1] [U_]

# mdadm --stop /dev/md8
mdadm: stopped /dev/md8

# mount /dev/sdb1 /mnt/temp2
mount: unknown filesystem type 'linux_raid_member'

# mount -o ro -t ext3 -b 2048 /dev/sdb1 /mnt/temp1
mount: wrong fs type, bad option, bad superblock on /dev/sdb1.

# foremost -i /dev/sdb -o /tmp/foo    (this results in perfectly good files)

In diesem speziellen Fall stellt der foremostBefehl Dateien wieder her, sodass sich definitiv etwas auf dem Laufwerk befindet, wenn ich nur den korrekten Superblock-Offset erhalten könnte.

In diesem speziellen Fall stürzt das Zusammensetzen beider Hälften des Arrays den Kernel (!) Ab, sodass dies (abgesehen von den Sicherheitsproblemen) ohnehin keine echte Option ist.


UPDATE: Ausgabe von mdadm hinzugefügt

# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x2
     Array UUID : e00a291e:016bbe47:09526c90:3be48df3
           Name : ubuntu:0
  Creation Time : Wed May 11 12:26:39 2011
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953519616 (931.51 GiB 1000.20 GB)
     Array Size : 1953519344 (931.51 GiB 1000.20 GB)
  Used Dev Size : 1953519344 (931.51 GiB 1000.20 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
Recovery Offset : 0 sectors
          State : clean
    Device UUID : 41346f44:ccacbbf7:0c17c133:eb7b341f

    Update Time : Sat Apr 13 00:02:08 2013
       Checksum : 483a0a44 - correct
         Events : 402833


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing)
Bryce
quelle
Ausgabe von mdadm --examine /dev/sdb1?
Frostschutz
Zur Frage hinzugefügt.
Bryce
blockdev --getsize /dev/sdb1ist 1953521664 oder größer? cat /proc/mdstatbeinhaltet Personalities : [raid1]?
Frostschutz
@ Frostschutz ja zu beiden.
Bryce
Sie scheinen beide Laufwerke zu haben. Warum versuchen Sie also, nur eines davon zu verwenden?
Psusi

Antworten:

8

Wenn es sich um RAID 1 handelt und Sie den Datenversatz kennen (z. B. 2048 Sektoren, können Sie normalerweise den genauen Datenversatz durch ermitteln mdadm --examine /dev/sdb1), können Sie ein schreibgeschütztes (aus Sicherheitsgründen) Schleifengerät wie folgt erstellen:

# losetup --find --show --read-only --offset $((2048*512)) /dev/sdb1

/dev/loop7

Versuchen Sie dann, das gedruckte Loop-Gerät zu überprüfen und zu montieren:

# fsck.ext3 -n -v /dev/loop7
# mount -o ro /dev/loop7 /mnt/recovery

mount kann dies möglicherweise direkt mit den -o ro,loop,offset=Optionen tun , aber ich bevorzuge es, das Loop-Gerät manuell zu erstellen, nur um sicherzustellen, dass es wirklich schreibgeschützt ist.

Wenn das Dateisystem selbst beschädigt ist, sollten Sie ein Image mit erstellen ddund Experimente wie fsckdas Image ausführen . Alternativ können Sie ein Linux-Netzwerkblockgerät verwenden, um eine Copy-on-Write-Ebene auf die Festplatte zu legen, sodass Sie fsckdiese Ebene erstellen können , ohne tatsächlich etwas auf die Festplatte selbst zu schreiben ( nbd-server -c/ nbd-client, erstellt ein /dev/nbdXGerät, mit dem Sie spielen können). Es könnte möglich sein, dasselbe mit Device Mapper zu tun - aber ich habe es nie versucht.

Frostschutz
quelle
"mount -o ro -t ext3 / dev / loop7 / mnt / temp1" gibt "mount: falscher fs-Typ, schlechte Option, schlechter Superblock auf / dev / loop7". Ein ähnliches raid1-Laufwerk funktioniert mit "mount -o ro -t ext3 -b 2048 / dev / sde1 / mnt / temp1".
Bryce
Was file -ssagt das erstellte Loop-Gerät aus?
Frostschutz
"file -s" zeigt "Linux rev 1.0 ext3-Dateisystemdaten, UUID = ad88ff39-8f6c-4bb9-80de-bf56feae31b1 (erfordert Journalwiederherstellung) (große Dateien)". Siehe auch superuser.com/questions/256251/…
Bryce
Das Loop-Gerät / der Offset sollte also gut sein. Gibt es etwas in dmesg, wenn Sie versuchen zu montieren? Das Dateisystem kann irgendwie beschädigt sein.
Frostschutz
Ja, es sieht so aus, als ob das Laufwerk schlecht ist, obwohl der SMART-Selbsttest erfolgreich ist: "fsck.ext3: Der Versuch, den Block aus dem Dateisystem zu lesen, führte zu einem kurzen Lesevorgang beim Versuch, / dev / loop1 erneut zu öffnen"
Bryce,
0

Sie sollten in der Lage sein, die Anzahl der RAID-Geräte in Ihrem Array auf eins festzulegen, indem Sie:

mdadm /dev/md8 --grow --raid-devices=1 --force

Schauen Sie danach /proc/mdstatnach, ob md8es aktiv ist. Sie sollten es wahrscheinlich schreibgeschützt bereitstellen, bis Sie die Daten kopiert haben.

Anthon
quelle
# mdadm / dev / md8 --grow --raid-devices = 1 --force gibt "mdadm: / dev / md8 ist kein aktives md-Array - Abbruch"
Bryce
Haben Sie versucht, mdadm --assemble --scandass das funktionieren könnte, weil md8 in der angezeigt wird /proc/mdstat. Sie müssen danach noch md8 mounten
Anthon
Ich würde es wirklich vorziehen, einfach die Komplexität des Raids zu überspringen und nur die zugrunde liegenden fs zu mounten.
Bryce
In diesem Fall müssen Sie mit dem Offset gehen. Ich habe versucht, den Fehler, den Sie mit einem Skript erhalten, neu zu erstellen, aber obwohl ich no uptodate device for slot 1 of /dev/md8den /dev/md8Start bekomme (im herabgesetzten Modus). Ich hatte das sowohl mit dem Entfernen des anderen Laufwerks als auch mit dem Zuweisen des anderen zu / dev / md0. Ich musste den Computer oft neu starten, da der Kernel irgendwie Informationen über die RAID-Partitionen speichert, selbst wenn ein RAID-Gerät gestoppt und auf Null gesetzt wird. Aber auch ohne Neustart konnte ich das Problem nie reproduzieren.
Anthon