それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WindowsのGPT+UEFIのBCDブートを修正してしてブートマネージャを何とかする

ブートをぶっ飛ばしたWindowsを修正する

ある日電源をいれたらWindowsが起動しなくなってて、泣きそうになったけど、Cドライブは生きていたのでブートが死んだとわかったのでEFIブートを必死で直した。

回復コンソール(コマンドプロンプト)を実行する

Windowsのインストールディスクから起動する、WinReから起動する、USBに作成した回復ドライブで起動するなどをして、修復する→トラブルシューティング→オプション→コマンドプロンプトで回復用のコマンドプロンプトを起動します。

diskpart でドライブの様子を確認する。

diskpart

Cドライブの割り当てを確認します。

DISKPART > list vol 

もし、c:ドライブが意図したディスクと違うディスクに割り当てらているときはc:ドライブの割り当てを削除して別のボリュームにC:を割り当てます。

list vol 
select vol 0
remove letter=c
select vol 3
assgin letter=c

EFIブートパーティションにドライブ文字割り当て

list vol 
select vol 1 
assign letter=s
list vol

これは、EFIパーティションにS:を割り当てている例です

bcdboot で起動の修正

bcdboot /l ja-JP /s S: /f UEFI

S:ドライブはDISKPART、EFIブートパーティションAssign Letter=sしてあります。

/l ja-JPは省略してもいいみたいですが、合わせた方がすんなり起動する様です。

DISKPARTで確認したC:ドライブを起動ドライブとしてUEFIを再構成する例です。

だいたいの場合はこれで治ります。

EFIパーティションがない場合

DISKPARTで作成します。

DISKPARTでFAT32パーティションを100M-300M程度作ります。

私はgdiskで作っちゃうし diskpartでのやり方は知らない。

sgdisk -n '1::+100M' /dev/loopX
sgdisk -t 1::ef00 /dev/loopX

DISKPARTの使い方はこの記事の本題でないので割愛。

ブートオーダーを修正する。

bcdeditでEFIの登録を修正

bcdeditを確認すると、なんか大量にIDが含まれているとき、bdceditでブートドライブのUUID登録を修正するとブートが治りました。

ディスクを交換した、ddした、gdiskでリサイズしたとかディスクのIDが変化した時にこのようなエラーが起きます。BDCbootで修正可能ならいいんですが、バックアップのUSBドライブ複数接続していて、複数のC:ドライブがあったりデュアルブートだと、EFIブート順がグチャる可能性がある。

EFIブートローダーを確認する

bcdedit /enum
bcdedit /enum {firmware}

次の例は私のWindowsで確認したEFIブート順です。

次の例は、ブート破損したWindowsで確認できたブート順序です。

余計なものを消してスッキリさせる。

次の様に、ファームウェアのbootmgrのオーダーから余計なのをサクサク消していき bootmgrだけにしておきました。

bcdedit /set {fwbootmgr} displayorder {bootmgr} /remove
bcdedit /set {fwbootmgr} displayorder {e05xxxx-11-xxxx} /remove

最後に先頭にEFIブートマネージャーを登録します。

bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst

スッキリ

bcdbootを修正

bcdeditでIdentifierを修正した後に、再びbcdboodでブート登録する

bcdboot /l ja-JP /s S: /f UEFI

S:ドライブはDISKPART、EFIブートパーティションAssign Letter=sしてあります。

/l ja-JPは省略してもいいみたいですが、合わせた方がすんなり起動する様です。

enum を見てみると

enum を見ていると、多分こういうことなんだろうなと思います。

個人的に設定を見て解釈しただけで、公式マニュアルを読んでないので間違ってるかもしれません。

よく見かける次のコマンド

このコマンドだとEFIブートになるかならないか、運です。

bcdboot C:\Windows /l ja-jp
bootrec /rebuildbcd

リカバリUSBメモリ起動する際にUEFIブートしていればこれでいいとおもうけど、うっかりCSMでMBRからブートしていたらUEFIブートにはならないよね。bcdbootはEFIだし、rebuilbcdの前にEFIパーティションの状態がわからないことには辛い。

次のfixboot関連のコマンドも見かけるけど、EFIパーティションの有無で変わるよね。

bootrec /Rebuildbcd
bootrec /fixboot

BCDが壊れていたばあい。RebuidBCDでマイクロソフトEFIパーティションを修復できていいけど、/fixbootはどれくらい効果があるかはわからないCドライブどこだよって思う。

いまどきUEFI必須でGPTでTPM必須なWindowsMBRの記事を使うこともないと思うんだけどさ。リカバリに課金するのも癪だよね。

ブートセクタの記述

EFIパーティションいれたブートマネージャから起動します。

ブートセクタで番号指定して起動していたMBRはGPT+UEFIでは使いません。

GPT関連でブートセクタと書いてたらその人の記事は怪しいと思う

参考資料