Windows11/10のブート用ファイルを修復する方法:起動できない問題を解決
以下では、パソコン端末の電源を入れた際、Windows OSが起動できない場合にどうやってブート関連ファイルを修復するかにしぼって解説する。
周辺機器を外してみる、PC内の掃除をしてみるなどの単純なノウハウの話ではなく、より具体的な方策、中でもブートファイルを再構築するための方法を、順を追って紹介。
* 基本的にブートシステムの種類がMBRの場合。GPTの場合は少し異なるが、大半は同じはず。
メインのパーティションを切り替えるDISKPARTコマンド
通常、OSがインストールされた、すなわち「Windows」フォルダのあるパーティションがブート対象として設定しているはずだが、まれに回復システム(Windows 回復)用のWinREという軽量OSが入った別のパーティションが優先されてしまっている場合がある。
そこで、それを戻してみる。
* これに関しては、OSのインストールメディアなど外部の回復システムからアクセスする場合も、起動中であるメインのWindowsからでもやり方は同じ。
まず大前提として、コマンドラインを「管理者権限」で起動する。
そして――
[shell]
DISKPART
[/shell]
単純にこのコマンドを入力してEnter。すると、少し時間がかかってから専用のモードに入る。
[shell]
list disk
[/shell]
これで、PCに接続済みでシステムに認識されている物理的なストレージの一覧が表示される(パーティションではない)。
サイズなどから予想してWindowsをインストールしたものの番号を選んで、次のコマンドを打つ(ここでは「0」だったとする)。
[shell]
select disk 0
[/shell]
これで該当ストレージを選択した状態になる。
そこで今度は、パーティションの一覧を表示させる。
[shell]
list partition
[/shell]
次に、そこから「Windows」と表記のあるディスクの番号を選んで、次のコマンドを打つ(ここでは「1」だったとする)。
この際、入力するのは数字ではなく割り当てられたドライブレターのアルファベット1文字でもかまわない。
[shell]
select partition 1
[/shell]
これで該当パーティションを選択した状態になる。
このパーティションをブート対象とするために、「active」とだけ入力。
[shell]
active
[/shell]
DISKPARTのモードから抜けるために「exit」と入力。
[shell]
exit
[/shell]
これでいったんPCを再起動してみる。
場合によっては、これだけで普通に起動するようになるはずだ。
補足:WinREからストレージの内容を確認する方法
回復システムとして起動したWinREはあくまでメインのWindowsとは別のシステムであるため、複数のストレージやパーティションがあるとどれが目的のものかわからない場合がある。
そのときは、WinREでもメモ帳を起動できるので、その「開く」からファイルを選ぶためのWindowsダイアログを利用して各フォルダやファイルの配置を確認することが可能。
やり方は単純。「notepad」とコマンドを打つだけだ。
補足:DISKPARTとは
ちなみにDISKPARTは本来、その名の通りストレージ(ディスク)とパーティションの設定を変更するためのコマンド。これを使って、各パーティションのサイズを変更することも可能だ。
Bcdbootコマンドでブートファイルの修復
上記のやり方では直らなかった場合、ブート関連のファイルが壊れている可能性が高いため、それを修復する機能を使う。
* BCDとはBoot Configuration Dataのこと。
以下も、OSのインストールメディアなど外部の回復システムからアクセスする場合も、起動中であるメインのWindowsからでもやり方は同じ。
* BCDBoot のコマンド ライン オプション | Microsoft Learn
コマンドラインを管理者権限で立ち上げ、次を入力。
最初の引数は、メインのWindowsがインストールされているフォルダへのパスを指定する。ここではCドライブ直下のwindowsフォルダであるとする。
システム全体のフォルダ構成を回復システム(WinRE)でチェックするには、上記の方法を試してみるといい。
[shell]
bcdboot c:\windows /l ja-jp
[/shell]
「/l」とはlanguage、つまり言語指定のこと。
これだけでブートに必要なファイルが再生成される。
このあと、システムを再起動して試してみよう。
回復システムからブート情報の修復:Bootrecコマンド
ここまでのことをやっても起動しないのなら、いよいよ事態は深刻。
メインのWindowsがどうにか起動できていたとしても、ここからは回復システムを使うしかない。
なお、正規のWindowsからつくった回復システムでもインストールメディアにあるものでもやり方は同じ。
まず、BIOS/UEFIの設定で起動の優先順位を変え、回復システムを起動する。
そして、トラブルシューティングからコマンドラインを起動。
次に、以下のコマンドを一通り入力してみる。
[shell]
bootrec /fixmbr
bootrec /rebuildbcd
[/shell]
* Bootrecは、回復システムにしか存在しないコマンドのため、通常のWindowsでは実行できない。
fixmbrのかわりに以下のものでもOK。
[shell]
bootrec /fixboot
[/shell]
ここで「Windowsのインストールとして認識された合計数 : 0」と表示されている場合、そもそもメインのWindowsが認識されていないので何をしても失敗してしまう。
* 「bootrec /scanos」の場合も同様。
fixbootの失敗は、上記のメインWindowsのパーティションがブート対象になっていない(activeになっていない)ときに確実に起きるようだが、その他にもいろいろと原因はありそうだ。この辺は複雑なので、くわしいことはまだ調べきれていない。
ただ、本来はおかしいはずなのだが、「合計数:0」と表示されても修復が成功している場合もある。どういうことなのか真相は謎。
ここで、いったん再起動してみる。
Bcdbootを細く設定
それでもダメな場合、上記のbcdbootコマンドのパラメータを細かく設定してみる。
[shell]
bcdboot c:\windows /l ja-jp /s C: /f all
[/shell]
1番目の引数は正規のWindowsがインストールされたパスを指定し、「/s」はそのドライブレターを指定する。
「/f」はファームウェアの種類を指定するが、「all」としておけばBIOS(MBR)/UEFI(GPT)の両方に自動で対応してくれる。
* BCDBoot のコマンド ライン オプション | Microsoft Learn
Bootsectコマンドの利用
これは本来、パーティション用のマスターブートコードを更新してBootmgrとNTローダー(NTLDR)を切り替えるためのもの。
[shell]
bootsect /nt60 c: /force
[/shell]
「/nt60」はBootmgrを扱う場合に指定。NTLDRの場合は「/nt56」とする。
次に、正規のWindowsがインストールされているドライブレターを指定。
「/force」は、ボリュームのマウント(要するにドライブレターの指定)をいったん強制的に解除したうえで一連の処理を行う。Microsoftの公式ドキュメントによると、こうしたほうが成功しやすいそうだ。
* Bootsect のコマンド ライン オプション | Microsoft Learn
これでもダメな場合、いっそのこと特定のドライブレターではなく「all」と指定してすべてのボリュームを指定する。
[shell]
bootsect /nt60 all /force
[/shell]
「all」の指定は、Windowsがインストールされていると考えられるすべてのボリュームを書き換えの対象とする。
たとえばデュアルブート構成にしている場合、正常なOSのブートコードまで強制的に書き換えてしまうためリスクは大きいのだが、これで治るケースもあるようだ。
これでも起動しないとき
他にも個別にファイルを構築したりする方法などもあるのだが、非常に面倒でミスをしやすい。
ここまで来たらOSやストレージそのものに問題を抱えていることも十分考えられるため、素直にOSの初期化やクリーンインストールなどをしたほうがいいだろう。
ブートファイルが壊れやすい事例
最大の原因は、Windows Update、特にAniversary Updateなどの大型アップデートだと思われる。
どうもこれらは回復システムのようにいったん別のパーティションに更新用のシステムをインストールしたうえで、メインのそれが起動しないように本来のブート関連ファイルを「$WINDOWS.~BT」へ退避させ、しかもそのパーティションのブートセクターまで書き換えているらしい。
更新途中の電源喪失やハングアップによりWindows Update自体が失敗すると、場合によっては更新用の起動システムまで壊れ、何も起動しなくなってしまう。
この場合、あくまでブート周りがおかしくなっているだけでOS本体やユーザーファイルにはなんら問題はないのでその点は心配はないのだが、ITリテラシーの高い人でもこの状況から復帰させることは厄介で大きな問題になりやすい(もちろん、OSが起動できなければ何もできないため)。
しかも、インストールメディアなどの回復システムにある「スタートアップ修復」を使っても直らないこともあるせいで、一般ユーザーにとってはなおのこと対処が難しいだろう。
この点は今後のWindowsの改良に期待したい。
補記
他にもやり方はあるのだが、それらは一定以上のリスクをともなう。ここでは、比較的安全な方法を紹介した。