'sqr'atch-note

ちりはつもれど ちりぬるを

BSoDとの闘いの記録

ここ1か月以内の話で、2021年に組み立てた自作PCのWindows10を使っているとBSoDが頻出するようになって、原因を探って試行錯誤してみても、どうしても解決できなかったのに、Windows11にアップデートしたら解決したよ、という記録。

突然のBSoD

  • 3月中旬、Core keeperを丸一日(朝7時から21時まで)やっていたときは、一度もBSoDは出なかった
  • 4/11にFlask本をやるために、WSL2にUbuntu20.04LTSを入れて、Flaskを動かす環境を構築。そして、VS CodeからSSHし、開発を進めていて、BSoDが出るようになった、という印象
    • flask runの実行中で、デバッグモードが動いているときにBSoDが出る?っていう程度の認識だった。このときは、WSL2がホスト側を巻き込んでクラッシュするのはいただけないなと思ってた
    • 信頼性情報では、4/9にもBSoDが出たような表示があるが、そもそも記憶にない。もっとも、Windows Updateで失敗した場合も記録されるので、それかもしれない
  • Windows Terminalを見たときに、WSL2でUbuntuが2つ表示されてしまうという謎の現象があって、BSoDが出る前は特段期にしていなかったが、頻出す量になっててっきりこれが原因では?と思うようになった。
  • WSL2を止めて(機能は有効化のまま、停止状態)、VMware workstationでUbuntuVMを作って開発環境を移してみた(4/13)
  • それ以降は、特に発生しなかったのでやっぱりWSL2が原因だったのでは?と思うようになる
    • Ubuntu上でflask runデバッグモード時にバグが出た時、VS CodeでリモートSSHしていて、そのTerminalが落ちてしまったので、VM側のbashプロセスが死んだと思った。ただし、UbuntuのOSは落ちなかった。なので、やはりWSL2がOSを巻き込んでクラッシュしたのではとこの時点では思った(しかし、Flaskはユーザー空間のプロセスなのに、なぜOSを巻き込んでクラッシュするのかよくわからなかった)
  • しかし、再びホスト側のBSoDが出るようになる(4/25~)
    • WSL2の機能を無効化して試してみるもだめ

あとは切り分け

いい加減、これはもう本格的に原因を切り分けないといけないぞと思って、GWの前半3日を使って切り分けをやってみた。下記の通り、ググって出てくるような解決方法は一通り試しては見たが、冒頭に書いたようにWindows11にアップデートするまでどの方法も根本的な解決にはなからなかった。

  • NVIDIAのドライバアップデート
  • システムの修復コマンドの実行
    • このときエラーを検出して修復したというメッセージが出て、治ったかと思った
  • メモリ診断(標準)
  • UEFIアップデート
    • アップデートしたら、BSoDの画面で表示されるエラーが、DRIVER_IRQL_NOT_LESS_OR_EQUALというものに変わったり、ちょっとだけ変化が見られた
  • USB切替器を外してみる
    • USBドライバー周りの問題?だと思ったので、いったんUSB切替器を経由せず、USBポートにデバイスを直接挿して動かしてみた
  • OSクリーンインストール
    • クリーンインストールして、そして各種ドライバの更新(Gigabiteの公式サイトから関連するものをすべてダウンロードして入れてみた)
  • 再度システムの修復を試してみる(ここでは整合性違反を検出せず
  • メモリ診断(拡張、5回)
    • 標準モードではエラーが出なかったので、拡張に設定を変えてみてメモリ診断を改めてやってみた。回数を5回にしたのは正直ネットの情報を鵜呑みにして設定したので、3回でも良かったように思う。8GBモジュールを2枚指していて、メモリ診断1回が1時間半ほどかかった。5回だと、朝9時から始めて17時過ぎまでかかった
  • メモリ交換
    • メモリ診断ではエラーが見つからなかったにも関わらず、メモリ交換を実施。メモリ診断でエラーが見つからなくても問題があるケースがあるとネットで見かけたため。
  • Windowsは諦めて、Ubuntuデュアルブートを試みる
    • Ubuntuでも同様の問題が生じるなら、もう少し切り分けができるのでは?と思い、デュアルブートをしようと思った
    • しかし、そもそもインストールできない
    • WindowsBIOSレガシーモードでインストールされていたから、UEFIブートのUbuntuをインストールできないという問題
    • これがBSoDの原因じゃないのか?と思った
  • Windows10をUEFIで入れ直した
    • 下記のエラーが。OSインストール時に対象のディスク以外があるとだめだという話(このとき、データ用のディスクが別に接続されていた)。別のディスクが接続されているとインストール出来ないのは初めて知った。
  • やっぱりBSoDが出てしまう

そして、Windows11へ

Ubuntuデュアルブートにしようと思ったのは、そもそもntoskrnl.exe起因のBSoDばかりだったので、カーネルを変えたら回避できるのでは?と考えてて、Windows11にアップデートしようと最初は思ったのだが、なにやらアップデート対象外という表示になっていてアップデートできなかったから。しかし、前述の通りBIOSモードをUEFIにしたら、Windows11へアップデートできるようになったので、Ubuntuデュアルブートは不要になった。

BSoDが出なくなった 🎉 アップデートしたあと3日間で40時間位起動して挙動を確認してみて一度もクラッシュしないので、ようやく解消されたように思う。