うならぼ

どうも。

GPTがBIOSから認識されなくなった?けどなんか直った

EFIブートのWindowsパーティションいじったらBIOSにGPTディスクとして認識されなくなった、けどよくわからないままに復活した話。謎い。

回復パーティションの増殖

ここ数日Windowsタブレットを買った流れでADKとかWinPEとかを調べていて、ふとメインマシンのパーティション構成を見るとなぜか回復パーティションが二つもある。

f:id:unarist:20160610210344p:plain

多分8から8.1にアップグレードしたときに回復パーティションのサイズが足りなくて*1、かといってCを切りなおすわけにもいかず追加されたのだろう。Win10にアップグレードするとどうなるのかねえ。

一応reagentcでWinREのパーティションを確認すると2番目の回復パーティションが使われていたので、紛らわしい前者は削除することに。diskpartで delete part overwrite するだけ。

起動しない

翌日、PCを起動してみるとWindowsが起動しない。WinREすら出てこない、というかEFI版のブートローダBIOSに認識されていない。

きっかけは昨日のパーティション削除だろうけど、削除しただけでそうなるか?と思いながら手探り調査。

  • インストールCDではEFIブートする。でもbcdbootやreagentcでいじっても効果なし。 (今になって思うと、そもそもBCDやreagentcの構成には問題がなかった)
  • EFI Shellで見るとProtective MBR が見えるだけでGPTとして認識されていない。でもWinREやLinuxでは見える。
  • diskpartやgdiskで見ても特に異常はない。消した場所にパーティション作ってみたり、gdiskでProtective MBRを作りなおしてみても変化なし。

BIOSがなぜかMBRだと思いこんでるのだとすると、Hybrid MBR としてMBR側にEFIシステムパーティションを登録しておけば、ブートローダにたどり着けるのでは?と思い、gdiskでそのように構成してみる。

これでブートローダは認識されたので、一応EFI Shellで見てみると・・・何故かGPTで認識してる。なんだそりゃと思いながら Protective MBRに戻してみる。これでも問題なくGPTで認識してる。あれー?

というわけで

頭上に疑問符を浮かべながら後片付けをしています。

あと空いた300MBの使い道にちょっと悩んでいます。回復ドライブのようにWindows本体のブートローダから独立したWinREでも入れておこうかと思ったんですが、それが無理で増殖していたんだから駄目ですね。EFI Shellのバイナリでも入れておこうかな。

ちなみに下のスレが似たような状況に見えますが、これも初期化したら直ったとかいう。

[SOLVED] EFI system partition fails to boot / Newbie Corner / Arch Linux Forums

今度再発したらまずはMBRをいじってみるか・・・。

*1:8のboot.wimは205MB、8.1のboot.wimは271MB