昨日 WSL を起動しようとしたところ、以下のように「ファイルにアクセスできません。」と言われ利用できなかった。
> wsl -d ubuntu
ファイルにアクセスできません。
何が原因なのかは不明だがとにかく起動しない。この直前に Windows の復元を行った影響だとは思うが、何故復元したら壊れるのか・・・
WSL が動かないだけなら WSL と ディストリビューションを再インストールすれば良いだけだ。しかし、WSL 外に保存していない各種データが消えると困る。
とはいえ、起動しないだけならデータは残っている可能性が高いため、データを復旧してみることにした。
WSL データのバックアップ
WSL2 のストレージは vhdx 形式の仮想ドライブに保存される。まずは仮想ドライブのバックアップを行おう。
Ubuntu であれば以下のようなパスに保存されている。
C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_??????\LocalState
こんな感じで ext4.vhdx ファイルがあると思う。このファイルを別の場所にコピーしよう。
WSL の再インストール
WSL 関連のものを一度全てアンインストールし、再インストールしよう。
Windows の「設定」アプリから「アプリ」->「インストールされているアプリ」から「Ubuntu(もしくは利用しているディストリビューション)」と「Windows Subsystem for Linux」があればそれらをアンインストールし、Microsoft Store から再度インストールしよう。
もし再インストールしても動かないのであれば「Windows の機能の有効化または無効化」から「Linux 用 Windows サブシステム」のチェックを外し再起動し、再度チェックを入れて機能を有効にしなおしてみる。
WSL が再度実行できれば OK だ。
WSL で VHDX をマウントする
WSL が再度動くようになったら vhdx ファイルをマウントしよう。PowerShell から以下のコマンドを実行する。
> wsl --mount "path\to\ext4.vhdx" --vhd
もし「パラメーターが間違っています。」とかいわれる場合は「wsl --update」を実行して wsl をアップデートする。
マウントに成功すれば以下のように「ディスクは '/mnt/wsl/ext4vhdx' として正常にマウントされました。」と表示される。
マウントされたら WSL から元のファイル群にアクセスできる。
こんな感じ。これでバックアップを取れる。
余談だが WSL のフォルダはエクスプローラーで \\wsl$ と入力するとアクセスできる。
GUI のほうがよい場合はこちらを利用すると良い。
このように WSL2 では vhdx 形式でデータを管理しているため、他の環境からマウントする事もできる。便利だ。にしてもデータ消えなくてよかった。
コメント
ありがとうございました。
データが助かりました!(^^)!