はじめに
メインで使用しているWindows 11のPCを作業終了後に再起動したところ、ブルースクリーンとなりました。
キーボードの配列選択の画面となり、配列選択後はオプションの選択の画面となりました。
表示されるオプションはデバイスの使用、トラブルシューティング、PCの電源を切るの3つでした。
結果的にはブートセクターの不良と思われるのですが、復旧するまでの過程を記録しておこうと思います。
環境
発生したPCの構成を記載します。なおPCは自作PCとなります。
OS:Windows 11 Home 24H2
マザーボード:TUF GAMING B560M-PLUS
CPU:Core i5-11400
メモリ:CMG16GX4M2E3200C16 (CORSAIR DDR4-16GB 3200MHz 8GB*2)
SSD:INTEL SSDPEKKF512G8L (512GB スロット1 D:)
WD BLACK SN7100 2TB (2TB スロット2 C: OSインストール)
HDD:WD80EFPX-68C4ZN0 (8TB E:)
スロット2に後からSSDを足してそちらにOSを移行した関係でGen4のスロットにGen3のSSDが、Gen3のスロットにGen4のSSDが刺さっている変な構成になっていますが、そのうち直します…
リカバリーメディアや回復用のメディアは一切作成していませんでした。
D:はC:のクローン元でしたが、起動時に誤ってD:から起動しないようにデータを消去していました。
ちなみに本件の現象が発生したのは消去した翌日だったため、発生時に消したことを後悔しました。
まず行ったこと
トラブルシューティングの中にスタートアップ修復をするという項目がありますので、そちらを実行しました。
結果は スタートアップ修復でPCを修復できませんでした となり失敗しています。
25H2が公開直前ということもあり、更新プログラムに問題があるのではと思った関係で、更新プログラムのアンインストールを試みましたが、こちらも失敗しています。
少し前に本件のPCとは無関係のSSDが使用不能となる事案に遭遇し、chkdskコマンドで修復できたことから、同様に実行し再起動したものの結果的には変わらずとなりました。
SSD自体には問題はなさそうな感じです。
AIに助けを求める
僕の知識では完全に詰みとなりました。
しかし今は便利な時代です。AIに助けを求めてみました。ChatGPT便利ですね。
提案された内容
助けを求めたところ以下の4点を提案されました。
- セーフモードで起動できるか確認
- 回復メディアからの修復
- コマンドラインで修復
- クリーンインストール、別のPCでSSDのデータを救出しておく。
セーフモードでの起動はスタートアップ設定の項目が表示されないため、できないと判断してパス、回復メディアからの修復は回復メディアがないのでパスしました。
クリーンインストールは最終手段とし、コマンドラインでの修復を試みることにしました。
コマンドラインで修復を行う
コマンドラインで修復すると決めたのはいいものの、修復するコマンドはわかりません。
なので、引き続きAIに助けを求めます。
bootrecコマンドで修復を行う
コマンドラインでの修復方法を尋ねたところ下記のコマンドを実行するよう提案されました。
bootrec /fixmbr
bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd
実行したところ、bootrec /fixbootでアクセスが拒否されましたとなってしまいます。
アクセス拒否に対する回避策
アクセス拒否となる原因として、ブート領域の保護やEFI環境の違いを提示されました。同時に回避策の一例として下記のものを提案されました。
diskpart→list disk→sel disk n (nはWindowsがインストールされているディスク)→list volでEFIパーティション(100~500MB、FAT32)を探す→EFIパーティションに対して一時的にドライブに割り当てる
sel vol X ← EFIのボリューム番号
assign letter=S
exit
→EFIにブートを書き直す
bcdboot C:\Windows /s S: /f UEFI
※C:\Windowsの部分はインストール先に合わせる
レガシーBIOSの場合のことも提示されましたがUEFIなのでスルーします。
上記を実行した結果、bcdboot C:\Windows /s S: /f UEFIにてブートファイルをコピーしようとしてエラーが発生しましたとなり失敗しました。
bcdbootのエラーの原因
bcdbootでブートファイルをコピーしようとしてエラーが発生しましたって出ることを伝えると、よくある原因と対処を提示されました。
1. EFIパーティションがFAT32じゃない/壊れてる
EFIのパーティションがFAT32でないと bcdboot が書き込めない。
diskpartでボリューム確認して、FAT32かどうか見てみて。
2. 割り当てたドライブレターがおかしい
assign letter=Sで割り当てたつもりが実は別の場所に当たってるケース。
dir S:で中身を見て、EFIフォルダがあるか確認。
3. Windows側のシステムファイルが壊れてる
sfc /scannow /offbootdir=C:\ /offwindir=C:\Windowsを修復環境で実行してみる。
4. 権限不足やRead Only属性
EFIパーティションが「読み取り専用」になってることもある。
diskpart→attributes volumeで属性を確認して、attributes volume clear readonly。(この先なにかありそうですがここで途切れています)
5. 最終手段、EFIパーティション自体を作り直す
既存のEFIパーティションを削除→新しく100MB程度のFAT32パーティションを作成→assign letter=S→bcdboot C:\Windows /s S: /f UEFIを再実行。
上記5つの手段提示の後、EFIパーティションが残ってるか確認されました。
当然何も弄っていませんのでCドライブは何も弄っていないことを伝えました。
EFIパーティションの状態やドライブレター割り当てを確認
Cドライブは何も弄っていないことから、EFIパーティションの状態やドライブレター割り当てが怪しいので確認を提案されます。
diskpartでEFIパーティションを探す
diskpart
list disk
select disk 0
list volume
※FAT32で100MB~300MBくらいの小さい領域がEFI
ドライブレターを割り当てる
select volume X
assign letter=S
exit
※volume XのXはEFIの番号
中身を確認
dir S:
bcdbootを実行
bcdboot C:\Windows /s S: /f UEFI
ここでまたエラーが出るかチェック
また提案と同時にEFIの中身が見られるか質問されたので、dir S:までを実行の上、MicrosoftとBootがあることを伝えます。
C:\Windowsの場所は正しいか
EFIパーティションにEFI\MicrosoftとEFI\Bootがあるため、構造自体は正しく残っているようです。そのため可能性があるのは
1. BCD(ブート構成データ)が壊れてるもしくは見つからない
フォルダはあっても、BCDファイル自体が壊れてることがある。
2. C:\Windows のパスが正しく指定されていない
復環境だとドライブ文字がずれていて、実際のWindowsが D:\ や E:\ に見えてるケース。dir C:\Windowsを実行して、中にSystem32があるか確認してみてほしい。
修復環境でC:\Windowsちゃんと見えてる?って質問されたのでdir C:を実行したところディレクトリ0という結果に。
これはC:とD:がてれこってこと?
C:のディレクトリがないことから、Windowsが入ってるディスクがC:でないことを指摘されます。
Windows 修復環境は、自動でドライブレターを割り当て直すから、普段の「C:」と一致しないことがよくあるとのこと
PCに搭載しているSSDですがWD_BLACK_SN7100_2TBをCドライブ、INTEL SSDPEKKF512G8LをDドライブとしており、再起動前のWindows上でもそのように認識されていました。
list volumeでどのドライブにWindowsが入っているかのか見てみる?と提案されたので改めてdiskpartで確認したところ、DドライブにWindowsが入ってることが判明しました。
Windowsがないディスクでbcdbootを実行しても失敗するはずですね…
Windowsが入ってるディスクで修復を実行
Windowsが入ってるディスクが無事判明したので、修復を行います。
まずはdiskpartでWindowsが入ってるディスクを選択します。
その前に念のためlist diskで番号を確認しておきます。
diskpart
list disk
確認したら、Windowsが入ってるディスクを選択し、EFIパーティションにドライブレターを割り当てます。
select disk 0
list volume
select volume 5
assign letter=S
exit
※ディスク番号とボリューム番号は環境に応じて変更してください。
自分の環境ではストレージの容量が全て明らかに異なるので判別が容易でしたが、似た容量のストレージを搭載している方は注意してください。
ボリューム番号は100~500MBでFAT32のものを選ぶだけなので間違えることはないかと思います。
最後にbcdbootを実行します。
bcdboot D:\Windows /l ja-JP /s S: /f UEFI
※D:\Windowsのドライブレターは環境に応じて変更してください。
オプションに関してですが、AI曰く
/l ja-JP→ロケールを日本語指定(必須じゃないけど安定する)
/f UEFI→UEFI用に明示
とのこと。念のために入れておきましたが、なくても大丈夫だと思います。
また、EFIパーティションに割り当てたドライブレターですが、自動的に非表示に戻る仕様のため、勝手に消えた状態となります。
自分の場合は消さずに終了後しましたが、diskpartで消すこともできます。
diskpart
list volume
select volume X
remove letter=S
exit
select volume XでEFIパーティションの選択、remove letter=Sでドライブレターの削除を行います。Xは環境に応じて、Sは割り当てたドライブレターに応じて変更してください。
結果
コマンドプロンプトでbcdbootコマンドを実行しブートファイルを再構築しました。
コマンドプロンプトを終了し再起動を行うと、無事にWindowsが起動しました。
最後に
スタートアップ修復には失敗したため、あまりこの手の知識がない自分にとっては詰んだなと感じました。スタートアップ修復に失敗するパターンはよくあるようなのでネットで調べれば色々出てきますが、調べた通りに実行して失敗しても原因がわかりませんでした。
AIに訪ねてエラーが出るときに、何が原因か特定し、最終的にブートファイルのコピーとBCDの再構築を行えました。
今後もうまくAIを活用していきたいですね。
もちろん最低限の知識は必要ですし、AIなくても対応できるのが一番ですが…
それと、きちんとバックアップは取っておきましょう。消えてからでは手遅れですので。