はじめに
WSL2がリリースされてからはや数年、Windows上でもLinuxの環境を作成することが非常に手軽になりました。
しかしWSLでは現状、通常の方法では同じディストリビューションの環境を複数インストールすることが出来ません。例えば、執筆時点で使用可能なディストロ一覧は以下の通りですが、
PS C:\> wsl -l --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
AlmaLinux-8 AlmaLinux OS 8
AlmaLinux-9 AlmaLinux OS 9
AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10
AlmaLinux-10 AlmaLinux OS 10
Debian Debian GNU/Linux
FedoraLinux-42 Fedora Linux 42
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7
Ubuntu Ubuntu
Ubuntu-24.04 Ubuntu 24.04 LTS
archlinux Arch Linux
kali-linux Kali Linux Rolling
openSUSE-Tumbleweed openSUSE Tumbleweed
openSUSE-Leap-15.6 openSUSE Leap 15.6
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_10 Oracle Linux 8.10
OracleLinux_9_5 Oracle Linux 9.5
Debianの環境が複数欲しい!となっても、標準のインストール方法では一つしか用意することが出来ません。
Ubuntuなどは複数バージョンが用意されているのでこれらを併用すれば量産出来ないことはないのですが、どうせなら全く同じ環境を用意したいところ。
そこで本記事では、一つのディストリビューション環境を複製することで同じバージョンの環境を2つ以上作成する方法を紹介します。
構築環境
- Windows11 24H2 ビルド:26100.4652
- WSL バージョン:2.4.13.0
どちらも執筆時点での最新バージョンです。WSL2での環境構築ができることを前提としています。
設定手順
ここでは、例としてUbuntu 24.04の環境を複製します。他のディストリビューションで行う場合は、説明やコマンド内のUbuntu-24.04を任意のディストロ名に読み替えてください。
1. まっさらの複製元環境を用意する
まず初めに、複製元となる新しい環境を用意します。
別にまっさらである必要はありませんが、その場合は変更済みの環境が複製されることになります。また、変更済みの環境を複製する場合、権限周りの影響なのかエラーが出て完全な複製が出来ない場合もあります。
既に作りたいディストロを使用中の場合は、後述の手順2,3を参考に別名の環境としてコピーしてから、コピー元の環境(最初からあった方)を削除して改めてインストールしてください。
PS C:\> wsl --install -d Ubuntu-24.04
ダウンロード中: Ubuntu 24.04 LTS
インストール中: Ubuntu 24.04 LTS
ディストリビューションが正常にインストールされました。'wsl.exe -d Ubuntu-24.04' を使用して起動できます
2. 複製元環境のエクスポート
手順1でUbuntu24.04がインストールできたら、OSイメージを出力します。
コマンドは以下の通りです。
wsl --export "対象のイメージ名" "出力ファイル名"
イメージ名はwsl -lで確認できます。ファイル名は任意ですが.tarを指定してください。
# 先に複製元となるOSイメージを保存するディレクトリを作成
PS C:\> mkdir \wsl2\
PS C:\> cd \wsl2\
# エクスポート実行
PS C:\wsl2\> wsl --export Ubuntu-24.04 ubuntu24_origin.tar
エクスポートが進行中です。これには数分かかる場合があります。 (1130 MB)
この操作を正しく終了しました。
実行すると複製元となるtarファイルが作成されます。
3. 新しい環境の作成
次に、実際に使用する環境を作成します。手順2で作成したtarファイルをインポートすることで、同じ内容の環境が作成できます。
コマンドは以下の通りです。
wsl --import "作成したいイメージ名" "イメージの保存先パス" "インポート元tarファイルのパス"
第1引数で設定したイメージ名が、実際にwslを起動する際に指定する名前になります。分かりやすく、かつ短めな名前を付けておきましょう。
第2引数は作成する環境が使用するディレクトリパス、第3引数は手順2で作成した複製元のtarファイルのパスを指定します。パスは相対でも絶対でも構いません。
# 作成した環境が使用するディレクトリを作成
PS C:\> mkdir \wsl2\dev_ubuntu24
PS C:\> wsl --import dev-ubuntu24 .\dev_ubuntu24\ .\ubuntu24-origin.tar
この操作を正しく終了しました。
この操作が完了すると、指定したパスの中に.vhdxという拡張子のファイルが生成されています。このファイルは仮想ハードディスク(Virtual Hard Disk)のファイルで、要は作成した環境そのものです。
実際にWSL上で環境が認識されているか確認してみましょう。
PS C:\wsl2> wsl -l -v
NAME STATE VERSION
* Ubuntu-24.04 Stopped 2
dev-ubuntu24 Stopped 2
このように表示されれば正常に環境が作成できています。
4. 環境の起動
では、実際に作成したコピー環境を起動してみましょう。
PS C:\wsl2> wsl -d dev-ubuntu24
Welcome to Ubuntu 24.04.3 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
root@DESKTOP-0F89456W:/mnt/c/wsl2#
無事に仮想環境が起動できました。
5. 通常ユーザーの作成、ログイン
本来なら環境の初回起動時に一般ユーザーを作成するのですが、それを飛ばしてしまったため現時点ではrootユーザーしか存在しません。ですので、先に通常ユーザーを作成します。
参考までにUbuntuでのユーザー作成手順です。
$ useradd -m ユーザー名
$ passwd ユーザー名
$ usermod -G sudo ユーザー名
ユーザーを作成したら改めてWSLに入るのですが、複製した環境にwsl -dで入るとrootでのログインになってしまいます。これはWSLの仕様だそうで、ユーザーを指定して入るには、
wsl -d "入りたいイメージ名" -u "ユーザー名"
で入ることが出来ます。若干面倒ですね...
6. (おまけ) 環境の削除
作成した環境を削除したい場合は、
wsl --unregister "削除したいイメージ名"
で削除できます。実行すると、手順3で作成したディレクトリもまとめて消去されます。
おわりに
これで他の仮想環境と同様、気兼ねなく環境の作成・削除ができますね。というか標準で対応してほしいのですが...コマンドが用意されているだけ親切なのでしょうか。
ちなみに、作成したtarファイルはバックアップとしても使えるので(というか本来はそういう使い方だと思うのですが)、活用してみてください。