目次
1. はじめに
WSL 2 では Linux ディストリビューション(以下 ディストロと表記します)を導入することができますが、通常ですと1種類のディストロを複数個(複数のインスタンス)導入することはできません。しかし、wsl.exe
コマンドを使えば実現可能です。本記事では、この手順について説明します。
※ 同様の手順で WSL 1 もうまくいくかもしれませんが、本記事は WSL 2 で試した結果を元に書いています。
2. 手順
ここでは、Ubuntu を複数インスタンス導入する手順について説明します。
※ WSL 2 の導入手順については省略します。
(1) 通常通りディストロをインストールする(インスタンスを作成する)
Microsoft Store から Ubuntu を導入します。
導入後に、PowerShell で wsl.exe -l -v
コマンドを実行した結果が以下です。
PS> wsl.exe -l -v
NAME STATE VERSION
* Ubuntu Running 2
ここでは、WSL 1 ではなく WSL 2 を利用していることが分かります。
(2) このディストロのインスタンスをエクスポートする
PowerShell を開き、以下のコマンドを実行して Ubuntu をエクスポートします。
PS> wsl.exe --export <ディストロ名> <エクスポート先のファイルパス>
今回の場合、例えば以下のようなコマンドになります。
PS> wsl.exe --export Ubuntu c:\Users\foo\Ubuntu.tar
- このコマンドにより、導入したディストリビューションのファイルシステム(/ 以下のディレクトリとファイル)が tar で1つのファイルにまとめられ、エクスポートされます。
- Microsoft Store から導入した Ubuntu は、
C:\Users\{username}\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
フォルダが実体のようですが、ここにあるフォルダやファイルがすべてエクスポートされるわけではありません(ストレージとなるファイルは、この中のLocalState\ext4.vhdx
ファイルです)。
(3) 元のディストロ・インスタンスは消してもよい
これから作成する新規インスタンスの元となるデータをエクスポートできたので、最初に導入したディストロはアンインストールしても構いません。
(4) エクスポートしたデータを元に、新規インスタンスを作成する(何個でも作成可能)
wsl.exe
コマンドの “--import
” という引数を使って、Ubuntu のインスタンスを生成します。
PS> wsl.exe --import <ディストロ名> <インストール先のフォルダパス> <インポートするファイルパス>
- <ディストロ名>: 任意の名前を指定します。
- <インストール先のフォルダパス>: 任意のフォルダパスを指定します。
- <インポートするファイルパス>: 先程エクスポートしたファイルパスを指定します。
具体的には、例えば以下のコマンドとなります。
PS> wsl.exe --import Ubuntu2 c:\Users\foo\wsl\Ubuntu2 c:\Users\foo\Ubuntu.tar
この操作により、指定したフォルダ以下にストレージファイル (ext4.vhdx
) が生成されます。
この時点で、wsl.exe -l -v
コマンドを実行すると以下の結果になります。
PS> wsl.exe -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
Ubuntu2 Stopped 2
※ この例では、元の Ubuntu は削除していません。
(5) 作成したインスタンスを起動する
PowerShell 上から、以下のコマンドでインスタンスを起動することができます。
PS> wsl.exe -d <ディストロ名> -u <username>
-u
オプションを指定しないと、root でログインするようです。
コマンドの具体例は以下です。
PS> wsl.exe -d Ubuntu2 -u foo
- ユーザー名は、
foo
としています。
Windows Terminal を使う場合は、設定ファイル settings.json
内の commandline
プロパティに、このコマンドを指定すればよいです。
(6) インスタンスの登録を解除する
インスタンスが必要なくなったら、まず以下のコマンドで「登録の解除」を行ってから、インポートして生成されたファイルを削除します。
PS> wsl.exe --unregister <ディストロ名>
今回の場合ですと、以下のコマンドになります。
PS> wsl.exe --unregister Ubuntu2
3. 関連する wsl.exe オプション
wsl.exe
の関連オプションの説明は以下です。
--export <ディストリビューション> <ファイル名>
ディストリビューションを tar ファイルにエクスポートします。
標準出力の場合は、ファイル名を - とすることができます。
--import <ディストリビューション> <インストール場所> <ファイル名> [オプション]
指定した tar ファイルを新しいディストリビューションとしてインポートします。
標準入力の場合は、ファイル名を - とすることができます。
オプション:
--version <バージョン>
新しいディストリビューションに使用するバージョンを指定します。
※ これは、wsl.exe --help
を実行して表示される説明文です。