【重要】バックアップを忘れずに!
wslが起動しなくなってもディスクイメージは無事に残っている可能性があります。
作業前に必ず
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.XXXXXXXX\LocalState\ext4.vhdx
を確認し、バックアップを取得しておきましょう(XXXXXXはディストリビューションによって違う)
特に、wsl --unregister <ディストロ名>を実行するとそのディストリビューションのディスクが消えてしまいまうので気を付けてください。
本題
wsl --updateでwslをアップデートしたのですが、以下のエラー出てwslが起動できなくなりました
ディスク 'C:\Program Files\WSL\system.vhd' を WSL2 にアタッチできませんでした: 指定されたファイルが見つかりません。
エラー コード: Wsl/Service/CreateInstance/CreateVm/MountVhd/HCS/ERROR_FILE_NOT_FOUND
確かに、C:\Program Files\WSLを見るとsystem.vhdがいなくなっています。
WSLのクリーンインストール方法をChatGPTに聞いたりググったりすると、
- dism.exeで無効化/有効化したあとwsl --installで再インストール
- windowsの機能の有効化/無効化でwsl、Virtual Machine Platformを削除、再インストール
- システム > システムコンポーネントからLinxu用windowsサブシステムを削除
という解決方法ばかりが出てくるのですが、どれもWSLをやってもsystem.vhdが戻ってくることはありませんでした。
私はこれで直った
ChatGPTで新しいチャットを開きまくって、聞き方変えて何回も聞いているうちに出てきたのがこれ。
wsl --shutdown
wsl --uninstall
これを管理者権限で実行するとC:\Program Files\WSLがなくなりました!
どきどきしながらwslのインストールに再挑戦すると復活!
あわててwsl --unregisterを実行しなかったことが功を奏し、インストール済みのディストリビューションもそのまま復活しました。
なぜすぐwsl --uninstallが出てこなかったのか
wsl --helpを見ると確かに
Copyright (c) Microsoft Corporation.All rights reserved.
この製品のプライバシー情報については、https://aka.ms/privacy にアクセスしてください。
使用法: wsl.exe [Argument] [Options...] [CommandLine]
Linux バイナリを実行するための引数:
コマンド ラインが指定されていない場合、wsl.exe は既定のシェルを起動します。
--exec, -e <CommandLine>
既定の Linux シェルを使用せずに、指定されたコマンドを実行します。
--shell-type <standard|login|none>
指定されたコマンドを、指定されたシェル タイプで実行します。
--
残りのコマンド ラインをそのまま渡します。
~ 省略 ~
--uninstall
このマシンから Linux 用 Windows サブシステム パッケージをアンインストールします。
~ 省略 ~
と書いてあるのですが、WSL の基本的なコマンドをみてもunistallオプションのことは何も書いてないのであまり有名じゃないのかもしれません。
いろいろやってもダメだった人は自己責任でお試しください。