LoginSignup
9
4

知らぬうちにWSLがCドライブ以外のところにインストールされてた件

Last updated at Posted at 2024-04-27

TL;DR

Windowsの設定で システム>ストレージ>新しいコンテンツの保存先 をCドライブに設定
Xboxのインストール先設定もできればCドライブに
困ったら C:/Program Files/WindowsAppsls すると壊れたかインストール先が違うかを確認
英語で検索するとより多い情報が出ることもある

あれ?更新ができないぞ?

定期的にDocker desktopが使えなくなる癖があって、そのたびにDocker desktopの再インストール、古いバージョンのインストールなどをするようにしています。

ある日再インストールの途中で「Docker Desktop - WSL update failed」と表示されていたので、手動でWSLの更新をかけることにしました。

$ wsl --update
インストール中: Linux 用 Windows サブシステム
パッケージ ファミリ単位のポリシーによってシステム ボリューム以外への展開が制限されているため、展開操作がブロックされました。ポリシーに従って、このアプリはシステム ドライブにインストールする必要がありますが、システム ドライブが既定の場所として設定されていません。[ストレージの設定] で、新しいコンテンツを保存するための既定の場所としてシステム ドライブを設定してから、インストールを再試行してください。
$

こんなエラー文言初めてみたぞ…?と思い、そのまま 日本語で 検索しても情報がなかったのでとりあえず従って設定をしてみました。
筆者はパソコンに複数の内蔵ストレージを設置していますので、デフォルトはSSDを使っているCドライブじゃなくてHDDを使っているDドライブに設定していました。
image.png

とりあえず全部Cドライブに戻して、パソコンを再起動してまた wsl --update を実行しました。

が、まったく同じ文言が表示されていました。

クリーンインストールも効かない

既存でインストールしてあるUbuntuにはアクセスできるものの、Docker desktopが使えない以上Ubuntu上にあるDev Containerも起動できないので、データを退避させてWSL爆発させました。

$ wsl -l -v
  NAME                   STATE           VERSION
  Ubuntu-20.04           Stopped         2
* Ubuntu-22.04           Stopped         2
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2

$ wsl --unregister <ディストリビューション名>
登録を解除しています...
$

アプリとWindowsの機能からもアンインストールと無効にして再起動します。
image.png
image.png
image.png

再起動後はWindowsの機能を再度有効化にし、ターミナルでWSLインストールを実行しました。

$ wsl --install
インストール中: Linux 用 Windows サブシステム
パッケージ ファミリ単位のポリシーによってシステム ボリューム以外への展開が制限されているため、展開操作がブロックされました。ポリシーに従って、このアプリはシステム ドライブにインストールする必要がありますが、システム ドライブが既定の場所として設定されていません。[ストレージの設定] で、新しいコンテンツを保存するための既定の場所としてシステム ドライブを設定してから、インストールを再試行してください。
$

どういうことだってばよ…

英語で wsl package family検索すると関連するissueが見つかりました。

コメントにあったやり方で直してみます。

Toggling the "New apps will save to" setting from C to D and back again fixed this!
「新しいアプリの保存先」をCドライブからDドライブにし、戻したら直りました!

これは試しましたが、自分の環境だと直りませんでした。

Quick update here @John-P and for anyone looking for a solution. I did some research over the internet and found this workaround that worked for me: #6405 (comment)

It seems that vmcompute.exe must be strictly Code flow guard (CFG) enabled, otherwise it will not work.
Windowsセキュリティ>アプリとブラウザ コントロール>Exploit protection>制御フロー ガード(CFG) をオンにすると直ります

既定でオンにする と設定して再起動したが直りませんでした。

I managed to fix this by running wsl --install --inbox and then running wsl --install --web-download
wsl --install --inbox (Windowsコンポーネント版をインストール) をして wsl --install --web-download (GitHubから最新をダウンロード) すると直りました

wsl --install --inboxwsl --install --web-download でディストリビューションをインストールはできましたが、 wsl --update は同じエラー文言を吐きますし、 Docker desktopは相変わらず起動でエラー吐いていました。

最終的な解決策

Opened up an admin Powershell, navigated to the default C:\Program Files\WindowsApps folder and tried to run ls on the WSL package folder. Got an error. Seems like it was corrupted somehow.
Used Get-AppxPackage -allusers in the same Powershell session to get the list of all packages installed and found the offending WSL package that was causing an issue.
Ran Remove-AppxPackage -Package 'MicrosoftCorporationII.WindowsSubsystemForLinux_2.0.14.0_x64__8wekyb3d8bbwe' (this is the package on my system giving an issue, yours may be different).

なるほど、WindowsAppsのインストール先を確認すればいいのですね。
管理者権限でターミナルを起動して確認、と…

$ cd "C:/Program Files/WindowsApps"
$ ls

    Directory: C:\Program Files\WindowsApps

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
...
d----    2024年4月14日 06:26:07 午後                MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_neutral___8wekyb3d8bbwe -> E:\WindowsApps\MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_neutral___8wekyb3d8bbwe
...
$

ん?

MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_neutral___8wekyb3d8bbwe -> E:\WindowsApps\MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_neutral___8wekyb3d8bbwe

もしかしてこれってシンボリックリンクでWSLが別のドライブにインストールされている…?
Eドライブのほうも確認すると

$ cd E:/WindowsApps
$ ls


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
...
da---    2024年4月14日 06:39:13 午後                Microsoft.Windows.Ai.Copilot.Provider_1.0.3.0_neutral__8wekyb3d8bbwe
d----    2024年4月14日 06:26:07 午後                MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_neutral___8wekyb3d8bbwe
...
$

なぜかWSLがEドライブにインストールされていることが確認できました。なんでやねん…

ターミナルをCドライブのほうに戻して、パッケージを完全に削除します。

$ Remove-AppxPackage -Package 'MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_x64__8wekyb3d8bbwe'
$

Windowsの機能で Linux用Windowsサブシステム仮想マシン プラットフォーム にチェック入れてパソコンを再起動し、 wsl --update を実行します。

$ wsl --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
$ wsl --install -d Ubuntu-24.04
...
$

無事WSLの更新ができました。
Docker desktopも起動できるようになりました。めでたしめでたし。

以上

英語でもGitHubのissueにしか解決策がなく、日本語だと情報がそもそもなかったので自分で書くことにしました。
日本語は母語じゃなくて独学の第三言語なので下手なところがありますが、記事自体が誰かのお役に立てれば幸いです。
では。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4