WSL2ファイルの移動は必ずしも簡単ではなく、正直なところ、暗闇の中をハッキングで切り抜けるような感覚になるかもしれません。手動で行うと、ファイルパス、レジストリ設定、あるいは単なる破損といった問題に遭遇する可能性があります。ここでの主な目的は、システムドライブの空き容量を増やすか、Linux環境を全てを破壊することなく、より高速または大容量のドライブに移動することです。最大の問題は、WSLがVHDXファイルをAppDataの奥深くに保存するため、何をしているのかを正確に理解していない限り、手動での移動は危険を伴うことです。幸いなことに、エクスポート/インポートを使用して安全にこれを行う組み込みの方法があり、これはより神経質にならず、より信頼性が高い傾向があります。
WSL2を別のドライブまたはPCに適切に移動する方法
エクスポートとインポートの方法を使用する
この方法は、Microsoftが現在推奨している方法の1つです。レジストリをハッキングしたり、VHDXファイルを手動でコピーしたりすると、奇妙なバグが発生したり、ディストリビューションが壊れたりすることが多いためです。すべてをtarballにパッケージ化して、好きな場所に再インポートできるので、かなり便利です。WSLファイルが大量のディスクを消費し始めたり、環境をより高速なドライブに移動したい場合、この方法は非常に役立ちます。少し時間がかかりますが、非常に安全で、セットアップも維持されます。ただし、この操作を行う前にWSLをシャットダウンしておく必要があります。そうしないと、スムーズに動作しません。
まず、WSLが完全にシャットダウンされていることを確認してください。つまり、実行中のプロセスや開いているターミナルがない状態です。PowerShellwsl --shutdownまたはCMDで実行してください。次に、以下のコマンドで現在のディストリビューション名を確認します。
wsl --list --verbose
Ubuntu-20.04 と表示されているとします。バックアップするには、新しいドライブのどこかにバックアップディレクトリ(例えば E:\backup)を作成し、次のコマンドを実行します。
wsl --export Ubuntu-20.04 E:\backup\ubuntu_backup.tar
すべての内容をtarballに保存するため、しばらく時間がかかります。保存が完了したら、古いディストリビューションの登録を解除できます。
wsl --unregister Ubuntu-20.04
次に、新しいインストール先を設定します。ターゲットドライブに新しいインストール先を格納するディレクトリ(E:\WSL\Ubuntu-20.04 など)を作成します。次に、以下を実行します。
wsl --import Ubuntu-20.04 E:\WSL\Ubuntu-20.04 E:\backup\ubuntu_backup.tar
config --default-userこれにより、Linux環境が希望の場所に再インストールされます。デフォルトのユーザーは引き続きrootですが、必要に応じてLinux環境内のコマンドを使用して後で変更できます。
デフォルトのユーザーを変更するには、次のコマンドを実行します。
cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps.\ubuntu2004.exe config --default-user sysops
次のコマンドでディストリビューションを再度起動します。
wsl -d Ubuntu-20.04
これで、Linuxのセットアップが移動されました。カスタム設定やファイルは失われていないはずです。ドライブやマシンを変更すると、この手順を繰り返すことになるので注意してください。少し面倒に感じるかもしれませんが、ファイルエクスプローラーやレジストリでVHDXファイルを手動でハイジャックしようとする手間よりはずっと楽です。
LxRunOfflineのようなサードパーティツールの使用
もう一つのダークホースは、GitHubにある強力なユーティリティであるLxRunOfflineです。よりきめ細かな制御が必要な場合や、レジストリ編集を煩わすことなくスクリプトで操作したい場合に便利です。インストールにはChocolateyが使えます。正直、ダウンロードを手動で操作する手間を省くには、Chocolateyを使うのが一番です。次のコマンドを実行してください。
Set-ExecutionPolicy Bypass -Scope Process -Force [System. Net. ServicePointManager]::SecurityProtocol = [System. Net. ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System. Net. WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) choco install lxrunoffline
インストールが完了したら、次のようにディストリビューションを一覧表示します。
lxrunoffline list
安全のために WSL を停止します。
wsl --shutdown
特定の WSL イメージがどこに存在するかを確認したい場合は、次を試してください。
lxrunoffline get-dir -n Ubuntu-20.04
新しいドライブに移動するには、次の操作を実行します。
lxrunoffline move -n Ubuntu-20.04 -d D:\wsl\Ubuntu-20.04
その後は、LxRunOffline コマンドを使って通常通り起動できますwsl -d Ubuntu-20.04。レジストリエントリをいじるよりもリスクが少なく、より細かく制御できます。
急ぎの移行や複数のディストリビューションの管理が必要ですか?これらのツールと方法は、Linux環境の破損を防ぐのに役立ちます。ただし、移行するたびに設定を再確認し、可能であればバックアップを取ってください。Windowsは当然ながら、移行を必要以上に困難にしているからです。
まとめ
wsl --shutdownファイルを移動したり、インポート/エクスポートする前に使用して、クリーンな状態を保ちます。- ディストリビューションをバックアップします。
wsl --export手動でファイルをコピーするよりも安全です。 - バックアップ後に古いディストリビューションを慎重に登録解除し、新しい場所に tarball をインポートします。
- より詳細な制御やスクリプト可能な動作が必要な場合は、LxRunOfflineなどのサードパーティ ツールを検討してください。
- 移行後は必ずユーザー設定、特にデフォルトのログイン設定を再確認してください。
まとめ
WSL2ファイルを全て壊さずに移動するのは少々面倒ですが、これらの方法を使えば何とかなります。特に重要な場合は公式のエクスポート/インポートが最も安全ですが、コマンドライン操作に多少の慣れがあればサードパーティ製の方法も悪くありません。理由は定かではありませんが、一部の環境ではVHDXファイルを手動で移動しても期待通りに動作しないことがあります。おそらく権限やレジストリキーが残っていることが原因でしょう。必ずバックアップを取り、後でクリーンアップ作業を行うことを想定しておいてください。これで、誰かが自力で解決しようと数時間も無駄にせずに済むことを願っています。正直に言うと、私も同じ経験をしたことがあり、本当にイライラしました。