下記の答えは512バイトのセクターサイズを仮定します。より大きなセクターサイズの場合は、適切な調整を行う必要があります。下記は紛失したWindows Boot Campパーティションを見つけて復元するために必要な基本手順です。ステップのどれも 要求する 第三者のソフトウェアの使用
該当する場合は、System Integrity Protection(SIP)を無効にします。にアクセスするにはこれを行う必要があります /dev/disk0
。つまり、起動したディスクに保存されているデータを読み込める必要があります。
SIPを無効にするコマンドを以下に示します。いくつかあるうちの1つで起動する必要があります。 macOSの回復モード または 外付けMac起動ディスク ターミナルアプリケーションからコマンドを実行する前に。
csrutil disable
実際には、SIPを完全に無効にする必要はありません。次の文書化されていないバージョンの csrutil
commandを使用して、少なくともSIPのファイルシステム保護を無効にすることができます。
csrutil enable --without fs
注:High Sierra(macOS 10.13.1)を実行している間に上記のコマンドをテストしただけです。
SIPを部分的または完全に無効にした後、macOS(OS X)に戻って起動してください。
注意: 削除 SIPを選択的に無効/有効にするためにも使用できます。
ターミナルアプリケーションを起動し、以下のコマンドを入力してください。
sudo chmod a+w /dev/disk0
これを読むことができます(書くことはできません) /dev/disk0
コマンドの前に sudo
。
注意:この読み取りアクセスは、コンピュータを再起動すると自動的に削除されます。
次に、不足しているNTFSパーティションをどのセクターに含めることができるかを判断する必要があります。これは、下記のコマンドを入力することで実現できます。
gpt -r show /dev/disk0
以下は私のコンピューターからの出力です。私のコンピュータは Fedora (Linux)と 削除 インストールされている場合、以下の出力は一般的なものとは異なります。ただし、2011 iMacで予想されるとおり、Windows NTFSボリュームはまだパーティション4にあります。
Marlin:~ davidanderson$ gpt -r show /dev/disk0
gpt show: /dev/disk0: Suspicious MBR at sector 0
start size index contents
0 1 MBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
409640 585937496 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
586347136 1269536 3 GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
587616672 193097312 4 GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
780713984 409600 5 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
781123584 1024000 6 GPT part - 0FC63DAF-8483-4772-8E79-3D69D8477DE4
782147584 192528384 7 GPT part - E6D6D379-F507-44C2-A23C-238F2A3DF928
974675968 8
974675976 1835008 8 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
976510984 262144 9 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
976773128 7
976773135 32 Sec GPT table
976773167 1 Sec GPT header
あなたのケースでは、あなたはあなたの出力をから置き換えることができます gdisk
。あなたが探す必要があるのは、大量の空き容量です。あなたの出力はセクタから始まる空き容量を示しています 1394257296
そしてセクターを終わらせる 1465149134
。これは 70891839
約36 GBの空き容量のあるセクター。
不足しているNTFSパーティションの検索を開始する準備が整いました。私のWindows NTFS Boot Campパーティションの最初のセクタを16進ダンプするために、私は下記のコマンドを入力しました。
hexdump -C -v -n 512 -s 587616672b /dev/disk0
注:上記のコマンドでは、 587616672b
です 587616672
手紙が続く b
。それは ではない 5876166726
。
下記は上記のコマンドからの出力です。
Marlin:~ davidanderson$ hexdump -C -v -n 512 -s 587616672b /dev/disk0
460ca34000 eb 52 90 4e 54 46 53 20 20 20 20 00 02 08 00 00 |.R.NTFS .....|
460ca34010 00 00 00 00 00 f8 00 00 3f 00 33 00 a0 51 06 23 |........?.3..Q.#|
460ca34020 00 00 00 00 80 00 80 00 5f 6e 82 0b 00 00 00 00 |........_n......|
460ca34030 00 00 0c 00 00 00 00 00 02 00 00 00 00 00 00 00 |................|
460ca34040 f6 00 00 00 01 00 00 00 f8 1a 1d 9e f0 ed 53 24 |..............S$|
460ca34050 00 00 00 00 fa 33 c0 8e d0 bc 00 7c fb 68 c0 07 |.....3.....|.h..|
460ca34060 1f 1e 68 66 00 cb 88 16 0e 00 66 81 3e 03 00 4e |..hf......f.>..N|
460ca34070 54 46 53 75 15 b4 41 bb aa 55 cd 13 72 0c 81 fb |TFSu..A..U..r...|
460ca34080 55 aa 75 06 f7 c1 01 00 75 03 e9 dd 00 1e 83 ec |U.u.....u.......|
460ca34090 18 68 1a 00 b4 48 8a 16 0e 00 8b f4 16 1f cd 13 |.h...H..........|
460ca340a0 9f 83 c4 18 9e 58 1f 72 e1 3b 06 0b 00 75 db a3 |.....X.r.;...u..|
460ca340b0 0f 00 c1 2e 0f 00 04 1e 5a 33 db b9 00 20 2b c8 |........Z3... +.|
460ca340c0 66 ff 06 11 00 03 16 0f 00 8e c2 ff 06 16 00 e8 |f...............|
460ca340d0 4b 00 2b c8 77 ef b8 00 bb cd 1a 66 23 c0 75 2d |K.+.w......f#.u-|
460ca340e0 66 81 fb 54 43 50 41 75 24 81 f9 02 01 72 1e 16 |f..TCPAu$....r..|
460ca340f0 68 07 bb 16 68 52 11 16 68 09 00 66 53 66 53 66 |h...hR..h..fSfSf|
460ca34100 55 16 16 16 68 b8 01 66 61 0e 07 cd 1a 33 c0 bf |U...h..fa....3..|
460ca34110 0a 13 b9 f6 0c fc f3 aa e9 fe 01 90 90 66 60 1e |.............f`.|
460ca34120 06 66 a1 11 00 66 03 06 1c 00 1e 66 68 00 00 00 |.f...f.....fh...|
460ca34130 00 66 50 06 53 68 01 00 68 10 00 b4 42 8a 16 0e |.fP.Sh..h...B...|
460ca34140 00 16 1f 8b f4 cd 13 66 59 5b 5a 66 59 66 59 1f |.......fY[ZfYfY.|
460ca34150 0f 82 16 00 66 ff 06 11 00 03 16 0f 00 8e c2 ff |....f...........|
460ca34160 0e 16 00 75 bc 07 1f 66 61 c3 a1 f6 01 e8 09 00 |...u...fa.......|
460ca34170 a1 fa 01 e8 03 00 f4 eb fd 8b f0 ac 3c 00 74 09 |............<.t.|
460ca34180 b4 0e bb 07 00 cd 10 eb f2 c3 0d 0a 41 20 64 69 |............A di|
460ca34190 73 6b 20 72 65 61 64 20 65 72 72 6f 72 20 6f 63 |sk read error oc|
460ca341a0 63 75 72 72 65 64 00 0d 0a 42 4f 4f 54 4d 47 52 |curred...BOOTMGR|
460ca341b0 20 69 73 20 63 6f 6d 70 72 65 73 73 65 64 00 0d | is compressed..|
460ca341c0 0a 50 72 65 73 73 20 43 74 72 6c 2b 41 6c 74 2b |.Press Ctrl+Alt+|
460ca341d0 44 65 6c 20 74 6f 20 72 65 73 74 61 72 74 0d 0a |Del to restart..|
460ca341e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
460ca341f0 00 00 00 00 00 00 8a 01 a7 01 bf 01 00 00 55 aa |..............U.|
460ca34200
上記の出力の説明は、次のいずれかにあります。 マイクロソフト:NTFS物理構造 または ウィキペディア:NTFS Internals 。
この分野には、いくつかの文字列が埋め込まれています。 NTFSパーティションを見つけるには、これらの文字列のいずれかを検索する必要があります。ランダムに文字列を選びます BOOTMGR is compressed
。私のNTFSパーティションがどこにあるか私は知っているので、この文字列を検索するために以下のコマンドを入力することができます。
dd if=/dev/disk0 bs=512 skip=587616672 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
最大 count
私のコンピューターが許容する価値は約 50000000
。この値はコンピュータによって異なる場合があります。したがって、NTFSパーティション全体を検索したい場合は、このコマンドを4回入力する必要があります。毎回 skip
値が増加した 50000000
。もちろん、これらのコマンドを繰り返すためのループ付きのシェルスクリプトを書くこともできますが、ここでそのようなスクリプトを追加することはこの回答の範囲を超えていると思います。
私のコンピュータで上記のコマンドを入力した結果の出力は以下のとおりです。
Marlin:~ davidanderson$ dd if=/dev/disk0 bs=512 skip=587616672 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
425:BOOTMGR is compressed
338433776:BOOTMGR is compressed
790493856:BOOTMGR is compressed
1095625536:BOOTMGR is compressed
1405559232:BOOTMGR is compressed
3533975792:BOOTMGR is compressed
3534741744:BOOTMGR is compressed
4601366880:BOOTMGR is compressed
6145609496:BOOTMGR is compressed
6146292528:BOOTMGR is compressed
6146951928:BOOTMGR is compressed
6951738816:BOOTMGR is compressed
8739643840:BOOTMGR is compressed
8846594496:BOOTMGR is compressed
9138315712:BOOTMGR is compressed
9241170368:BOOTMGR is compressed
21212440040:BOOTMGR is compressed
50000000+0 records in
50000000+0 records out
25600000000 bytes transferred in 874.399247 secs (29277244 bytes/sec)
予想通り、文字列は検索された最初のセクターの内側に見つかりました。残りの一致は無視できます。
あなたのケースでは、あなたは私が仮定したところで、以下に与えられたコマンドを入力するでしょう count
の値 50000000
有効でしょう。
dd if=/dev/disk0 bs=512 skip=1394257296 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
注:あなたは「コントロールT」を入力することができます dd
コマンドが実行中です。これにより、 dd
進行状況を表示するコマンド。
このコマンドが一致しない場合は、NTFSパーティションが完全に損なわれていないと考えることができます。
一致が有効なパーティションブートセクタにあることを確認します。最初に一致値を次の値で割ることによって、任意の一致値をパーティションブートセクタの開始値に変換できます。 bs
値。残りはすべて破棄できます。次に、 skip
結果への価値。これは、以下の私の最初の一致値について以下で計算されます 425
。
425 / 512 + 587616672 = 587616672
次に、計算セクターを16進ダンプするコマンドを入力します。私のコンピューターでは、コマンドと出力はステップ4に示されています。 -s
オプションでは、あなたはあなたの開始セクター価値を代用する必要があるでしょう。手紙を追加することを忘れないでください b
あなたの価値に。
最低でも、セクターは16進数で始めるべきです eb 52 90 4e 54 46 53 20 20 20 20 00
そして16進数で終わる 55 aa
。確認するための他の値は、ステップ4に示されている参照で見つけることができます。
NTFSパーティションの開始とサイズの値を決定します。パーティション開始値は、パーティションブートセクタ開始値と同じです。サイズを決定するには、パーティションブートセクタに格納されている41番目の値から始まる8つの16進バイト値を取得する必要があります。ステップ4に示した私のPartition Boot Sectorの場合、これらの値は以下のとおりです。
5f 6e 82 0b 00 00 00 00
次に、次に示すように、バイトの順序を逆にして、リトルエンディアンからビッグエンディアンに変換する必要があります。
00 00 00 00 0b 82 6e 5f
これらの値を、スペースと先行するゼロを除去してから追加して、単一の16進値に変換してください。 0x
結果の始まりそうすると、上記の値に対して、以下に示す単一の値になります。
0xb826e5f
以下に示すコマンドを使用して、10進数に相当するものを判別してください。
Marlin:~ davidanderson$ echo $((0xb826e5f))
193097311
最後に、この値を8で割り切れる最も近い整数に切り上げます。この場合、 193097311
したがって、この値はの値に切り上げる必要があります。 193097312
。
知らない人たちにとって、最後の3桁が8で割り切れるならば、値は8で割り切れる。 311/8=38.875
そして 312/8=39
、 そう 193097311
は割り切れない8 193097312
です。
見つかったパーティションをGUIDパーティションテーブル(GPT)に追加します。このパーティションがまだコンピュータに存在しない場合は、以下のコマンドを入力して追加できます。あなたの場合は、インデックスオプションを使用します -i 6
代わりに -i 4
。また、あなたの最初の部門 -b
とサイズ -s
オプション値は異なります。
sudo gpt -f add -i 4 -b 587616672 -s 193097312 -t windows /dev/disk0
私のコンピュータはmacOS 10.13.1を実行しています。 OS Xまたはそれ以前のバージョンのmacOSを実行している場合、このコマンドは実行されない可能性があります。もしそうなら、あなたは最初から起動する必要があります インターネット上のmacOSの回復 または 外付けMac起動ディスク その後、ターミナルアプリケーションから下記の代替コマンドを実行します。繰り返しますが、あなたの -i
、 -b
そして -s
オプションの値は、次に示すものとは異なります。
gpt add -i 4 -b 587616672 -s 193097312 -t windows /dev/disk0
もう一つの選択肢は使用することです gdisk
GPTにパーティションを追加します。
注:GPTを編集した後、コンピューターの再起動が必要になる場合があります。
必要に応じて、SIPを有効にしてください。 SIPを有効にするコマンドが以下に示されていることを除いて、これはステップ1と同じ手順を必要とします。
csrutil enable