Externe HDD-Partition kann im Festplattendienstprogramm nicht angezeigt werden

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)
Poste die Ausgabe des Befehls diskutil list.
Erledigt! Ich kann es als FDisk_partition_scheme sehen
Nun, Sie könnten auch die Ausgabe von posten sudo fdisk /dev/disk2, aber ich bezweifle, dass dies meine Antwort ändern wird. Auf jeden Fall einen Versuch wert.
Erledigt. Ist es so schlimm ?
Versuchen Sie, den Befehl auszuführensudo dd if=/dev/disk2 bs=512 skip=446333006 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
Kann ich davon ausgehen, dass Sie einen Computer mit Windows verwendet haben, um die NTFS-Partitionen zu formatieren?
Ja das ist korrekt. Aber jetzt habe ich nur noch einen Mac. Ich lade Windows 10 und Linux herunter, um es als vm auszuführen
@klanomath Ich hoffe es. Ich werde mein Bestes tun, um es wiederzubekommen
sudo dd if=/dev/disk2 bs=512 skip=446333006 count=150000000 | grep -o -a -b "BOOTMGR" Passwort: 71010552671:BOOTMGR 71010552692:BOOTMGR 150000000+0 Datensätze ein 150000000+0 Datensätze aus 76800000000 Bytes übertragen in 11355,441546 Sekunden (6763277 Bytes/Sek)
Ich habe das formatierte Ergebnis in der Frage hinzugefügt
Bitte markiere Davids Antwort als richtig! Meine Antwort hier beantwortet Ihre Frage nicht wirklich.

Antworten (2)

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/disk1ist 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 7811072Sektoren enthält und die Sektorgröße 512Bytes beträgt, beträgt die Laufwerksgröße genau 3999268864Bytes, 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 findntfsist 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 003f0000und 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.

OMG. Ich konnte es nicht sagen, Modale sind sehr nah dran. Gibt es eine Möglichkeit sich zu erholen? Ich habe mein ganzes Leben in dieser HDD :(
Nun, wenn Sie die gesamte Festplatte gelöscht hätten, hätte die neue Partition die Größe der gesamten Festplatte. Dies trifft in diesem Fall nicht zu. Jetzt geht es also darum festzustellen, ob die fehlende Partition wiederhergestellt werden kann. Es gibt nichts in den Partitionstabellen, das uns sagt, wo die fehlende Partition war.
Ergebnis des zweiten Befehls: Hexdump: 25600000000: falscher Längenwert
Ich habe den Befehl aktualisiert, um meinen Fehler zu beheben. Versuchen Sie, den Befehl erneut auszuführen.
➜ ~ sudo dd if=/dev/disk2 bs=512 skip=446333006 count=50000000 | fgrep -o -a -b "BOOTMGR ist komprimiert" 50000000+0 Datensätze in 50000000+0 Datensätze aus 25600000000 Bytes übertragen in 3583,679655 Sekunden (7143496 Bytes/Sek)

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:

  • Erste Partition: 280 GB
  • Zweite Partition: 1720 GB

Nach der Neupartitionierung des Laufwerks bleibt nur eine Partition übrig:

  • Erste und einzige Partition: 228,4 GB

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:

Geben Sie hier die Bildbeschreibung ein

Letzter Block eines deutschen NTFS-Volumes:

Geben Sie hier die Bildbeschreibung ein

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:BOOTMGRvon 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:

  1. Ihre vorherige Partition 1 hatte wahrscheinlich eine Größe von ~ 299 GB (= ~ 278 GiB) statt 280 GB
  2. Ihre Partitionen sind nicht richtig auf 4k-Blöcke ausgerichtet, da weder 446333006 noch 585025492 durch 8 teilbar sind

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 infoAusgabe 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
...
10000+0 Datensätze ein 10000+0 Datensätze aus 5120000 Byte übertragen in 0,777240 Sekunden (6587414 Byte/Sekunde)
Sie können Ihre Antwort hier posten: apple.stackexchange.com/questions/309938/…
Ich habe einen neuen Thread erstellt, in dem @David Anderson meine erste Frage beantwortet hat, und dies ist eine andere Frage, also verdienen Sie es beide, die Antwort akzeptiert zu haben :)
Mir ist egal was du antwortest außer. Wählen Sie diejenige aus, von der Sie glauben, dass sie Ihre Frage am besten beantwortet. Dies ist der beste Weg, anderen mit der gleichen Frage zu helfen.
Es ist nicht erforderlich, dass der gesuchte Sektor Bootcode enthält. Oder dass der Startcode von Microsoft stammt. Daher BOOTMGRkann 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 ddund grepden Befehlen wird die Zeichenfolge nicht gefunden NTFS . Sie müssen die Binärdatei in Text konvertieren und dann suchen. Dies ist, was die Befehle xxdund fgreptun. Außerdem forhebt eine Schleife die Begrenzung der Größe einer Suche auf.
Ich habe meine Partition dank @klanomath wiederhergestellt. Ich werde versuchen, dir 50 Punkte zu geben, wenn ich finde, wie es geht :)
Es scheint nicht mehr möglich zu sein: meta.stackexchange.com/questions/77226/…