第2回 Windows Update のたびに起動しなくなる?(BCD と回復環境の修復メモ)
:第1回から23年ぶりのコラムです(^^;
自宅のデスクトップPC(Windows 11)で、毎月の Windows Update のあとの再起動で、
ブートエラーが出て起動しなくなる、ということが続いていました。
そのたびに USB のインストーラーから起動して直していたのですが、さすがに毎月はつらい。。
そこで、「せめて回復環境(Windows RE)を有効にして、USB なしで直せるようにしよう」と思ったのが今回の作業のきっかけです。
結果的には、回復環境は有効になり、BCD(ブート構成データ)の不整合も直って、 その後の Windows Update でもエラーは出ていません。 途中でかなり遠回りしたので、その失敗も含めてメモとして残しておきます。 作業は生成AI(Gemini と Claude)に相談しながら進めました。
※ご注意!!ここに書いてあることを試みてうまくいかなかった、とか データが消えたとか、PCが起動しなくなったとか、起こっても私は責任を負えません。 特に BCD やパーティションの操作は、失敗すると Windows が起動しなくなります。 みなさんの責任において行う作業の参考にしてください。
環境
- Windows 11 Pro(ビルド 26100 系)
- OS のディスク:2TB(GPT、UEFI 起動)。ほかにデータ用ディスクが2台
- Windows 11 の USB インストーラー(いざという時の復旧用。これが無いと詰みます)
- 管理者権限の PowerShell
症状
- 毎月の Windows Update のあとの再起動で、0xc0000098 「ブート構成データ ファイルに、オペレーティング システムの有効な情報が含まれていません」が出て起動しない。
reagentc /infoで見ると、回復環境(Windows RE)が Disabled。場所も BCD ID も空。reagentc /enableを実行すると「操作は成功しました」と出るのに、/infoで見ると Disabled のまま。
遠回り編:パーティションをいじり続ける
最初は Gemini に相談しました。 「回復環境の置き場所(回復パーティション)が正しく設定されていないのが原因」という見立てで、 次のような作業を順番に案内されました。
Winre.wim(回復環境のイメージ、約632MB)を探して、別のパーティション(パーティション5、898MB)にコピー- diskpart でパーティション5に回復パーティションの種類(
de94b829-42c1-4f5d-a45f-0077d00ce020)と非表示属性を設定 ReAgent.xml(回復環境の設定ファイル)を削除して、reagentc /setreimage→/enable
……が、何度やっても Disabled のまま。
途中で online volume がエラーになったところで、
「パーティション5が OEM パーティションになっているので、一度削除して作り直しましょう」と案内され、次を実行しました。
diskpart
select disk 0
select partition 5
delete partition override
create partition primary
format fs=ntfs quick label=Recovery
結果、format は「パラメーターが間違っています」で失敗。
そして、パーティション5に入っていたメーカーの OEM データは消えてしまいました(´ヘ`;)
delete partition override は、保護されているパーティションでも強制的に消すコマンドです。元には戻せません。
後から考えると、案内された手順を「中に何が入っているか」を確かめないまま実行した自分が悪いです。 回復環境は結局 C: ドライブ上で動いているので、今のところ実害はありませんが、 diskpart の delete は取り返しがつかない、というのが今回いちばんの教訓です。
原因を調べる編:ログを見たら BCD だった
パーティションの初期化がうまくいかなかったので、Claude にも相談してみました。 こちらは、いきなり直すのではなく「まず状態とログを見ましょう」という進め方でした。 調べて分かったことは次のとおりです。
Winre.wimはC:\Windows\System32\Recoveryにちゃんとあった。ファイル自体は無事。- 回復環境のログ
C:\Windows\Logs\ReAgent\ReAgent.logを見ると、失敗していたのはBCD への登録だけだった。BcdOpenObject failed: 0xc0000034 winreSetRecoverySequence failed to get id for current os bcdedit /enum '{current}'が「エントリの種類は有効ではありません」になる。 つまり、BCD の中で「今起動している Windows」が見つからない状態だった。- BCD に、古い回復環境のエントリ(場所が
[unknown]になっているもの)が4件残っていた。 - ファームウェア(UEFI)の起動順の先頭に、もう存在しないディスクの古い起動項目があった。
reagentc /enable は、BCD の「今の Windows」のエントリに回復環境への道筋(recoverysequence)を書き込もうとします。
ところが、その「今の Windows」が BCD から見つからないので、登録に失敗して Disabled に戻っていた、というわけです。
パーティションの設定は関係なかったんですね。。
毎月の Update のたびにエラーが出ていたのも、BCD がこういう不完全な状態だったところに、
Update が回復環境の設定を書き換えようとして壊れていたのでは、と考えています(ここは推測です)。
復旧手順
管理者権限の PowerShell で作業しました。
-
BCD をバックアップしておきます。(これ大事)
bcdedit /export C:\bcd_backup_20261007 -
古い回復環境のエントリを削除します。
bcdedit /enum allで一覧を出して、場所が[unknown]になっている回復環境(Windows Recovery Environment)のエントリの ID を確認してから消します。
※これだけではbcdedit /delete '{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'recoverysequenceは作られませんでした。 -
BCD を作り直します。diskpart で EFI システムパーティション(ESP、100MB くらいの FAT32 のボリューム)に一時的にドライブ文字を付けて、
bcdbootを実行しました。
※使い終わったドライブ文字は、diskpart でもう一度 ESP を選んでdiskpart list volume select volume 2 ← ESP の番号(環境によって違います) assign letter=Z exit bcdboot C:\Windows /s Z: /f UEFI /l ja-JPremove letter=Zで外しておくと安心です。 -
再起動したところ……0xc0000098 で起動しなくなりました(゚Д゚;)
いつもの月次 Update 後と同じエラーです。 -
USB インストーラーから復旧します。
USB から起動して「コンピューターを修復する」→「トラブルシューティング」→「コマンド プロンプト」を開き、
ESP(100MB くらいの FAT32 のボリューム)にドライブ文字を付けて、
bcdbootで BCD を作り直します。
※回復用のコマンドプロンプトでは、Windows のドライブが C: になっていないことがあります。diskpart list volume select volume 2 ← ESP の番号(環境によって違います) assign letter=S exit bcdboot C:\Windows /s S:dir C:\Windowsなどで確かめてから実行してください。
手順は Microsoft のサポートブログ(下の参考)と同じです。 -
Windows が起動したら、
{current}が見えるか確認して、回復環境を有効にします。
今度は Enabled になりました!bcdedit /enum '{current}' reagentc /enable reagentc /info -
ついでに、ファームウェアの起動順を Windows ブートマネージャーが先頭になるように直しました。
(古い起動項目は消さずに、後ろに下げただけです。)
bcdedit /set '{fwbootmgr}' displayorder '{bootmgr}' /addfirst -
最後に、正常な状態の BCD をバックアップしておきます。
bcdedit /export C:\bcd_backup_good_20261007
手順3で一度起動しなくなったのは焦りましたが、USB からの bcdboot で作り直した BCD のほうはその後ずっと正常です。
手動で作り直した直後の再起動で壊れた理由は、まだよく分かっていません。
直ったかの確かめ方
正常なときは、こんな感じになります。(ID は伏せています)
PS> bcdedit /enum '{current}'
Windows ブート ローダー
--------------------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.efi
description Windows 11
recoverysequence {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
PS> reagentc /info
Windows RE の状態: Enabled
Windows RE の場所: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
ブート構成データ (BCD) ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
見るところは3つです。
bcdedit /enum '{current}'がエラーにならずに表示されるrecoverysequenceの ID と、reagentc /infoの「ブート構成データ (BCD) ID」が同じreagentc /infoが Enabled
作業前は recoverysequence の行自体がありませんでした。
なお、回復環境の場所は専用の回復パーティションではなく C: ドライブの中ですが、Windows 11 はこれでも問題なく動きます。
その後
- 電源を入れての起動も、再起動も、エラーなし。
- その次の月の Windows Update のあとも、エラーは出ませんでした!
しかも回復環境のバージョンが 10.0.26100.4187 → 10.0.26100.9711 に上がっていて、 Update で回復環境が更新されても BCD との対応は崩れませんでした。
とはいえ、まだ Update 1回分なので、「直った」と言い切るのはもう1〜2回様子を見てからにします。
Windows Update のあとに確認すること(自分用メモ)
Update が終わって再起動する前に、管理者の PowerShell で実行します。
bcdedit /enum '{current}'
reagentc /info
bcdedit /export C:\bcd_backup_after_update
{current}が表示されて、Enabled なら、そのまま再起動して OK。{current}がエラーになったら、再起動せずに上の手順3(bcdboot)で BCD を作り直す。- それでもダメなら USB から手順5。
振り返り
- まずログを見る。
ReAgent.logを見るまで、ずっと関係ないパーティションをいじっていました。 「成功しました」と出るのに直らないときは、どこかに失敗の記録が残っているものですね。 - 消す前に中身を確かめる。 AI に限らず、ネットで見つけた手順でも、diskpart の delete や format は実行する前に一呼吸おくべきでした。
- バックアップと USB インストーラーは必須。
bcdedit /exportは一瞬で終わるので、BCD をいじる前には必ず取っておきます。
以上、です。