Fdsik_partition_schemeとして表示されるMacのハードドライブパーティションを修正する方法


8

私の状況は、GUIDハードドライブをMBRに修復する方法と非常に似ていますが、十分な違いがあるため、自信を持って解決策を組み立てることができませんでした。

OS X El Capitain 10.11.3を搭載したMacでUSBエンクロージャーに3TBの東芝ドライブを使用しています。

ドライブは単一のパーティションでセットアップされました。ドライブは起動できず、システムもインストールされていなかったため、リカバリパーティションもないものと想定しています。システムがインストールされたことはないとは言えませんが、そうは思いません。BootcampやMac以外のコンピュータでは使用されていません。

ドライブは長期間正常に動作しましたが、最近認識されませんでした。ディスクユーティリティで調査すると、パーティションタイプがFDisk_partition_schemeであると表示されます。これは元々、OS X Extended(Journaled)としてフォーマットされたGUIDパーティションマップの典型的なデフォルトだったと思います。

変更の原因となった可能性のある特定の用途やイベントは考えられません。

ドライブから収集した情報は次のとおりです。

diskutil list / dev / disk6

/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *3.0 TB     disk6
   1:                       0xEE                         375.1 GB   disk6s1

diskutil info / dev / disk6

   Device Identifier:        disk6
   Device Node:              /dev/disk6
   Whole:                    Yes
   Part of Whole:            disk6
   Device / Media Name:      DT01ABA300

   Volume Name:              Not applicable (no file system)

   Mounted:                  Not applicable (no file system)

   File System:              None

   Content (IOContent):      FDisk_partition_scheme
   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 USB
   SMART Status:             Not Supported

   Total Size:               3.0 TB (3000592982016 Bytes) (exactly 5860533168 512-Byte-Units)
   Volume Free Space:        Not applicable (no file system)
   Device Block Size:        512 Bytes

   Read-Only Media:          No
   Read-Only Volume:         Not applicable (no file system)

   Device Location:          External
   Removable Media:          No

   Virtual:                  No
   OS 9 Drivers:             No
   Low Level Format:         Not supported

fdisk / dev / disk6

Disk: /dev/disk6    geometry: 97451/255/63 [1565565872 sectors]
Signature: 0xAA55
         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: EE 1023 254  63 - 1023 254  63 [         1 -  732566645] <Unknown ID>
 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

gptリカバリ/ dev / disk6

gpt recover: /dev/disk6: no primary or secondary GPT headers, can't recover

gpt -r -vv show / dev / disk6

gpt show: /dev/disk6: mediasize=3000592982016; sectorsize=512; blocks=5860533168
gpt show: /dev/disk6: PMBR at sector 0
       start        size  index  contents
           0           1         PMBR
           1  5860533167

gdisk / dev / disk6

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

これは、wxHexEditorのドライブの最初の部分のスクリーンショットです。EFI PARTは4096から始まります。

wxHexEditorのドライブの開始

他の回答で提案されているように、409642のオフセットで始まるHFSJ文字列を探し始めましたが、近くに見つかりませんでした。そのため、ドライブの先頭から検索を行ったところ、オフセット314598400で最初の出現箇所が見つかりました。

ただし、HFSJの出現を検索し続けると、最初と同じように、まったく同じになり、周囲にスペースがゼロになっているものがたくさん見つかります。それらは360424448から始まり、32768の間隔があります。たとえば、オフセット360424448 360457216 360489984 360522752 360555520

wxHexEditorで「すべて検索」検索を使用して、数分後に停止しました。その時点で数千人が見つかった。どちらかと言えば、どうすればいいのかわかりません。

また、オフセット3000592961536でEFIシステムパーティションというラベルの付いたセクションを見つけることができました。これには、ドライブの名前「Rosie」も示されています。

以下は、最初のHFSJパーティションとEFIシステムパーティションのスクリーンショットです。コメントに基づいてオフセット8192のスクリーンショットを追加しました。

最初のHFSJパーティション、最後のEFIパーティション、およびオフセット8192。

助けてくれてありがとう。


表示される場合、ディスクのブロックサイズは4096バイトで、サイズは512バイトになっています。ブロックサイズはディスク自体に保存されていないので、私の質問は次のようになります。ハードウェアを何らかの方法で変更しましたか?また、ブロックサイズが4096バイトの場合、8192バイトから始まる古いGPTテーブルエントリを読み取ることができるはずです。これまでのところ、GPTヘッダーは4096バイトから始まっています。16進ダンプは、ここに記載されている情報を使用して、正しい10進値に戻すことができます
デビッドアンダーソン

@DavidAnderson、ハードウェアは、ドライブが別のUSBケースにあるという点で変更されました。それが何かに役立つなら、私は元のケースを得ることができます。
Doug Smith

@DavidAndersonスクリーンショットを変更して、オフセット8192を追加しました。EFI システムパーティションが表示されています。
Doug Smith

@klanomathはい、あなたのリンクされた答えは正しかった。ブロックとオフセットを混同しました。ただし、オフセット209736704の周りはすべてゼロです。また、4096のブロックサイズの問題がある場合は、8で除算してみました(26217088)。それは私を多くのデータの中に入れますが、HFSJ文字列は見えません。
Doug Smith

@klanomath、私はあなたのプロセスを通して始めました。最初の40個のブロックを上書きする私の試みは、実際にデータを書き込みませんでした:0+0 records in 0+0 records out 0 bytes transferred in 0.000013 secs (0 bytes/sec)
ダグ・スミス

回答:


9

以下をお試しください:

  • 外付け3 TBドライブのディスク識別子を取得する

    diskutil list
    

    以下では、ディスク識別子はdisk6であると想定しています

  • ディスクをアンマウントします。

    diskutil umountDisk disk6
    
  • 最初の40ブロックを上書き:

    sudo dd if=/dev/zero of=/dev/disk6 bs=512 count=40
    
  • 新しいgptを作成します。

    sudo gpt create /dev/disk6
    
  • 次のコマンドでディスク情報を確認します。

    diskutil info /dev/disk6
    

    デバイスのブロックサイズが512バイトであることにご安心ください。

    あなたも使うかもしれません

    sudo gpt -r show /dev/disk6
    

    gptが示す場合:

       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2          32         Pri GPT table
    

    あなたは512バイトの論理ブロックサイズを報告するディスクとディスクコントローラーを持っています。次のステップに進んでください。

    gptが示す場合:

       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2           4         Pri GPT table
    

    あなたは4096バイトの論理ブロックサイズを報告するディスクとディスクコントローラーを持っています。ここで停止してコメントを追加してください。

  • まず、次のコマンドでEFIエントリを再構築します。

    sudo gpt add -b 40 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    

    ディスクのサイズとシステムのバージョンに応じて、ディスクユーティリティでパーティション分割されている場合、異なるサイズのEFIボリュームが作成されます。サイズは200 MiB または 300 MiBです。ここで、ディスクに300 MiBのEFIとおそらく4096バイトの未割り当てディスク領域が含まれていることは明らかです:(314598400-1024)/ 512 = 614448(=開始ブロックのメインボリューム)614448-40-8 = 614400(= EFIのサイズ)

  • 次のコマンドでメインボリュームを再構築します。

    sudo gpt add -b 614448 -i 2 -s SizeOfVolume1 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

    メインボリュームのサイズは、2番目のGPTテーブルの最初の(破損した古い)エントリによって決定できます。(3000592961536/512)= 5860533128はそのブロック番号です。次に、サイズは5860533128-614448 = 5859918680ブロックで計算されます。5859918680は8で割り切れるので(4096の物理ブロックサイズ/ 512の論理ブロックサイズ)、これはボリュームサイズの適切な推測です。

    最良の推測は最終的に次のとおりです。

    sudo gpt add -b 614448 -i 2 -s 5859918680 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

    2番目に適切な推測は次のとおりです。

    sudo gpt add -b 614448 -i 2 -s 5859918672 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • おそらくあなたの失われたボリュームは今マウントされています。次の方法でボリュームを確認します。

    diskutil verifyVolume disk6s2
    

    必要に応じて、ボリュームを修復してください。

    diskutil repairVolume disk6s2
    

「破損した」ディスクを別のケースとディスクコントローラーに移動したため、論理ブロックサイズが変更されました。古いパーティションマップは、おそらく4096バイトの論理ブロックサイズに基づいています。

古い(4096b)ケースでパーティションマップを復元するには、次のように入力してGPTを復元する必要がありました(David Andersonの回答に基づく)。

  • 新しいgptを作成します。

    sudo gpt create /dev/disk6
    
  • まず、次のコマンドでEFIエントリを再構築します。

    sudo gpt add -b 6 -i 1 -s 76800 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • 次のコマンドでメインボリュームを再構築します。

    sudo gpt add -b 76806 -i 2 -s 732457067 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • 最終的なパーティションマップは次のようになります。

     sudo gpt -r show disk1
           start        size  index  contents
               0           1         PMBR
               1           1         Pri GPT header
               2           4         Pri GPT table
               6       76800      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
           76806   732457067      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
       732533873       32768         
       732566641           4         Sec GPT table
       732566645           1         Sec GPT header
    

4096bの部分に基づいて、512bの論理ブロックサイズの場合にディスクをインストールした後、これは次のように「再変換」されます。

  • 新しいgptを作成します。

    sudo gpt create /dev/disk6
    
  • まず、次のコマンドでEFIエントリを再構築します。

    sudo gpt add -b 48 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • 次のコマンドでメインボリュームを再構築します。

    sudo gpt add -b 614448 -i 2 -s 5859656536 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

これは私の回答の最初の(受け入れられた)部分とは異なりますが、適切なものです!EFIは実際には「空」であり、262144の未割り当てブロックにはゼロのみが含まれているため、「最初のなんとか間違っている」という答えはボリュームの操作性に影響しません。


2

これは答えではなく、提示したデータからGPTパーティション情報を抽出する方法の例です。プライマリGPTパーティションエントリの内容を投稿しなかったため、セカンダリ(バックアップ)GPTパーティションエントリが使用されました。ドキュメント「GUIDパーティションテーブル」がデータの解釈に使用されました。

最後に使用可能なLBAはGPTヘッダーにあります。これはアドレス8244で発生します。値は

70 14 aa 2b 00 00 00 00 little endian = 0x2baa1470 = 732566640 @ 4096 bytes/block.

セカンダリ(バックアップ)GPTエントリの開始は、次のブロックから始まります。値は

(732566640 + 1) * 4096 = 3000592961536 bytes.  

これをEFIパーティションテーブルエントリの開始として使用すると、次の値が得られます。アドレス3000592961568にあるEFIパーティションの開始は、

06 00 00 00 00 00 00 00 little endian = 0x6 = 6 @ 4096 bytes/block.

アドレス3000592961576にあるEFIパーティションの終わりは、

05 2c 01 00 00 00 00 00 little endian = 0x12c05 = 76805 @ 4096 bytes/block.

パーティションサイズは

76805 - 6 + 1 = 76800 @ 4096 bytes/block.

アドレス3000592961696にあるHFSパーティションの開始は、

06 2c 01 00 00 00 00 00 little endian = 0x12c06 = 76806 @ 4096 bytes/block.

アドレス3000592961704にあるHFSパーティションの終わりは、

70 94 a9 2b 00 00 00 00 little endian = 0x2ba99470 = 732533872 @ 4096 bytes/block.

パーティションサイズは

732533872 - 76806 + 1 = 732457067 @ 4096 bytes / block.

512バイトのブロックサイズを使用する場合、512バイト/ブロックに変換するには、上記の結果に値8を掛ける必要があります。


+1 EFIのサイズと開始ブロックは同じですが、開始ブロックは同じですが、メインボリュームのサイズが異なります。
クラノマス2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.