💾

[WSL2] --import-in-placeオプションを使ってディストリビューションを複製する

2024/06/30に公開

モチベーション

WSL2の環境を複製する機会があるたびにwsl --helpやネットの記事を調べてwsl --import ...をしていたのですが,ヘルプを眺めていたら--import-in-placeオプションがあることに気付いたのでまとめてみました.

ざっくりまとめ

  • *.vhdxファイルをWSLにインポートするオプションです.
  • --importよりディレクトリ構成が浅くなります.
使用例
$ wsl -t MyDistro
$ wsl --export MyDistro \path\to\MyDistro-2.vhdx
$ wsl --import-in-place MyDistro-2 \path\to\MyDistro-2.vhdx

--import-in-placeオプションとは

v0.58.0 (2022年4月)でリリースされていたようです.(知らなかった...)

構文

$ wsl --import-in-place <Distribution Name> <FileName>
  • <Distribution Name>
    • wsl --listで見られるディストリビューション名.Ubuntu, docker-desktop-dataとか
  • <FileName>
    • 新しいディストリビューションとしてインポートされる.vhdxファイルのパス.このパスには .vhdx拡張子を必ずつけること. つけ忘れると怒られます.
      $ wsl --export Ubuntu .\Ubuntu-hoge --vhd
      指定されたファイルには .vhdx ファイル拡張子が必要です。
      exit status 4294967295
      

実際に使ってみる

0. ファイルをまとめておくディレクトリを作成する

(個人的な好みですが)ディストリビューションの仮想ディスク(*.vhdxファイル)はまとめておきたいので%USERPROFILE%\wsl-distroを作ってそこで作業します.別に要らないやという方は読み飛ばしてください.

$ mkdir %USERPROFILE%\wsl-distro
$ cd %USERPROFILE%\wsl-distro
ここまでのディレクトリ構成
  %USERPROFILE% (== C:\Users\onamae\)
+ +-- wsl-distros\

1. ディストリビューションを*.vhdxファイルにエクスポートする

まずは既存のUbuntuディストリビューションをエクスポートします.このときの注意点として,--import-in-placeオプションは.vhdxファイルを使うので,エクスポート時には.vhdxファイルである必要があります.

$ wsl --export Ubuntu .\Ubuntu-hoge.vhdx --vhd
ここまでのディレクトリ構成
 %USERPROFILE% (== C:\Users\onamae\)
 +-- wsl-distros\
+    +-- Ubuntu-hoge.vhdx

2. *.vhdxファイルをインポートする

  1. でエクスポートしたUbuntu-hoge.vhdxをディストリビューションとしてWSLにインポートします.
$ wsl --import-in-place Ubuntu-hoge .\Ubuntu-hoge.vhdx

これでwslからUbuntu-hogeが起動できるようになります.

$ wsl --list
(略)
Ubuntu-hoge
(略)
$ wsl -d Ubuntu-hoge
root@LETSNOTE:/mnt/c/Users/Windowsのユーザ名/wsl-distributions#

--import--import-in-placeの違い

wsl --importwsl --import-in-placeを使ったディストリビューションの複製には,ディレクトリ構成の面で違いが出ます.

--importを使った方法
$ wsl --export Ubuntu .\Ubuntu-hoge.tar
$ wsl --import Ubuntu .\Ubuntu-hoge Ubuntu-hoge.tar
.
+-- Ubuntu-hoge\
|   +--- ext4.vhdx
+-- Ubuntu-hoge.tar
--import-in-placeを使った方法
$ wsl --export Ubuntu .\Ubuntu-hoge.vhdx --vhd
$ wsl --import-in-place Ubuntu-hoge .\Ubuntu-hoge.vhdx
.
+-- Ubuntu-hoge.vhdx

--import-in-placeオプションを使った方法のほうがディレクトリがより浅く済んでいます.また*.tarファイルが作成されないので,複製時にバックアップを残しておきたいなら--import,バックアップがいらないなら--import-in-placeを使うのがよいと思います.

参考

Discussion