GPT-Tabelle, Erholung
Ich habe mich in die Reihen der Benutzer aufgenommen, die ihre eigenen Sachen nicht lesen und brechen können.
Letzten Sonntag habe ich beim Versuch, eine größere Windows 7 NTFS-Partition auf eine kleinere zu kopieren, die Partitionstabelle auf einer 3-TB-Festplatte ausgeblasen. Für Kontext:
sdb (3TB drive/partition)
sdh2 (1.57 TB partition)(2TB drive)
Ich habe PartedMagic 2018 ausgeführt (und bin es immer noch) und Folgendes eingegeben:
sgdisk -R /dev/sdb /dev/sdh2
Beim Öffnen von Gparted wurde mir klar, dass ich den Befehl falsch eingegeben habe. Es war in einer SE-Frage als Antwort zum Beheben eines Problems beim Verschieben einer größeren Partition in eine kleinere aufgeführt. Die Antwort wurde wie folgt eingegeben:
sgdisk -R /dev/sdY /dev/sdX
where:
sdX = Disk A
sdY = Disk B
Bonehead bewegt sich zur Seite, ich bin jetzt in Schadensbegrenzung. Ich habe begonnen, diesem [[24]}Ubuntu Forums-Handbuch zu folgen und habe derzeit damit begonnen, das Laufwerk nach Partitionskopfzeilen zu durchsuchen, damit ich das gesamte Laufwerk wiederherstellen kann.
Ich habe bisher den folgenden Befehl eingegeben: gpart /dev/sdb
. Es scannt das Laufwerk seit ungefähr 4 Tagen, 20 Öffnungszeit.
Ich habe hier ein paar Fragen zu meinem Verfahren:
Wie lange wird das dauern? Meine besten Schätzungen betrachteten das HDD-Aktivitätslicht und zählten maximal ein Blinken pro Sekunde. Ich nahm an, dass Single Blink ein Sektor gelesen wurde und dass jeder Sektor 4096 war (es ist auf einem Flash-Laufwerk). 2,720.000 MB auf dem 3TB-Laufwerk bei einer Lesezeit von 4 MB pro Sekunde geben mir etwa 7,87 Tage. Die kürzeste Zeit wäre doppelt so schnell, und es wäre jetzt erledigt. Die letzte Ausgabe der "möglichen Partition" war vor zwei Tagen und ergab einen Offset von 1421742 MB, während der erste mögliche Offset 1 MB betrug. Ich habe irgendwo gesehen, dass Sektorgrößen kleiner sein könnten. Bin ich nah?
Ergreife ich eine geeignete Vorgehensweise, um mein Laufwerk zu retten? Der Ubuntu Forums Guide scheint solide und sehr relatable. Ich habe nur eine Partition, die ich auf dem Laufwerk hatte, es gab mehr zuvor, aber ich hatte es abgewischt und begann mit nur der einen. Es war das einzige, partition vor dem Unfall aufgeführt und verwendet das gesamte Laufwerk, wie ich mich erinnere. Ich bin mir nicht sicher, ob einer dieser nicht verwendeten MB-Abschnitte vorhanden war oder nicht (diese seltsame leere, nicht partitionierte Stelle, die manchmal in GParted ausgeführt wird, wenn Sie eine Partition erstellen, wird mit 1mib unbenutzt vorgetragen.)
Wenn ich die Partition mit
parted
wiederherstelle und nicht alle Sektoren hinzufüge oder zu viele hinzufüge, werden dann immer noch Daten auf dieser Partition angezeigt? Der Leitfaden sagt, die Einheiten der Sektoren zu verwenden, um wieder aufzubauen Partitionstabelle. Wenn ich zu wenige oder zu viele Einheiten verwende, werden beim Mounten und Lesen des Laufwerks immer noch Daten angezeigt?Ich habe gelesen, dass es eine primäre und sekundäre Partitionstabelle gibt oder so, gibt es diese, kann ich sie kopieren, wie würde ich sie anzeigen, um zu bestätigen, welche ich für die Wiederherstellung haben möchte?
Ich brauche eine zweite Schadensbegrenzungsoption, abgesehen davon, dass ich sie an einen professionellen Service schicke. Dies ist kein Business-Computer, aber es gibt einige wichtige Dinge zu erholen.
Endziel: Stellen Sie die einzelne Partition auf dem 3TB-Laufwerk wieder her.
Update: Post-gpart scan
Wie in den Referenzbildern zu sehen ist, ist der Scan am Ende des Laufwerks fehlgeschlagen. Ich habe das Laufwerk seitdem auf einem neueren Computer abgelegt, auf dem ich TestDisk
ausgeführt habe. Der schnelle Scan fand etwas von dem, was gpart
gesehen hat, aber nicht das, was ich weiß. Ich habe die Deeper-Scan-Option verwendet, bei der innerhalb weniger Minuten die betreffende Partition mit dem Namen Big Mongo
. Dies ist, was ich die genannt hatte Laufwerk in Windows.
Update 2: Post TestDisk Scannen
TestDisk abgeschlossen (siehe zusätzliche ref Bilder) und identifiziert meine fehlende Partition. Ich kann es Dateien innerhalb des Programms auflisten lassen. Beachten Sie die Größe am unteren Rand des abgeschlossenen Scans. Der Scan abgeschlossen in einem kühlen 10 Stunden vs 8 Tage von gpart
.
Fazit: Für den Forschenden Geist
Nach dem Ausführen von TestDisk wurde die Partition gefunden, die Tabelle jedoch falsch erstellt, sodass ich gdisk
und baute es mit 2048
als Start und maximaler Größe als Ende neu auf (siehe markierte Antwort). Hatte es im Ruhezustand, ohne Probleme gebootet.
Referenzbilder
gdisk -l für Kommentare https://i.stack.imgur.com/9znYj.jpg
gpart scan 1/2 https://i.stack.imgur.com/rWxuC.jpg
gpart scan 2/2 https://i.stack.imgur.com/HQYJ8.jpg
TestDisk Quick-scan
TestDisk Tiefer scannen Vorläufige Ergebnisse[12]}
TestDisk abgeschlossen
1 answers
Analyse
Der Befehl, den Sie verwendet haben
sgdisk -R /dev/sdb /dev/sdh2
Kopierte die GUID-Partitionstabelle (GPT) von /dev/sdh2
nach /dev/sdb
.
Ein Problem ist, dass /dev/sdh2
eine Partition ist. Jede Partition hat keine oder Partitionstabelle. Oder zumindest sollte es nicht haben. Ich kann mir eine aussagekräftige Partitionstabelle innerhalb einer Partition vorstellen (und sie sogar irgendwie zum Laufen bringen), aber das ist umständlich, exotisch, nicht wirklich nützlich.
Die resultierende Kopie ist ein leerer GPT weil anscheinend die relevanten (aber nicht aussagekräftigen) Werte in /dev/sdh2
zu einer solchen Tabelle geführt haben. Das ist nicht wirklich wichtig.
Was zählt, ist, dass du den ursprünglichen GPT auf /dev/sdb
überschrieben hast. Der Befehl, den Sie verwendet haben, hat nur die Partitionstabelle geändert, alle anderen Strukturen werden voraussichtlich noch vorhanden sein. Das Dateisystem selbst sollte in Ordnung sein (es sei denn, Ihr späterer Wiederherstellungsversuch war unglücklich genug, um es zu beschädigen). Sie haben nur eine bequeme Möglichkeit verloren, zum Dateisystem zu gelangen. Bitte lesen diese Antwort von mir, sein Anfangsteil fasst den Unterschied zwischen Partition und Dateisystem zusammen.
Ihr Ziel ist es nun, das ursprüngliche GPT irgendwie wiederherzustellen. Beachten Sie, dass Ihre Situation so ist, als befänden Sie sich mitten in der in der genannten Antwort beschriebenen Prozedur: Sie haben den Partitionstabelleneintrag zerstört, aber noch keinen neuen erstellt. Der Unterschied besteht darin, dass Sie nicht unbedingt eine größere Partition erstellen möchten und den Offset (Startsektor), in dem sich die Partition befindet, nicht kennen sollte beginnen.
GPT besteht aus primären und sekundären (Backup) Tabelle. Die sekundäre Tabelle kann Ihnen beim Wiederherstellen des alten Status nicht helfen, da sgdisk -R
beide Tabellen geändert hat, um den gesamten GPT in einem konsistenten Zustand zu belassen.
Offset finden
Es gibt Tools, mit denen Sie eine Festplatte scannen, Dateisystemsignaturen finden, die Dateisystemgröße aus der Signatur lesen und einen Partitionstabelleneintrag vorschlagen können, der das Dateisystem ordnungsgemäß in eine neu definierte Partition einbetten kann, so kann es leicht montiert werden. Ein solches Werkzeug ist testdisk
. Wenn nur die alte Partitionstabelle ausgelöscht wurde, sollte testdisk
in der Lage sein, das Dateisystem zu finden und einen vernünftigen GPT zu erstellen. Das Scannen kann eine Weile dauern.
Alternativ können Sie versuchen, den richtigen Offset zu erraten. Die Tatsache, dass Sie nur eine Partition hatten, ist ein Vorteil.
Bitte lesen Sie dies ist eine andere Antwort von mir. In Ihrem Fall (logische Sektorgröße von 512
) ist der wahrscheinlichste Startsektor 2048
und der Befehl, der Arbeit ist:
mount -o ro,offset=$((512*2048)) /dev/sdb /some/mountpoint/
Das Einbinden von schreibgeschützten Daten wirkt sich nicht auf Daten aus, die bisher überlebt haben, daher sollte es sicher sein, es zu versuchen. Wenn der Befehl erfolgreich ist und Sie überprüfen, ob Dateien und Verzeichnisse unter /some/mountpoint/
angezeigt werden, bedeutet dies, dass der Versatz richtig ist.
Hinweis: 512*2048
ist genau 1-MiB. In einem der Screenshots haben Sie:
Possible partition … offset(1mb)
Ich denke, das ist der eine. Es würde höchstwahrscheinlich auch von testdisk
gefunden, wenn Sie dieses Tool verwenden würden.
Partitionstabelleneintrag erstellen manuell
Wenn Sie sich entschieden haben, testdisk
(oder ähnliches) nicht zu verwenden, den Offset gefunden haben, der richtig erscheint, können Sie eine Partitionstabelle mit Sane-Eintrag manuell erstellen (mit gdisk
, sgdisk
oder jedes Werkzeug in der Lage, dies zu tun). Folgen Sie diesen Hinweisen:
- Wenn das Dateisystem gemountet ist (z. B.
mount -o ro,offset=… …
aus dem vorherigen Absatz),umount
es. - Behalte es GPT. Wenn die logische Sektorgröße stimmt, ist es sehr unwahrscheinlich, dass Sie ursprünglich eine DOS-Partitionstabelle in MBR hatten. Auch wenn Sie es ist jedoch unmöglich, dass die Partition, die am Sektor
2048
beginnt, das Ende der Festplatte erreicht. Es ist also sicher, ganz am Ende der Festplatte einen sekundären GPT zu erstellen, auch wenn es ursprünglich keinen gab (abgesehen davon, dasssgdisk -R
bereits einen geschrieben hat, können Sie ihn nicht verschlimmern). Aber bitte sehen Sie" mögliche Probleme " Abschnitt später in dieser Antwort, nur für den Fall. - Der Startsektor sollte
2048
sein, da dies der Offset ist, den Sie gefunden haben. - Die Größe sollte gleich oder größer als die größe des Dateisystems. Im Moment ist der einzige Hinweis, den Sie haben,
size(764432mb)
, ich bin mir nicht sicher, obmb
hier MB oder MiB bedeutet oder ob es nicht völlig falsch ist. Der sicherste Ansatz besteht darin, (vorübergehend) den Maximalwert für den Endsektor zu verwenden. Durch einen anderen Screenshot glaube ich, dass der Maximalwert für den Endsektor5860533134
. - Die[Partitionstyp-GUID] sollte die richtige für NTFS sein:
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
. Hinweis ingdisk
können Sie einen kurzen Code von0700
für dieser. - Das Werkzeug darf das Dateisystem nicht berühren, es betrifft nur die Partitionstabelle. Wenn es versucht, die "neue" Partition zu formatieren (
mkfs
) oder zu löschen (wipefs
), ist es nicht das richtige Werkzeug. Ich glaube,gdisk
ist sicher. Ich wäre sehr vorsichtig mit GUI-All-in-One-Partitionierungstools(einschließlich nativer Windows-Tools). Ehrlich gesagt bedeutet "sehr vorsichtig" in diesem Fall, dass ich sie überhaupt nicht verwenden würde.
Nachdem Sie einen richtigen Eintrag erstellt und die neue Partitionstabelle auf das Gerät geschrieben haben, /dev/sdb1
sollte angezeigt werden. Wenn es nicht angezeigt wird, rufen Sie partprobe
auf.
Bestätigen Sie, dass Sie /dev/sdb1
mounten können.
Größe anpassen
Wenn /dev/sdb1
verfügbar ist, können Sie das Dateisystem einfach nach seiner Größe abfragen. Ich meine, was das Dateisystem weiß, ist seine Größe. Im Allgemeinen ist dies anders als die Größe der entsprechenden Partition. Es gibt mindestens zwei Werkzeuge, die Sie verwenden können:
-
file -s /dev/sdb1
Sie interessieren sich dafür, wo es steht
sectors NNNNNN
. Keine Sorge überhidden sectors
(vergleiche ähnliche Zweifel für FAT). -
ntfsresize --info /dev/sdb1
Sie interessieren sich für "Aktuelle Volumengröße". Drücken Sie es in 512-Byte-Sektoren aus (dh dividieren durch 512).
Die Zahl, die aus der Ausgabe von ntfsresize
berechnet wird, unterscheidet sich möglicherweise kaum von dem, was file
sagt. Ich denke, das hat etwas mit der Clustergröße zu tun. In meinen Tests scheint es, nachdem mkfs.ntfs
aufgefordert wurde, eine ganze Partition zu verwenden, berichtet file
einen Sektor weniger als die Anzahl der Sektoren in der partition. Verwenden Sie also eher file
, nicht ntfsresize
, identifizieren Sie sectors NNNNNN
, fügen Sie einen hinzu. So groß muss die Partition sein. Fügen Sie im Zweifelsfall 2048
Sektoren hinzu. Es ist overkill, aber nur 1 MiB verschwendeten Platz, nicht viel; es wird Sie sicher sicher halten.
Wenn die Partition (die im vorherigen Absatz erstellt wurde) größer ist, möchten Sie sie möglicherweise verkleinern. Ich Stelle fest, Ihr Endziel war es, kopieren Sie die Dateisystem auf eine kleinere Scheibe; und es ist dies Possible partition … size(764432mb) …
in einem der screenshots. Das macht mich glauben Sie, dass das Dateisystem tatsächlich kleiner ist als die neue Partition. Dies ist für sich genommen kein Problem, aber wenn Sie nach dem Ende des Dateisystems eine weitere Partition erstellen oder das Setup dennoch auf eine kleinere Festplatte kopieren möchten, ist das Verkleinern der Partition eine gute Idee.
Das Verfahren:
-
umount
das Dateisystem, falls gemountet. - Entfernen Sie den Eintrag aus der Partitionstabelle.
- Erstellen Sie einen neuen Eintrag wie im vorherigen Absatz, aber diesmal geben Sie die Anzahl der gerade berechneten Sektoren an. Beachten Sie, dass wir über die Größe der neuen Partition sprechen, nicht über den Endsektor. Wenn Sie den Endsektor kennen müssen, verwenden Sie diese Formel:
start+size-1=end
. Die Ausrichtung des Endes einer Partition sollte keine Rolle spielen (es ist wichtig für den Anfang), aber wenn das Tool darauf besteht, das Ende leicht zum Ende der Festplatte zu bewegen, lassen Sie es. - Speichern Sie die Partitionstabelle, führen Sie
partprobe
für alle Fälle aus. - Stellen Sie sicher, dass
/dev/sdb1
fehlerfrei montiert wird. Auf den ersten Berg schreibgeschützt (mount -o ro …
) nur für den Fall.
Wenn das Dateisystem gut mountet wird, sind Sie im Grunde fertig. Die Partitionstabelle ist jetzt gesund.
Mögliche Probleme
- Die neue Partition hat eine neue eindeutige Partitions-GUID. Andererseits bleibt die im Dateisystem gespeicherte "UUID" erhalten. Möglicherweise müssen Sie jedes Tool/Betriebssystem neu konfigurieren, das auf der ersteren basiert (oder den alten Wert aus einer Konfiguration abrufen und auf die neue Partition anwenden, diese einzelne move wird alle diese Konfigurationen wieder gültig machen). Ich weiß nicht, mit welcher ID Windows angibt, ob es die Partition/das Dateisystem zuvor gesehen hat.
- Ich kann die logische/physische Sektorgröße des Datenträgers als
512/4096
anzeigen. Bitte Lesen Sie diese Frage und die Erklärung in meiner Antwort darauf. Wenn mindestens ein USB-Gehäuse beteiligt ist und die Festplatte früher anders angeschlossen wurde als jetzt (d. H. In einem anderen Gehäuse; oder über SATA jetzt, in einem früheren Gehäuse; oder umgekehrt) und sie haben nicht überprüft, dass/dev/sdb1
mountet, bevor Siesgdisk -R
aufgerufen haben, dann vielleicht Die ursprüngliche (verlorene) Partitionstabelle war gültig für die logische Größe von4096
; und wenn Sie versucht haben, die Partition vor dem Missgeschick zu mounten, würde das gleiche Problem auftreten wie in der verknüpften Frage. Mein Punkt ist, dass meine Antwort Ihnen hilft, eine Partitionstabelle zu erstellen, die für das aktuelle - Setup gültig ist. Wenn dieses Problem Sie treffen würde, wird es Sie treffen, wenn Sie das Laufwerk im ursprünglichen Setup anschließen. Dann sie müssten die Partitionstabelle erneut anpassen. Meine Antwort auf die verknüpfte Frage wird helfen. -
Wenn das obige Aufzählungszeichen zutrifft und wenn
size(764432mb)
falsch ist, ist es möglich, dass Sie eine DOS-Partitionstabelle in MBR (nicht GPT) überschreiben (und überschreiben), die eine große Partition definiert hat, die sich bis zum Ende der Festplatte erstreckt, und das Dateisystem selbst erstreckt sich bis (fast) bis zum Ende der Festplatte. In diesem Fall hatsgdisk -R
den sekundären (Sicherungs -) GPT am Ende erstellt, an dem ein Teil des Dateisystems sein sollte sein. Wenn das Dateisystem gut mountet, ist dies wahrscheinlich nicht der Fall. Im Allgemeinen kann es sein. Dies ist ein Szenario, in dem Sie möglicherweise Daten verloren haben.und Sie können mehr verlieren, wenn Sie es nicht beheben (stellen Sie bei Bedarf eine separate Frage).Hinweis Wenn Sie sicher sind, dass Sie GPT hatten, sind Sie sicher (weil die sekundäre Tabelle "immer" dort war). Und wenn Sie sicher sind, dass das vorherige Aufzählungszeichen nicht zutrifft, sind Sie sicher (da bei der logischen Sektorgröße von
512
und bei der DOS-Partitionstabelle im MBR die partition beginnend bei Sektor2048
konnte nicht Spannweite, um das Ende Ihrer großen Festplatte).
Nachdem Sie die Partitionstabelle repariert haben, möchten Sie wahrscheinlich mit Ihrem ursprünglichen Plan fortfahren. Dann:
- Die andere Festplatte kann eine andere logische Sektorgröße haben. Ich bin nicht sicher, ob (richtig verwendet)
sgdisk -R
Einträge zwischen verschiedenen Größen neu berechnet. Ich erwarte es. Falls nicht, Sie wissen, was zu tun ist. - Aber vielleicht sie wollten die einzige Partition von
/dev/sdb
(dh/dev/sdb1
oder so) nach/dev/sdh2
klonen; und es gibt/dev/sdh1
, die Sie behalten möchten. Wenn ja, istsgdisk -R
nicht was Sie tun möchten. Wenn Sie die Partitionstabelle von/dev/sdb
nach/dev/sdh2
(eine Partition) kopieren, erhalten Sie nichts. Wenn Sie es in/dev/sdh
kopieren, wird die aktuelle Partitionstabelle dort ersetzt und mit dem aktuellen/dev/sdh2
(und/dev/sdh1
falls vorhanden) durcheinander gebracht. Verwenden Siesgdisk -R
nur, wenn die Zielfestplatte keine Daten enthält, die Sie behalten möchten. Fragen Sie im Zweifelsfall einen separaten frage nachdem Sie die Partitionstabelle von/dev/sdb
behoben haben. Die neue Frage sollte die Ausgabe vongdisk -l
(oderfdisk -l
) für beide Festplatten enthalten und Sie sollten klar angeben, auf welche Partition(en) Sie wo klonen möchten, welche Partition(en) entbehrlich sind und welche Partition(en) sollte intakt bleiben.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-12-11 15:45:27