WSL2でcodeコマンドやexplorer.exeがハングする

WSL2上でcodeコマンドを使ってVSCodeを開こうとしたらハングしてしまった。WSL2の再起動や高速スタートアップを無効にしてもWindowsの再起動をしても治らないし、codeコマンドだけではなくexplorer.exeもハングしてしまう。

調査していると、Windows上のパス(/mnt/c/)だと問題なく動作することがわかった。そこで、codeexplorer.exe も内部で利用しているであろう wslpath がおかしいのではないかと思い、wslpath -m を実行してみると以下のようになった。

$ wslpath -m /
//wsl.localhost/Ubuntu/
$ wslpath -m /mnt/c
C:/

WSL2上のパス(/など)だと//wsl.localhost/Ubuntu/のようになっていてなにかおかしい。WSL2上のパスは//wsl$/<ディストリビューション名>のはずである。さらに調査していると、どうやら、Build 21354//wsl$/<ディストリビューション名> から //wsl.localhost/<ディストリビューション名>/ に変更になり、今後はこちらが使われるらしい(現状は//wsl$/<ディストリビューション名>でも開ける)。

しかし、//wsl.localhost/Ubuntu でアクセスしてもハングしてしまいアクセスできない。このことから不具合の原因は wslpath でもなく //wsl.localhost/Ubuntu でアクセスできないことによるらしいことがわかった。また、ほかのディストリビューションでは問題なくアクセスできるのでWSL2自体に問題はなく、自分が使用している Ubuntu ディストリビューションが壊れているらしいことがわかった。

具体的にどこがおかしいか調査をしたかったが、いまいちわからなかったので Ubuntuクリーンインストールしたところ治った。

なお、環境は以下のとおりである。