PC を新しいものへ移行する際に WSL 環境の中身を移行するのを忘れていた。 というか、別の環境に最新のファイルがあると思い込んでいたので敢えて移行しなかったのだ。 実際は自分の旧 PC の WSL 環境にあったものが最新のファイルで、 それに気付いたときにはディスクの初期化が済んでいた。

旧 PC の Ubuntu 内には作業中のファイルがあり、 これが消えてしまうと10時間ほどかけた作業が無駄になってしまう。 こんなこともあろうかと、旧 PC のディスクを Disk2vhd で VHDX ファイル化したものは残しておいたので、 このバックアップファイルから必要なファイルを取り出すことにした。

旧 PC のバックアップから Ubuntu のディスクイメージを探す

まずは旧 PC のバックアップから Ubuntu のディスクイメージを探す。 VHDX ファイルをダブルクリックすると自動でマウントされるので その中を探したところ以下のパスにディスクイメージがあった。

\Users\ユーザー名\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

このファイルをマウントして中身を取り出して完了かと思ったら、 ファル名通りファイルシステムが ext4 だからなのか Windows ではマウントできなかった。

しかたないので新 PC の WSL へ新しいディストリビューションを入れて ext4.vhdx を置き換えることにする。

Alpine WSL をインストールする

ext4.vhdx からファイルを取り出すため Alpine WSL をインストールした。 これはおそらく新 PC で使ってないディストリビューションならなんでもいい。 新 PC でも既に Ubuntu を使い始めていたのでそれ以外で、 インストール作業に時間をかけたくないこともあり 軽量なことで有名な Alpine Linux を選択した。

インストール後、念のため一度起動して初期設定を行っておく。

WSL のサービスを停止して ext4.vhdx を置き換える

WSL のサービスが起動したままだとファイルがロックされていて置き換えられない。 コマンドプロンプトか PowerShell を管理者権限で起動し、 以下のコマンドで WSL のサービスを止める。

net stop LxssManager

次に以下のパスにある Alpine WSL の ext4.vhdx を旧 PC のバックアップから取り出したもので置き換える。

\Users\ユーザー名\AppData\Local\Packages\36828agowa338.AlpineWSL_my43bytk1c4nr\LocalState\ext4.vhdx

最後に以下のコマンドで WSL のサービスを起動する。

net start LxssManager

必要なファイルを取り出す

あとは alpine コマンドで起動し旧 PC の Ubuntu 環境へ入ってファイルを取り出すことができた。