WSLのLinuxがアイコンから起動できなくなった

# はじめに
ある日、いつものようにWindows11のWSLに入れたAlmaLinuxを起動しようとすると、エラーが出て起動できなくなりました。
数日前にWindows Updateがあり、それ以降初めての起動かもしれません。

# 環境
- Windows 11 Home 23H2

# 現象
「WslRegisterDistribution failed with error: 0x80070050」というエラーです。
ググれば結構悩まされている人がおります。M$のサイトも見ましたが、火消し役っぽい人が外れのナレッジ沢山紹介していたりしますね。

```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80070050
Error: 0x80070050 ??????????

Press any key to continue...
```

ディストリビューションと呼ばれるVMのようなもののエラーなのでしょうか？
しかも何故かインストールしようとしている？で、登録失敗になっているのでしょうか？

アイコンからの起動は上記のようなエラーになるのですが、コマンドプロンプトからwslコマンドを実行すると、ディストリビューションは見えるし、ログインもできます。

```powershell:
C:\Users\shika>wsl --list
Linux 用 Windows サブシステム ディストリビューション:
AlmaLinux9 (既定)
Ubuntu

C:\Users\shika>wsl
[haomei@Legion:/mnt/c/Users/shika]$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.3 (Shamrock Pampas Cat)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.3 (Shamrock Pampas Cat)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"
[haomei@Legion:/mnt/c/Users/shika]$ exit
logout
```

VM(ディストリビューション)は使えるのでディスクイメージは無事で、何かしらのWSL特有の構成ファイル的なものが壊れたのでしょうか？ますますWindows Updateが怪しいですね。

# 暫定対処方法
## exportする
ネットをウロウロして、exportして削除してimportすれば...という対処方法を見つけたので、とりあえずexportします。

```powershell:
C:\Users\shika>wsl --export AlmaLinux9 AlmaLinux9.tar
エクスポートが進行中です。これには数分かかる場合があります。
この操作を正しく終了しました。
```

無事にディスクイメージのようなものの採取はできたようです。
アイコンから起動できないディストリビューションはあってもしょうがないので、--unregisterで削除しました。

```powershell:
C:\Users\shika>wsl --unregister AlmaLinux9
登録解除。
この操作を正しく終了しました。
```

## 新しくディストリビューションを作る
アイコンから起動したいので、一旦AlmaLinuxアイコンから起動すると、初期化されて新しくディストリビューションが作成されます。
おそらく、こいつのディスクイメージを上書きすれば再びアイコンから起動できるのではないかと考えました。

```powershell:
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: haomei
Changing password for user haomei.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
Installation successful!
[haomei@Legion:~]$
```

ログアウトしてwslコマンドで確認すると、以前とは違う名前のものが出来ています。
一応、停止させておきます。

```powershell:
C:\Users\shika>wsl --list -v
  NAME             STATE           VERSION
* Ubuntu           Stopped         2
  AlmaLinuxOS-9    Running         2

C:\Users\shika>wsl --shutdown AlmaLinuxOS-9

C:\Users\shika>wsl --list -v
  NAME             STATE           VERSION
* Ubuntu           Stopped         2
  AlmaLinuxOS-9    Stopped         2
```

新しく作成されたディストリビューションのディスクファイルは`%LOCALAPPDATA%\Packages`あたりにあるようなので、フォルダとファイルを探しておきます。
私の場合は以下にありました。
`C:\Users\shika\AppData\Local\Packages\AlmaLinuxOSFoundation.AlmaLinux9_dx92scvka9p9g\LocalState\ext4.vhdx`

## importして新しいディストリビューションに上書きする
exportしたファイルをimportする際に指定するディレクトリを適当に作成して、importしてみます。

```powershell:
C:\Users\shika>mkdir C:\Users\shika\AppData\Local\AlmaLinux9

C:\Users\shika>wsl --import AlmaLinux9 C:\Users\shika\AppData\Local\AlmaLinux9 AlmaLinux9.tar --version 2
インポート中です。この処理には数分かかることがあります。
この操作を正しく終了しました。
```

import時に新しいディストリビューションのディレクトリを指定するとエラーになります。
ディスクファイルをimportしたファイルで上書きします。

```powershell:
C:\Users\shika>copy C:\Users\shika\AppData\Local\AlmaLinux9\ext4.vhdx C:\Users\shika\AppData\Local\Packages\AlmaLinuxOSFoundation.AlmaLinux9_dx92scvka9p9g\LocalState\ext4.vhdx
C:\Users\shika\AppData\Local\Packages\AlmaLinuxOSFoundation.AlmaLinux9_dx92scvka9p9g\LocalState\ext4.vhdx を上書きしますか? (Yes/No/All): Y
        1 個のファイルをコピーしました。
```

※今思えば、export & importせずとも、vhdxファイルを探してコピーしておけばいいのかもしれません。

## アイコンから起動してみる

無事成功！

export & importしたディストリビューションは使わないので削除します。

```powershell:
C:\Users\shika>wsl --list -v
  NAME             STATE           VERSION
* Ubuntu           Stopped         2
  AlmaLinuxOS-9    Stopped         2
  AlmaLinux9       Stopped         2
```

```powershell:
C:\Users\shika>wsl --unregister AlmaLinux9
登録解除。
この操作を正しく終了しました。

C:\Users\shika>wsl --list -v
  NAME             STATE           VERSION
* Ubuntu           Stopped         2
  AlmaLinuxOS-9    Stopped         2
```

# おわりに
Windowsよくわからんニャー。