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) で開発中
何が起きたか
時系列はこんな感じでした。
- WSL2上で作業中、突然WSLが落ちてVS Codeの接続が切れた
- その後Windows Updateが走り、再起動
- 再起動後、WSLが起動しなくなった
出ていたエラーはこれ。
指定されたファイルが見つかりません。
エラー コード: Wsl/Service/CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
wsl -d Ubuntu でも wsl(デフォルト起動)でも、同じHCSエラーで弾かれます。
原因
クラッシュや休止をきっかけに、WSL関連のシステムファイル(カーネルや .vhd ファイルなど)が欠損した状態になる。そして、その状態で2.7.x系のインストーラーで修復しようとしても、欠損ファイルを再配置できずに無言で失敗する。これが起動不能の正体のようです。
GitHubのIssueで同じ症状が多数報告されていました。
- microsoft/WSL #40488: https://github.com/microsoft/WSL/issues/40488
報告者本人いわく「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 vmcomputesfc /scannow/DISM /Online /Cleanup-Image /RestoreHealth- Windows機能(Virtual Machine Platform等)のオフ→再起動→オン
- 同バージョンのインストーラーでの「修復(Repair)」
基盤側(Hyper-V、VirtualMachinePlatform、vmcompute/hnsサービス、.wslconfig)はどれも正常でした。つまりユーザー環境の設定の問題ではなく、WSL本体側の問題ということになります。
対処方法(これで直った)
やることはシンプルで、WSLを2.6.3にロールバックするだけです。
- Docker Desktopを完全終了
- 2.6.3のインストーラーをダウンロード
https://github.com/microsoft/WSL/releases/tag/2.6.3
(x64なら
wsl.2.6.3.0.x64.msi) - ダウンロードした
.msiを普通にインストール(修復ではなく通常インストール。上書きでダウングレードされます) - 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まわりのトラブルは、過去にもいくつか踏んでメモを残しています。あわせてどうぞ。