GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wiederherstellung von Windows Spanned Disks (LDM) mit Linux?

Hier ist die (viel einfachere) Antwort, jetzt, dass ldmtool existiert.

ldmtool liest LDM-Metadaten (auch bekannt als Windows Dynamic Disks) und erstellt (unter anderem) Device-Mapper-Einträge für die entsprechenden Laufwerke, Partitionen und RAID-Arrays, sodass Sie später darauf zugreifen und sie mounten können, genau wie andere Blockgeräte in Linux. P>

Das Programm hat einige Einschränkungen, die hauptsächlich darauf zurückzuführen sind, dass es LDM-Metadaten überhaupt nicht ändert. Sie können also keine LDM-Festplatten unter Linux erstellen (verwenden Sie dafür Windows), und Sie sollten keine RAID-Volumes im Lese-/Schreibmodus mounten, bei denen Festplatten fehlen. (ldmtool wird die Metadaten nicht ändern, um zu zeigen, dass dies passiert ist, und das nächste Mal, wenn Windows das RAID-Array zusammenstellt, werden Probleme auftreten, da nicht alle Laufwerke synchron sind.)

Hier sind die zu befolgenden Schritte:

  1. Zur Installation von ldmtool Geben Sie auf Debian- und Ubuntu-Systemen apt-get install ldmtool ein . Auf den meisten anderen neueren Linux-Distributionen sollte es ähnlich einfach sein.
  2. Führen Sie ldmtool create all aus .
  3. Du solltest jetzt eine Menge neuer Einträge in /dev/mapper haben. Suchen Sie das richtige (in meinem Fall ein RAID1-Array, also /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2 ) und mounten Sie es einfach mit etwas wie mount -t ntfs /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2 .

Damit dies beim Booten automatisch geschieht, müssen Sie wahrscheinlich einen Aufruf an ldm create all einfügen an der richtigen Stelle in der Bootsequenz, vor dem Inhalt von /etc/fstab montiert. Eine gute Möglichkeit, den Anruf zu tätigen, wäre:

[ -x /usr/bin/ldmtool ] && ldmtool create all >/dev/null || true

Aber wie Sie dieses Snippet zum richtigen Zeitpunkt während des Bootens ausführen können, hängt stark von der verwendeten Distribution ab. Für Ubuntu 13.10 habe ich diese Zeile in /etc/init/mountall.conf eingefügt , direkt vor dem exec mountall ... Aufruf am Ende des Skriptabschnitts. Und ich kann jetzt meine Windows LDM RAID1-Partition in /etc/fstab mounten . Viel Spaß!


In Ordnung, ich werde auf meine eigene Frage antworten, um anderen denselben Schmerz zu ersparen.

0. ACHTUNG

Falls Sie eine Wiederherstellung durchführen, KOPIEREN SIE IMMER IHRE DATEN und arbeiten Sie an der Kopie. Ändern Sie NICHT die ursprünglichen „defekten“ Daten. Lesen Sie weiter.

1. Ihre Partition sieht aus wie ...

Installieren Sie das Sleuth-Kit und die Testdisk. Hoffentlich gibt es Pakete für Ihre Distribution :)

# mmls -t gpt LUN01
GUID Partition Table (EFI)
Offset Sector: 0
Units are in 512-byte sectors

    Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Safety Table
01:  -----   0000000000   0000000033   0000000034   Unallocated
02:  Meta    0000000001   0000000001   0000000001   GPT Header
03:  Meta    0000000002   0000000033   0000000032   Partition Table
04:  00      0000000034   0000002081   0000002048   LDM metadata partition
05:  01      0000002082   0000262177   0000260096   Microsoft reserved partition
06:  02      0000262178   1048576966   1048314789   LDM data partition
07:  -----   1048576967   1048576999   0000000033   Unallocated

Hinweis:testdisk gibt Ihnen dieselben Informationen mit weniger Details # testdisk /list LUN01

2. Festplatten-Metadaten extrahieren

Alle Informationen über die Festplattenreihenfolge, Datengröße und andere verschlüsselte Attribute der Partition finden sich in der LDM-Metadatenpartition. W2k8 hat sich seit diesem Dokument [2] nicht so sehr verändert, obwohl einige Größen unterschiedlich sind und einige Attribute neu (und offensichtlich unbekannt) sind ...

# dd if=LUN01 skip=33 count=2048 |xxd -a > lun01.metadata
# less lun01.metadata 

In Zeile 0002410 sollten Sie den Namen des Servers sehen. Beruhigend? Aber wir sind nach der Plattenreihenfolge und der Platten-ID. Scrollen Sie nach unten.

2.1. Festplattenreihenfolge

In Zeile 0003210 sollten Sie „Disk1“ gefolgt von einer langen Zeichenfolge sehen.

0003200: 5642 4c4b 0000 001c 0000 0006 0000 0001  VBLK............
0003210: 0000 0034 0000 003a 0102 0544 6973 6b31  ...4...:...Disk1
0003220: 2437 3965 3830 3239 332d 3665 6231 2d31  $79e80293-6eb1-1
0003230: 3164 662d 3838 6463 2d30 3032 3662 3938  1df-88dc-0026b98
0003240: 3335 6462 3300 0000 0040 0000 0000 0000  [email protected]
0003250: 0048 0000 0000 0000 0000 0000 0000 0000  .H..............

Das bedeutet, dass die erste Festplatte dieses Volumes durch die folgende eindeutige ID (UID) identifiziert wird:79e80293-6eb1-11df-88dc-0026b9835db3 Aber im Moment wissen wir nicht, welche der Festplatten diese UID hat! Wechseln Sie also zu Disk2 Eintrag und notieren Sie sich die UID usw. für alle Festplatten, die Sie in Ihrem Volume hatten. Hinweis:Nach meiner Erfahrung ändern sich nur die ersten 8 Zeichen, der Rest bleibt gleich. Tatsächlich scheint W2k8 die ID um 6 zu erhöhen. $ ist ein Trennzeichen.

Z.B. :

Windows Disk1 UID : 79e80293-6eb1-11df-88dc-0026b9835db3
Windows Disk2 UID : 79e80299-...
Windows Disk3 UID : 79e8029f-...

2.2. Festplatten-UID finden

Gehen Sie zu Zeile 00e8200 (lun01.metadata). Sie sollten „PRIVHEAD“ finden.

00e8200: 5052 4956 4845 4144 0000 2c41 0002 000c  PRIVHEAD..,A....
00e8210: 01cc 6d37 2a3f c84e 0000 0000 0000 0007  ..m7*?.N........
00e8220: 0000 0000 0000 07ff 0000 0000 0000 0740  [email protected]
00e8230: 3739 6538 3032 3939 2d36 6562 312d 3131  79e80299-6eb1-11
00e8240: 6466 2d38 3864 632d 3030 3236 6239 3833  df-88dc-0026b983
00e8250: 3564 6233 0000 0000 0000 0000 0000 0000  5db3............
00e8260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00e8270: 3162 3737 6461 3230 2d63 3731 372d 3131  1b77da20-c717-11
00e8280: 6430 2d61 3562 652d 3030 6130 6339 3164  d0-a5be-00a0c91d
00e8290: 6237 3363 0000 0000 0000 0000 0000 0000  b73c............
00e82a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00e82b0: 3839 3164 3065 3866 2d64 3932 392d 3131  891d0e8f-d929-11
00e82c0: 6530 2d61 3861 372d 3030 3236 6239 3833  e0-a8a7-0026b983
00e82d0: 3564 6235 0000 0000 0000 0000 0000 0000  5db5............
00e82e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

Was wir suchen, ist die Festplatten-UID dieser bestimmten Festplatte. Wir sehen:- Datenträger-ID:79e80299-6eb1-11df-88dc-0026b9835db3 - Host-ID:1b77da20-c717-11d0-a5be-00a0c91db73c - Datenträgergruppen-ID:891d0e8f-d929-11e0-a8a7-0026b9835db5

Diese Festplatte mit der UID 79e80299-... ist also die Windows-Festplatte 2, aber für uns war sie die physische Festplatte 1. Tatsächlich finden Sie diese UID in der oben gefundenen Festplattenreihenfolge. Hinweis:Es gibt keine logische Reihenfolge. Ich meine, Windows entscheidet, wie die Festplattenreihenfolge eingerichtet wird, nicht Sie. Es gibt also KEINE menschliche Logik und erwarten Sie nicht, dass Ihre erste Festplatte Disk1 ist.

Gehen Sie also nicht davon aus, dass die obige Reihenfolge irgendeiner menschlichen Logik folgt. Ich empfehle Ihnen, alle LDM-Daten Ihrer Festplatten durchzugehen und deren UID zu extrahieren. (Sie können den folgenden Befehl verwenden, um einfach die PRIVHEAD-Informationen zu extrahieren:dd if=LUNXX skip=1890 count=1 |xxd -a)

zB:

(Windows) Disk1 : 79e80293-... == Physical disk 2
(Windows) Disk2 : 79e80299-... == Physical disk 1
(Windows) Disk3 : 79e8029f-... == Physical disk 3

Ich bin mir sicher, dass Sie irgendwo in den LDM-Metadaten den Typ des Volumes finden können (überspannt, RAID0, RAIDX und die zugehörigen Stripe-Größen). Ich habe es jedoch nicht ausgegraben. Ich habe eine "Try and Retry"-Methode verwendet, um meine Daten zu finden. Wenn Sie also wissen, wie Sie Ihre Konfiguration vor dem Drama einrichten, sparen Sie sich viel Zeit.

3. Finden Sie das NTFS-Dateisystem und Ihre Daten

Jetzt interessieren wir uns für den großen Datenblock, den wir wiederherstellen möchten. In meinem Fall sind es ~512 GB an Daten, also werden wir nicht das ganze in ASCII konvertieren. Ich habe nicht wirklich gesucht, wie Windows den Anfang seiner NTFS-Partition findet. Aber was ich gefunden habe, ist, dass es logischerweise mit dem folgenden Schlüsselwort beginnt:R.NTFS. Lassen Sie uns das finden und den Offset finden, den wir später anwenden müssen, um unser NTFS FS zu sehen.

06:  02      0000262178   1048576966   1048314789   LDM data partition

In diesem Beispiel beginnen die Daten bei 262178 und sind 1048314789 Sektoren lang

Wir haben oben festgestellt, dass Disk1 (der Volume-Gruppe) tatsächlich die 2. physische Festplatte ist. Wir werden einige seiner Informationen extrahieren, um herauszufinden, wo die NTFS-Partition beginnt.

# dd if=LUN02 skip=262178 count=4096 |xxd -a > lun02.DATASTART-4k
# less lun02.DATASTART-4k

0000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00fbc00: eb52 904e 5446 5320 2020 2000 0208 0000  .R.NTFS    .....
00fbc10: 0000 0000 00f8 0000 3f00 ff00 0008 0400  ........?.......
00fbc20: 0000 0000 8000 8000 ffaf d770 0200 0000  ...........p....

Hier können wir sehen, dass NTFS bei 00fbc00 beginnt. Da wir also wissen, dass wir beginnen können, unsere Daten aus Sektor 262178 + 00fbc00 Bytes zu extrahieren. Lassen Sie uns auch ein wenig Hexadezimal-Dezimal-Konvertierung mit Bytes-zu-Sektor-Konvertierung durchführen.

0xfbc00 Bytes =1031168 Bytes =1031168/512 Sektoren =2014 Sektoren

Unsere NTFS-Partition beginnt also bei 262178 + 2014 =264192 Sektoren. Dieser Wert wird ein Offset sein, den wir später auf allen Festplatten verwenden werden. Nennen wir es den NTFS-Offset. Offensichtlich wird die Gesamtgröße durch den Offset geschrumpft. Die neue Größe ist also:1048314789 - 2014 =1048312775 Sektoren

4. Versuchen Sie, die Daten zu mounten/zu sehen

Von nun an funktioniert es entweder sofort, weil Ihre NTFS-Partition in Ordnung ist, oder nicht, weil Sie dies tun, um einige Daten wiederherzustellen. Der folgende Prozess ist unabhängig von Ihrem Status derselbe. Alles Folgende basiert auf [1] (siehe Links unten)

Ein übergreifendes Volumen füllt ein Volumen nach dem anderen. Wobei ein Striped (RAID0) einen Datenblock über viele Festplatten kopiert (auch bekannt als eine Datei, die über viele Festplatten verteilt ist). In meinem Fall wusste ich nicht, ob es sich um ein übergreifendes oder gestreiftes Volume handelte. Der einfachste Weg, um festzustellen, ob Ihr Volume nicht voll ist, besteht darin, zu überprüfen, ob Sie am Ende aller Ihrer Volumes viele Nullen haben. Wenn das der Fall ist, dann ist es gestreift. Denn wenn es überspannt ist, wird es die erste Platte füllen, dann die zweite. Ich bin mir da nicht 100% sicher, aber so habe ich es beobachtet. Fügen Sie also eine Reihe von Sektoren vom Ende der LDM-Datenpartition hinzu.

4.0 Vorbereitungen für den Zugriff auf Ihre Daten

Mounten Sie zuerst Ihre dd-Datei oder Ihr Gerät über ein Loopback-Gerät mit dem NTFSoffset und der Größe, die wir oben berechnet haben. Offset und Größe müssen jedoch in Bytes liegen, die nicht in Sektoren liegen, die mit losetup.offset =264192*512 =135266304size =1048312775*512 =536736140800 verwendet werden sollen

# losetup /dev/loop2 DDFILE_OR_DEVICE -o 135266304 --size 536736140800
# blockdev --getsize /dev/loop2
1048312775 <---- total size in sectors, same number than before

Hinweis:Sie können '-r' hinzufügen, um im schreibgeschützten Modus zu mounten.

Führen Sie die obigen Schritte für alle physischen Laufwerke Ihres Volumes aus. Zeigen Sie das Ergebnis mit:losetup -aHinweis:Wenn Sie nicht genügend Loop-Geräte haben, können Sie einfach weitere erstellen mit:# mknod -m0660 /dev/loopNUMBER b 7 NUMBER &&chown root.disk /dev/loopNUMBER

Überprüfen Sie Ihre Ausrichtung, indem Sie die erste Festplatte der Gruppe (zB:Disk2) öffnen, um zu sehen, ob die erste Zeile R.NTFS ist. Wenn nicht, dann ist Ihre Ausrichtung falsch. Überprüfen Sie Ihre obigen Berechnungen und versuchen Sie es erneut. Oder Sie sehen sich nicht die 1. Windows-Festplatte an

zB:

First disk of the volume has been mounted on /dev/loop2 
# xxd /dev/loop2 |head
0000000: eb52 904e 5446 5320 2020 2000 0208 0000  .R.NTFS    ..... 
0000010: 0000 0000 00f8 0000 3f00 ff00 0008 0400  ........?.......

Alles gut. Kommen wir zum lästigen Teil :)

4.1 Überspannt

Übergreifende Festplatten sind eigentlich eine Kette von Festplatten. Sie füllen die erste, dann verwenden Sie die zweite und so und so weiter. Erstellen Sie eine Datei, die so aussieht, zB :

# Offset into   Size of this    Raid type       Device          Start sector
# volume        device                                          of device
0               1048312775  linear          /dev/loop2       0
1048312775      1048312775  linear          /dev/loop1       0
2096625550      1048312775  linear          /dev/loop3       0

Hinweise:- Denken Sie daran, die gute Festplattenreihenfolge zu verwenden (die Sie zuvor gefunden haben). zB:Physical Disk2, gefolgt von Physical Disk1 und Physical Disk3- 2096625550 =2*1048312775 und offensichtlich, wenn Sie eine vierte Festplatte haben, wird es die 3-fache Größe für den Offset für die 4. Festplatte sein.

4.2 Gestreift

Das Problem mit dem Striped-Modus (auch bekannt als RAID0) ist, dass Sie Ihre Stripesize kennen müssen. Anscheinend sind es standardmäßig 64 KB (in meinem Fall waren es 128 KB, aber ich weiß nicht, ob es vom Windows-Systemadministrator eingestellt wurde:). Wie auch immer, wenn Sie es nicht wissen, müssen Sie einfach alle möglichen Standardwerte ausprobieren und sehen, welcher Ihnen ein mögliches funktionsfähiges NTFS-Dateisystem gibt.

Erstellen Sie eine Datei wie die folgende für 3 Laufwerke mit einer Chunk-Größe von 128 KB

                       .---+--> 3 chunks of 128k
0 3144938240  striped  3  128      /dev/loop2 0 /dev/loop3 0 /dev/loop1 0 
   `---> total size of the volume      `----------+-----------+---> disk order

/!\ :Die Größe des Volumes entspricht nicht genau der zuvor berechneten Größe. dmsetup benötigt eine Volume-Größe, die durch die Chunk-Größe (auch bekannt als Stripe-Größe) UND durch die Anzahl der Festplatten im Volume teilbar ist. Also in unserem Fall. Wir haben 3 Festplatten mit 1048312775 Sektoren. Die 'normale' Größe ist also 1048312775*3=3144938325 Sektoren, aber aufgrund der obigen Einschränkung berechnen wir die Größe neu und runden sie # echo "3144938325/128*128" | bc3144938240 Sektoren

  So 3144938240 is the size of your volume in a striped scenario with 3 disk and
  128 chunks (aka stripes)

4.3 Montieren.

Jetzt fassen wir alles zusammen mit dmsetup :

# dmsetup create myldm /path/myconfigfile
# dmsetup ls
myldm       (253, 1)

# mount -t ntfs -o ro /dev/mapper/myldm /mnt 

Wenn es nicht montiert wird. Dann können Sie testdisk verwenden:

# testdisk /dev/mapper/myldm
--> Analyse
----> Quick search
------> You should see the volume name (if any). If not it seems compromised :)
--------> Press 'P' to see files and copy with 'c'

5. Fazit

Das obige hat bei mir funktioniert. Ihr Kilometerstand kann variieren. Und es gibt vielleicht einen besseren und einfacheren Weg, dies zu tun. Wenn ja, teilen Sie es, damit sich niemand sonst diesen Ärger machen muss :) Außerdem sieht es vielleicht schwer aus, ist es aber nicht. Solange Sie Ihre Daten irgendwohin kopieren, versuchen Sie es einfach immer wieder, bis Sie etwas sehen können. Ich habe 3 Tage gebraucht, um zu verstehen, wie man alle Teile zusammenfügt. Hoffentlich hilft Ihnen das Obige, keine 3 Tage zu verschwenden.

Hinweis:Alle obigen Beispiele wurden erfunden. Trotz meiner Gründlichkeit gibt es vielleicht einige Ungereimtheiten zwischen den Beispielen;)

Viel Glück.

6. Links

  • [1] :http://www.kernel.org/doc/Documentation/filesystems/ntfs.txt
  • [2] :http://russon.org/ntfs/ldm/technical/index.html
  • [3] :http://svnweb.freebsd.org/base/stable/9/sys/geom/part/g_part_ldm.c
  • [4] :http://ntfs.com/ldm.htm
  • [5] :http://sourceforge.net/projects/linux-ntfs/files/LDM%20Documentation/

Linux
  1. Partitionieren Sie ein Laufwerk unter Linux mit GNU Parted

  2. Entsperren Sie verschlüsselte Laufwerke unter Linux automatisch

  3. So verschlüsseln Sie eine Partition mit DM-Crypt LUKS unter Linux

  4. Installieren Sie Linux Mint mit Windows 8 | Dual-Boot-Windows 8 und Linux Mint 12

  5. Klonen Sie die Windows-Partition von Linux

Anleitung zum Dual-Booten von Linux Mint 20 mit Windows 10

So retten Sie Ihr Windows- oder Linux-System mit Rescatux

Führen Sie Windows-Anwendungen unter Linux mit Crossover 15 aus

So klonen Sie Festplatten mit dem Linux-Befehl dd

So führen Sie Windows-Software unter Linux mit Flaschen aus

Installieren Sie Windows 10 unter Linux mit VirtualBox