WSL2が突然起動不能に(HCS/ERROR_FILE_NOT_FOUND)— WSLを2.6.3にロールバックして復旧したメモ

VS Codeで作業していたら、突然WSL2が落ちて接続が切れ、それ以降まったく起動できなくなりました。再起動してもダメ、wsl --updateしてもダメ。あれこれ調査試してみましたが、最終的に WSLを2.6.3にロールバック したらあっさり復旧したので、原因と手順を残しておきます。同じHCSエラーで青ざめている方の役に立てば。

環境

  • Windows 10.0.26200.8655
  • WSL 2.7.8.0(障害発生時)
  • WSL2 + Docker DevContainers
  • VS Code Remote (WSL) で開発中

何が起きたか

時系列はこんな感じでした。

  1. WSL2上で作業中、突然WSLが落ちてVS Codeの接続が切れた
  2. その後Windows Updateが走り、再起動
  3. 再起動後、WSLが起動しなくなった

出ていたエラーはこれ。

指定されたファイルが見つかりません。
エラー コード: Wsl/Service/CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND

wsl -d Ubuntu でも wsl(デフォルト起動)でも、同じHCSエラーで弾かれます。

原因

クラッシュや休止をきっかけに、WSL関連のシステムファイル(カーネルや .vhd ファイルなど)が欠損した状態になる。そして、その状態で2.7.x系のインストーラーで修復しようとしても、欠損ファイルを再配置できずに無言で失敗する。これが起動不能の正体のようです。

GitHubのIssueで同じ症状が多数報告されていました。

報告者本人いわく「2.6.3のインストーラーは欠損していた.vhdファイルを正しく配置できたが、2.7.3のインストーラーは無言で失敗していた」とのこと。複数のユーザーが同じく2.6.3へのロールバックで復旧しています。クラッシュ起因の人、ノートPCの休止起因の人など、引き金は様々みたいです。

切り分け:先にデータが無事か確認

対処に入る前に、ディストロのディスクイメージ(VHDX)が無事かを確認しておくと安心です。これさえ残っていればデータは消えていません。

Get-ChildItem $env:LOCALAPPDATA\Packages\CanonicalGroupLimited*\LocalState\ext4.vhdx

Length に数GB〜数百GBの値が出てファイルが存在すれば、イメージが壊れてません。今回は約247GBのVHDXがそのまま残っていたので、「ロールバックで起動さえできればデータは戻る」とのことで一安心。

やっても効かなかったこと

参考まで、以下は今回(および同じIssueの報告者たちが)試して効かなかった対処です。

  • wsl --update(「最新版が既にインストールされています」と出るだけ)
  • Windowsの完全再起動
  • Restart-Service vmcompute
  • sfc /scannow / DISM /Online /Cleanup-Image /RestoreHealth
  • Windows機能(Virtual Machine Platform等)のオフ→再起動→オン
  • 同バージョンのインストーラーでの「修復(Repair)」

基盤側(Hyper-V、VirtualMachinePlatform、vmcompute/hnsサービス、.wslconfig)はどれも正常でした。つまりユーザー環境の設定の問題ではなく、WSL本体側の問題ということになります。

対処方法(これで直った)

やることはシンプルで、WSLを2.6.3にロールバックするだけです。

  1. Docker Desktopを完全終了
  2. 2.6.3のインストーラーをダウンロード https://github.com/microsoft/WSL/releases/tag/2.6.3 (x64なら wsl.2.6.3.0.x64.msi
  3. ダウンロードした.msiを普通にインストール(修復ではなく通常インストール。上書きでダウングレードされます)
  4. WSL再起動
wsl --shutdown
wsl -d Ubuntu

これで無事起動しました。VHDXは無傷だったので、データもそっくりそのまま戻ってくれました。

まとめ

  • 症状: Wsl/Service/CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND でWSL2が起動不能
  • 原因: クラッシュ/休止でWSLシステムファイルが欠損 → 2.7.x系のインストーラーでは再配置できず復旧しない(同様の報告多数)
  • 対処: WSLを2.6.3にロールバック(通常インストールするだけ)
  • データ: VHDXが残っていれば消えない

突然の起動不能はかなり焦りますが、VHDXさえ生きていれば落ち着いて対処できます。同じ症状の方は、まずデータの確認、それからロールバックの順で試してみてください。

WSL2まわりのトラブルは、過去にもいくつか踏んでメモを残しています。あわせてどうぞ。