[ubuntu] WslRegisterDistribution failed with error: 0x80070003の解決方法について

今回ubuntuを起動しようとしたら以下のようなエラーで起動できなかったので、解決までの方法を紹介します

WslRegisterDistribution failed with error: 0x80070003
Error: 0x80070003 ????????????????

こうなった心当たりは、色々整理して消してたのでその時によくないもの消したのかなと勝手に思っています。
## 環境
Windows11

## この時の状況
・Ubuntuが起動/インストールできない
・Microsoft Storeでは「入手済み」になっているが、起動できない
・Docker DesktopがWSL 2を利用できず、エラーが発生

これらの症状から、WSLの基盤部分が破損している可能性が高いです。
特に、\\wsl\docker-desktop や \\wsl\docker-desktop-data\isocache にアクセスできないエラーが出ているため、WSLの仮想化基盤が正常に動作していないことが考えられます。

## エラーの原因
結論から言うとwslのディストリビューションが破損している、可能性だとわかりました
エラー 0x80070003 は通常、インストールパスに関する問題、またはディスクにアクセスできない場合に発生します。

## 解決方法について
### 1.WSL関連の設定を完全リセット
まず、WSLを完全にリセットし、破損した設定やデータをクリアします。

・WSLを完全リセットする手順
 PowerShell（管理者権限） を開いて、以下のコマンドを順番に実行してください。

WSLのシャットダウン（すべてのWSLインスタンスを停止）
```
wsl --shutdown
```

### 2.WSLのディストリビューションをすべて削除
```wsl --unregister Ubuntu
wsl --unregister kali-linux
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
```
Wsl/Service/WSL_E_DISTRO_NOT_FOUND のエラーが出る場合 → すでに削除されているため無視してOK

### 3.WSL自体を無効化 「Windowsの機能の有効化または無効化」 を開き、以下のオプションをすべて無効にする

・Windows Subsystem for Linux
・Hyper-V
・仮想マシンプラットフォーム
・Windowsハイパーバイザー プラットフォーム
OK押すと再起動が始まります

### 4.WSLの再インストール
再起動後、PowerShell（管理者権限）で以下を実行
```

PS C:\WINDOWS\system32> wsl --install
Windows オプション コンポーネントをインストールしています: VirtualMachinePlatform

展開イメージのサービスと管理ツール
バージョン: 10.0.26100.1150

イメージのバージョン: 10.0.26100.3037

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
Ubuntu は既にインストールされています。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
PS C:\WINDOWS\system32>
```
ここでもう一度再起動します
再起動後powershell立ち上げます
```
PS C:\WINDOWS\system32> wsl --list --verbose
Linux 用 Windows サブシステムにインストールされているディストリビューションはありません。

使用可能なディストリビューションを一覧表示するには、'wsl.exe --list --online' を使用します
インストールするには 'wsl.exe --install <Distro>' と指定します。

ディストリビューションは、Microsoft Storeにアクセスしてインストールすることもできます:
https://aka.ms/wslstore
エラー コード: Wsl/WSL_E_DEFAULT_DISTRO_NOT_FOUND
```
ここでディストリビューションはありませんと言われてしまったのですが無視して
### 5.Ubuntuのインストール
```
PS C:\WINDOWS\system32> wsl --install -d Ubuntu
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
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:
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Feb  1 21:46:33 JST 2025

  System load:  0.45                Processes:             69
  Usage of /:   0.1% of 1006.85GB   Users logged in:       0
  Memory usage: 6%                  IPv4 address for eth0: 192.168.37.225
  Swap usage:   0%


This message is shown once a day. To disable it please create the
/home/username/.hushlogin file.
username@localhost:~$
```
成功してubuntuのプロンプトになりました
普段タスクバーにしているので、powershell閉じてタスクバーに設定しているubuntuもいつも通りに戻っていました。

※中の作業ディレクトリは消えてしまっています
復元もできそうですが、特に重要なものは入れていなかったので今回はしません

#### 確認ポイント：
wsl --shutdown が成功 → WSLのプロセスは完全に停止済み
wsl --list -v で kali-linux と docker-desktop が表示 → WSLの基本機能は動作中
wsl -v でバージョン情報が取得できる → WSLのバージョンやカーネルは最新の状態

次にDockerも同じくインストールしようと思っていたのですが、なぜか消えてませんでした（エラーも出てこない）
```
username@localhost:~$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
 ```
この現象の理由は、WSLのディストリビューションを削除した時にDockerが完全に消えていなかった可能性があります。
可能性としては
#### Docker DesktopがWindowsアプリケーションとしてインストールされている
Docker Desktopは、Windows上で動作するデスクトップアプリケーションであり、WSLとは独立して動作します。つまり、Docker Desktopをインストールすると、WSL 2のコンテナエンジンとしてDockerがWSL環境内で動作するようになりますが、Docker Desktop自体はWindowsアプリケーションとして動作しています。
WSLのディストリビューション（Ubuntuなど）を削除しても、Docker Desktopは削除されない限り、そのまま残っているため、再インストール後にすぐにDockerが動作する場合があります。

#### Dockerのインストール状態が保持されていた：
Docker Desktopを再インストールした際に、以前の設定やインストールがそのまま残っていた可能性があります。このため、再インストールした直後でも、Dockerコンテナや設定がそのまま使用できる状態だったのかもしれません。

参考

https://github.com/microsoft/WSL/issues/6363