Wie kann ich Daten auf einem Datenträger bereitstellen / wiederherstellen, der Teil eines MDADM-RAID 1 auf einem anderen Computer war?


16

Etwas Hintergrund

  • Die Festplatte selbst wurde von einem Freund "bearbeitet" und soll noch intakt, unbeschädigt und noch einbaufähig / wiederherstellbar sein
  • Die Festplatte war Teil eines Software-Raids 1 auf Ubuntu 12.04
  • Die andere Festplatte im ursprünglichen RAID 1 wurde formatiert und für einen anderen Zweck verwendet, sodass die aktuelle Festplatte (die fragliche) technisch gesehen immer noch Teil eines RAIDs ist, der nicht mehr existiert

Was ich schon ausprobiert habe

  • Grundmontage

    • Ich fügte einen Eintrag zu fstab hinzu, markierte die Festplatte als ext3 / ext4 und versuchte zu mounten.
    • Beim Mounten erscheint der folgende Fehler

      wrong fs type, bad option, bad superblock on

    • Und in dmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • Ich habe versucht, den Dateisystemtyp des Datenträgers zu finden und habe mit gefunden

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

Wo ich Hilfe brauche / Meine Fragen

  • Gibt es eine Möglichkeit, die Festplatte in ext4 zu konvertieren, ohne die Daten zu beschädigen?
  • Gibt es eine einfache Möglichkeit, die Linux 83-Datenträger zu mounten und die Daten wiederherzustellen?
  • Ich habe momentan eine andere Festplatte frei, falls es möglich ist, den Raid irgendwie neu zu erstellen
  • Mein Hauptziel ist es, die Daten von der Festplatte wiederherzustellen. Ich bin offen für alle Möglichkeiten.

Aktualisieren

Ausgabe einiger Befehle

  • fdisk -l / dev / sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • Datei -s / dev / sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 / dev / sdc (nicht sicher, ob dies helfen könnte oder nicht)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    

Das Problem ist, dass die Partition denkt, sie hat ein RAID-Volume und kein ext4fs. Und der Kernel ist richtig. Da es sich jedoch um einen Schlachtzug 1 handelte, handelt es sich zufällig um einen ext4fs. a mount -f ext4 /dev/sdc1 /mountpointsollte den Trick machen. Mount zu zwingen, ext4 anzunehmen, anstatt nach einem Dateisystem zu suchen , ist das, was -f tut
Bananguin

1
Die erzwungene Bereitstellung gibt keine Fehler aus, aber der Bereitstellungspunkt ist leer. Entweder sind die Daten weg oder der Mount hat nicht wie erwartet funktioniert. Das Ausführen von a dfzeigt mir, dass die neu bereitgestellte Festplatte zu 2% verwendet wird, was erheblich niedriger als erwartet ist.
Adam

@ user1129682, wenn mount sagt, dass es nicht ext4 ist, dann ist es nicht ... der Versuch, es zu erzwingen, wird nicht helfen.
Psusi

@psusi: hat bei mir gearbeitet. Gilles Antwort erklärt, warum es unter bestimmten Umständen
funktioniert

@ Bananguin Meinst du nicht mount -t ext4? Das -f-Flag ist für das 'Fake'-Mounten (Ubuntu 14.04).
Quantum7

Antworten:


10

Dies funktioniert hervorragend in Ubuntu 14.04:

sudo -i
mdadm --assemble --scan

Sie erhalten:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

Dann mounten und sehen Sie Ihre Dateien:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

Wurde immer "existiert, ist aber kein MD-Array" auf einer ausgefallenen Festplatte, die Teil eines Arrays war ... und dies funktionierte besser als alle anderen Vorschläge. Wird erfolgreich gemountet und kopiert gerade Daten.
Zayne S Halsall

Diese Option hat bei mir gut funktioniert. 2 Intel SSDs in RAID1. Ich habe einen gezogen und vom SATA-Port auf den PC mit Suse Linux geschalten. Zeigt sich zunächst als nur /dev/sdcund als /dev/md127. Dann war mdadm --assemble --scandie Folge /dev/md/Volume0_0p1und /dev/md/Volume0_0p2und so weiter entsprechend 4 Partitionen , die auf der Platte waren. P2 war das, was ich brauchte: mkdir /p2 gefolgt von mount /dev/md/Volume0_0p2 /p2gemountetem EXT3, und ich kann leicht auf die Daten zugreifen und sie kopieren. Es wurde auch als Lese- / Schreibzugriff aktiviert.
Ron

du hast meinen Tag gerettet! Vielen Dank!
Gooshan

Manchmal --scanstartet der Modus keine Arrays mit fehlenden Datenträgern. In meinem Fall musste ich das automatisch zusammengestellte Array anhalten und es erneut mitmdadm --assemble --force /dev/md/1 /dev/sdc1
BrunoJCM

7

Linux mdraid hat mehrere Metadatenformate . In den Formaten 0.9 und 1.0 befinden sich die Metadaten am Ende des enthaltenen Geräts. Die Nutzdaten (das Dateisystem) beginnen am Anfang des Geräts und können direkt aufgerufen werden, ohne die RAID-Ebene zu durchlaufen. In den Formaten 1.1 und 1.2 werden die Metadaten jeweils in der Mitte und am Anfang des enthaltenen Geräts platziert, sodass die Nutzdaten versetzt sind.

Das Ubuntu-Installationsprogramm erstellt Volumes mit dem Metadatenformat 1.2, sodass Ihre Daten nach den Metadaten und nicht am Geräteanfang beginnen.

Der einfachste Weg, auf diese Daten zuzugreifen, besteht darin, das RAID-Gerät zusammenzustellen. In einem RAID-1-Volume ist ein einzelnes Gerät ausreichend.

madadm -A /dev/sdc1

(Hör hier auf, es sei denn, du magst Schmerzen.)

Sie können auch versetzt auf die Daten zugreifen. Der einzige Punkt, den ich tun kann, ist, wenn Sie in einem sehr alten Kernel arbeiten müssen, der keine 1.x mdraid-Formate unterstützt. Bestimmen Sie zunächst den Versatz mdadm -E /dev/sdc1: Suchen Sie nach der Linie Data Offset : SSS sectors. Ein mdadm-Sektor besteht aus 512 Bytes.

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

Verzweifelt wird der Datenoffset bei 1.x-Formaten in den Bytes 128–135 der Metadaten Little Endian¹ gespeichert. 1.2 Metadaten sind 4096 Bytes nach dem Geräteanfang.

Sie können die Partitionstabelle auch ändern, um sie weiter zu starten. Sei sehr vorsichtig mit deiner Arithmetik. Tun Sie dies nur, wenn Sie die Festplatte in einem alten System, das nicht auf das RAID-Gerät zugreifen kann, dauerhaft verwenden möchten.

¹ Oder mit Plattformendlichkeit? Ich bin mir nicht sicher.


Die Daten können an verschiedenen Offsets beginnen (siehe mdadm -E /dev/sdc1wo genau), aber sicher nicht bei 4k für 1.2-Metadaten, da 4k genau dort ist, wo die Metadaten gespeichert sind. Siehe auch unix.stackexchange.com/q/57477/22565
Stéphane Chazelas

@StephaneChazelas Ups, ja, Hirnfurz. Vielen Dank.
Gilles 'SO- hör auf böse zu sein'

3
mdadm -A /dev/sdc1Ausgänge mdadm: device /dev/sdc1 exists but is not an md array.Ich bin ein bisschen weiter gegangen, um mdadm zu verwenden und zu sehen, ob es zusätzliche Informationen mdadm --misc --examine /dev/sdc1gibt ... Ausgänge mdadm: No md superblock detected on /dev/sdc1.. Gibt es eine Möglichkeit, die Superblocks auf dieser Festplatte neu zu schreiben, um sie als verfügbare Festplatte für die RAID-Assembly zu markieren?
Adam

@ Gilles A mdadm -E /dev/sdcgibt folgendes für mich zurück: /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) aber keine Informationen für / dev / sdc1 obwohl
Adam

1
@Adam Wenn mdadm seine Metadaten nicht finden kann, können Sie dort nichts tun: Sie können es nicht zwingen, etwas zu tun, da es nicht weiß, was es tun soll. Sie müssen nach einem Dateisystem suchen, und wenn der Rat von psusi nirgendwo hinführt, sind die Aussichten düster. Vielleicht könnte ein Hexdump der ersten Kilobyte der Festplatte jemanden inspirieren (Vorsicht, es könnten vertrauliche Daten offen gelegt werden).
Gilles 'SO- hör auf böse zu sein'

5

Zu meiner Überraschung war / bin ich in der Lage, die Daten einfach mit Hilfe von vorderster Front wiederherzustellen .

Die hier erhaltene Hilfe war von unschätzbarem Wert. Nachdem ich eine Vielzahl von vorgeschlagenen Kombinationen sowie meine eigenen Mix-Ins ausprobiert hatte, schien die ideale Methode (die Festplatte wie gewohnt zu mounten und zu verwenden) keine Option mehr zu sein. Der Rückgriff auf Datenrettung ist in diesem Fall meine Lösung.


Mir ist klar, dass dies eine Weile her ist! Aber erinnerst du dich, ob du es ohne Mounten der Partition zuallererst schaffen konntest?
PhillipOReilly

Entschuldigung, ich kann mich nicht mehr an die Details erinnern. : /
Adam

3

Es scheint, dass Sie den mdadm-Superblock bereits gezappt haben. Wenn es dort war und das Format 1.1 oder 1.2 hatte, ist das Dateisystem höchstwahrscheinlich um 2048 Sektoren versetzt. Sie können ausführen, um e2fsck /dev/sdc1?offset=2048zu erzwingen, dass ab diesem Versatz nach dem Dateisystem gesucht wird. Wenn es es findet, können Sie Ihre Partitionstabelle so ändern, dass sie darauf verweist, wo das Dateisystem tatsächlich startet. Sie können parted /dev/sdcund den unit sBefehl verwenden, um Einheiten von Sektoren zu verwenden. printBeachten Sie in der Tabelle den Start- und Endsektor, dann rmdie Partition, erstellen Sie sie erneut mkpartund verwenden Sie denselben Endsektor, fügen Sie jedoch den Offset zum Startsektor hinzu.

Wenn 2048 nicht funktioniert, können Sie es auch mit 1985 versuchen.


Das Ausführen von e2fsck /dev/sdc1?offset=2048Ausgaben (ich habe auch offset = 1985 ausgeführt) Bad magic number..Superblock invalid...sowie der Hinweis, dass der Superblock beschädigt ist, und der Versuch, e2fsck mit einem alternativen Superblock auszuführen. Es scheint, als sollte ich einen alternativen Superblock anbieten, um vorwärts zu kommen.
Adam

@Adam, nein, Sie müssen nur den richtigen Versatz ermitteln. testdisksollte in der Lage sein, einen detaillierten Scan durchzuführen und die Partitionstabelle für Sie zu reparieren.
Psusi

testdiskist für mich völlig Neuland. Eine einfache Run (Analyse) -Show No ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.Sie bietet außerdem Folgendes: 1 P Linux 0 1 1 121600 254 63 1953520002Wie kann ich das verstehen, um der Situation zu helfen?
Adam

@Adam, ich habe es selbst nie benutzt, ich weiß nur, dass es in der Lage sein soll, nach dem Superblock zu suchen und ihn zu finden. Sie haben es auf der gesamten Festplatte ausgeführt, nicht auf der Partition, oder?
Psusi

Nachdem eine Analyse auf der gesamten Festplatte ausgeführt wurde, wurden keine Partitionen mehr angezeigt. Derzeit wird ein tiefer Scan ausgeführt. Wenn hier nichts auftaucht, bin ich mir nicht sicher, wohin ich von hier aus gehen soll.
Adam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.