Ich habe eine externe TB-Festplatte, die in 2 Partitionen unterteilt ist:
Erste Partition: 280 GB
Zweite Partition: 1720 GB
Anfangs waren beide Partitionen NTFS.
Dann formatierte ich die erste Partition auf macOS Extended FS und dann auf FAT32, und die zweite Partition verschwand. Ich kann es weder in den Festplattendienstprogrammen noch in Paragon NTFS 15 sehen.
Ich habe versucht, die erste Partition auf NTFS zurückzusetzen, aber die zweite wird immer noch nicht angezeigt ... Was soll ich tun?
hier ist das ergebnis vondiskutil list
~ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *250.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 249.8 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +249.8 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 119.9 GB disk1s1
2: APFS Volume Preboot 20.5 MB disk1s2
3: APFS Volume Recovery 503.9 MB disk1s3
4: APFS Volume VM 5.4 GB disk1s4
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *2.0 TB disk2
1: Windows_NTFS HDD1 228.4 GB disk2s1
Hier ist das Ergebnis vonsudo fdisk /dev/disk2
~ sudo fdisk /dev/disk2
Disk: /dev/disk2 geometry: 243201/255/63 [3907029167 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
*1: 07 1023 254 63 - 1023 254 63 [ 206848 - 446126158] HPFS/QNX/AUX
2: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
BEARBEITEN:
$ sudo dd if=/dev/disk2 bs=512 skip=446333006 count=150000000 | grep -o -a -b "BOOTMGR"
71010552671:BOOTMGR
71010552692:BOOTMGR
150000000+0 records in
150000000+0 records out
76800000000 bytes transferred in 11355.441546 secs (6763277 bytes/sec)
Es gibt nur eine Partition auf Ihrem externen Laufwerk. Ich vermute, dass Sie, anstatt die erste Partition zu löschen, das gesamte Laufwerk gelöscht haben. Aber wenn dies wahr wäre, dann würde die neue Partition das gesamte Laufwerk umfassen. An dieser Stelle ist es also am besten, zu versuchen, die fehlende Partition zu finden.
Die richtige Funktion, um den Header einer fehlenden NTFS-Partition zu finden, ist unten angegeben. Um diese Funktion zu verwenden, müssen Sie diese Funktion zuerst kopieren und dann als Befehl in ein Terminal-Anwendungsfenster einfügen.
findntfs() { sudo bash -c "for i in {$1..$2};do xxd -a -s \$[\$i*1000000] -l 1000000 $3|fgrep -a -b 'NTFS ';echo -en '\r'\$i:;done";echo done;}
Nachfolgend finden Sie ein Beispiel für die Verwendung. Ich habe ein 4 GB NTFS-formatiertes Flash-Laufwerk. Die Ausgabe von sudo fdisk /dev/disk1
ist unten angegeben.
Disk: /dev/disk1 geometry: 968/128/63 [7811072 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 07 1 0 1 - 967 81 18 [ 8064 - 7803008] HPFS/QNX/AUX
2: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
Da das Flash-Laufwerk 7811072
Sektoren enthält und die Sektorgröße 512
Bytes beträgt, beträgt die Laufwerksgröße genau 3999268864
Bytes, was das Produkt der beiden Zahlen ist. Wenn ich das gesamte Flash-Laufwerk nach einer NTFS-Partition durchsuchen wollte, müsste ich Daten von 0 MB bis 3999 MB durchsuchen. Ein Beispiel dafür findntfs
ist unten gezeigt.
Marlin:~ davidanderson$ findntfs 0 3999 /dev/disk1
Password:
3:70:003f0000: eb52 904e 5446 5320 2020 2000 0208 0000 .R.NTFS .....
3998:1125334:ee5ffe00: eb52 904e 5446 5320 2020 2000 0208 0000 .R.NTFS .....
3999:done
Marlin:~ davidanderson$
Hinweis: Während diese Funktion ausgeführt wird, werden die Werte aktualisiert. Dies ist das aktuelle Megabyte, das durchsucht wird. Anhand dieser Werte können Sie den Fortschritt der Suche bestimmen.
Die wichtigen Informationen, die aus dieser Ausgabe extrahiert werden müssen, sind die Hexadezimalwerte 003f0000
und ee5ffe00
. Diese Werte sind der Offset in Bytes für den ersten und letzten Sektor der NTFS-Partition.
Unten ist der berechnete Wert der Byte-Position des ersten Sektors basierend auf dem Wert, der aus der Ausgabe von angezeigt wird fdisk
.
8064 * 512 = 4128768 = 0x3F0000
Unten ist der berechnete Wert der Byte-Position des letzten Sektors basierend auf dem Wert, der aus der Ausgabe von angezeigt wird fdisk
.
(8064 + 7803008 - 1) * 512 = 3999268352 = 0xEE5FFE00
Beide Werte stimmen mit der Ausgabe von überein findntfs
.
In Ihrem Fall würde ich vorschlagen, nach dem Anfang Ihrer fehlenden Partition irgendwo zwischen 270 GB und 290 GB zu suchen. Dafür würde der Befehl wie unten gezeigt aussehen.
findntfs 270000 290000 /dev/disk2
Dies kann natürlich eine Weile dauern. Wenn Sie Glück haben, können Sie versuchen, Ihre Suche einzugrenzen.
Ich würde vorschlagen, nach dem Ende Ihrer fehlenden Partition irgendwo zwischen 1980398 GB und 2000398 GB zu suchen. Dafür würde der Befehl wie unten gezeigt aussehen.
findntfs 1980398 2000398 /dev/disk2
Die folgende Funktion untersucht den gefundenen Sektor und gibt die Anzahl der Sektoren aus, die von der Kandidaten-NTFS-Partition belegt sind. Die Eingabe ist der Offset der Partition in Bytes und der Laufwerksname.
ntfssectors() {(n=$(sudo hexdump -e '1/8 "%u"' -s $((0x$1+40)) -n 8 $2); echo $(($n+1)))}
Unten ist ein Beispiel, wo diese Funktion verwendet wird.
Hinweis: Es wird davon ausgegangen, dass die Eingabe hexadezimal ist.
Marlin:~ davidanderson$ ntfssectors2 003F0000 /dev/disk1
7803008
Marlin:~ davidanderson$ ntfssectors2 ee5ffe00 /dev/disk1
7803008
Marlin:~ davidanderson$
Die Ausgabe beider Funktionen ist die gleiche wie von fdisk
.
Davids Antwort erklärt bereits, was wahrscheinlich mit Ihrem Laufwerk passiert ist. Sie haben das Laufwerk versehentlich partitioniert, anstatt nur ein Volume zu löschen.
Laut Ihrer Aussage enthielt Ihr Laufwerk zuvor zwei Partitionen:
Nach der Neupartitionierung des Laufwerks bleibt nur eine Partition übrig:
Dies bedeutet wahrscheinlich, dass die zweite Partition nicht betroffen war, sondern nur der Eintrag im MBR entfernt wurde.
Sie sollten in der Lage sein, die Partition wiederherzustellen, indem Sie einfach eine zweite Partition im MBR hinzufügen.
Um die ehemaligen Grenzen der verlorenen Partition zu erkennen, müssen Sie auf der Festplatte nach bestimmten Zeichenfolgen suchen, die den ersten und letzten Block eines (ehemaligen) NTFS-Volumes bestimmen.
Die spezifischen Zeichenfolgen sind entweder NTFS oder BOOTMGR/bootmgr.
Der Inhalt des Blocks hängt von Ihrem Gebietsschema ab , daher ist die Suche nach „BOOTMGR ist komprimiert“ (gefunden in einem englischen NTFS-Partitions-Bootsektor) nicht unbedingt erfolgreich. "BOOTMGR" (englisch/deutsch) oder "bootmgr" (spanisch/französisch?) sollten aber funktionieren. Ich habe keine nicht-lateinischen Windows-Systeme getestet.
Beispiele
Erster Block eines deutschen NTFS-Volumes:
Letzter Block eines deutschen NTFS-Volumes:
Dies kann durch Hinzufügen des Geräts zu grep erfolgen.
Beispiel:
$ sudo dd if=/dev/disk2 bs=512 skip=2048 count=512 | grep -o -a -b "BOOTMGR"
421:BOOTMGR
512+0 records in
512+0 records out
262144 bytes transferred in 0.010566 secs (24810155 bytes/sec)
Die Erklärung des Befehls:
Kopieren Sie /dev/disk2 mit einer Blockgröße von 512 Byte nach stdout, aber überspringen Sie die ersten 2048 Blöcke von disk2 und stoppen Sie nach (weiteren) 512 Blöcken, leiten Sie es an grep weiter, behandeln Sie die Ausgabe als Text, suchen Sie nach "BOOTMGR" und schließlich zeigt den/die Byte-Offset(s) des gematchten Musters vor der jeweiligen gematchten Zeile.
In Ihrem Fall bedeutet das Ergebnis 71010552671:BOOTMGR
von sudo dd if=/dev/disk2 bs=512 skip=446333006 count=150000000 | grep -o -a -b "BOOTMGR"
:
Der Byte-Offset beträgt 71010552671 Byte nach dem letzten Block (Block 446333006) des aktuell vorhandenen Volumes HDD1 auf Disk1. In Blöcken ist das der relative Block 138692486 oder der absolute Block (446333006 + 138692486) = 585025492.
Das bedeutet zweierlei:
Der letzte Block des verschwundenen NTFS-Volumes ist in den letzten 10.000 Blöcken von disk2 zu erwarten. Der entsprechende Befehl, um danach zu suchen, lautet dann
sudo dd if=/dev/disk2 bs=512 skip=3907019167 count=10000 | grep -o -a -b "BOOTMGR"
Mit dem Ergebnis des Befehls können Sie den letzten Block der verschwundenen Partition 2 ermitteln.
Mit dem ersten Block und dem letzten Block können Sie die verlorene Partition mit fdisk zum MBR hinzufügen.
Um die Größe abzugleichen, können Sie die Partitionsgröße in Sektoren im Bootsektor der Partition bei Offset 0x028 und einer Feldlänge von 8 Bytes und die Sektorgröße bei Offset 0x0B und einer Feldlänge von 2 Bytes extrahieren.
In den obigen Beispiel-Screenshots sind das FF E7 DF E8 00 00 00 00
(= 3906988031+1) und 00 02
(= 512 Byte).
Die diskutil info
Ausgabe für das Beispielvolumen (sichtbar in den Screenshots) ist:
...
Disk Size: 2.0 TB (2000377872384 Bytes) (exactly 3906988032 512-Byte-Units)
Device Block Size: 512 Bytes
...
BOOTMGR
kann die Suche nach der Zeichenfolge dazu führen, dass dieser Sektor übersehen wird. Die bessere Zeichenfolge zum Suchen ist NTFS
, da diese Zeichenfolge vorkommen muss. Deshalb habe ich gefragt, wie die Partition NTFS-formatiert wurde. Mit der Kombination dd
und grep
den Befehlen wird die Zeichenfolge nicht gefunden NTFS
. Sie müssen die Binärdatei in Text konvertieren und dann suchen. Dies ist, was die Befehle xxd
und fgrep
tun. Außerdem for
hebt eine Schleife die Begrenzung der Größe einer Suche auf.
David Anderson
diskutil list
.Juliatzin del Toro
David Anderson
sudo fdisk /dev/disk2
, aber ich bezweifle, dass dies meine Antwort ändern wird. Auf jeden Fall einen Versuch wert.Juliatzin del Toro
David Anderson
sudo dd if=/dev/disk2 bs=512 skip=446333006 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
David Anderson
Juliatzin del Toro
Juliatzin del Toro
Juliatzin del Toro
Juliatzin del Toro
klanomath