WSL2はHyper-Vに近いしくみになっていて、データはVHDの中に格納されている。
VMに近いということはストレージ移動できるでしょ?と考える人は多いようでGitHubにissueが作られている。
詳細は上のissueを見ること。
以下要約
> wsl --export Ubuntu ubuntu.tar > wsl --unregister Ubuntu > wsl --import Ubuntu D:\wsl\Ubuntu\ ubuntu.tar
ただし、インポートを行うとデフォルトユーザがroot
になる。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}
の中のDefaultUid
の値をデフォルトにしたいユーザのUIDに変更する。
基本は1000
にすれば良い。
※ tar形式でエクスポートするときにサイズが1GBを大きく超えるとインポートが出来ないらしい
VHD形式でインポート・エクスポートすれば良い
> wsl --export Ubuntu ubuntu.vhdx --vhd > wsl --unregister Ubuntu > wsl --import Ubuntu D:\wsl\Ubuntu\ ubuntu.vhdx --vhd
解説
1行目
wsl2のディストリビューションを指定の形式でエクスポートする。
> wsl --export <dist_name> <target>
<dist_name>はwslのディストリビューションの名前(wsl -l
で表示される名前)を指定する。
<target>は出力先を指定する。
デフォルトでtar形式で出力されるようだ。
2行目
エクスポートするとデータは移動されるが、エントリが残る。
インポートする時に同じ名前で登録したいのでここで消す。
> wsl --unregister <dist_name>
<dist_name>はwslのディストリビューションの名前を指定する。(1行目と同じ名前)
3行目
インポートする時にパスを指定すると、VHDを指定したパスに配置することができる。
> wsl --import <dist_name> <path> <target>
<dist_name>は好きな名前を付けることができる。特にこだわりがなければ上2行と同じで良いだろう。
<path>はVHDを配置するディレクトリを指定する。指定したディレクトリ直下にext4.vhdx
が配置されるので、D:\wsl\Ubuntu\
のようにディストリビューションの名前がわかるようにしておくと良いだろう。
<target>はエクスポートしたファイルを指定する。
デフォルトユーザの指定
※ 元からroot
ユーザを使っていた場合は以降の手順は不要。
以上の手順まででVHDの移動は終わっているが、デフォルトユーザがroot
になってしまっている。
デフォルトディストリビューションは次のコマンドでデフォルトユーザを変更できる。
> ubuntu config --default-user <USERNAME>
<USERNAME>は元々使っていたユーザ名を指定する。
デフォルトディストリビューション以外の場合はレジストリを編集するか、ディストリビューション上に設定ファイルを配置する。
レジストリで変更する
ディストリビューションをインストールするとHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
の下にGUIDのキーが作成される。
その中のDistributionName
の値で変更したいディストリビューションを判別する。
インポートしてすぐはDefaultUid
が0
(=root
)になっている。
これをデフォルトユーザにしたいユーザのUIDに変更する。(基本的に10進数で1000
で良い)。
設定ファイルで変更する
インポートしたディストリビューションにログインし、/etc/wsl.conf
を作成・編集する。
[user] default=<USERNAME>
<USERNAME>は元々使っていたユーザ名を指定する。