Tools

【WSL 2】1つのディストロから複数のインスタンスを作成する方法

投稿日:2020年8月24日 更新日:

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 を実行して表示される説明文です。

4. 参考

📂-Tools

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windows

wsl-terminal を更新する

目次1. はじめに2. 環境3. バージョン4. 作業1. エクスプローラーのコンテキストメニュー2. 既存の wsl-terminal ディレクトリを退避3. 最新版 wsl-terminal の導 …

Evernote

Evernoteに自動引き落しさせない方法

Evernoteに自動引き落しさせない方法について説明します。

Git

Git で管理を始める時に実行するコマンド

あるディレクトリを Git でバージョン管理する場合に、最初に実行しているコマンドを紹介します。 (1) Git で管理するディレクトリに移動 $ cd path/to/dir (2) Git管理開始 …

Linux

nvm を使っているUbuntu 16.04 LTS 環境に、yarn をインストールする

GitHub – creationix/nvm を使っている Ubuntu 16.04 LTS 環境に、Yarn をインストールする手順を紹介します。 Installation | Yar …

WSL

WSL 2 で Docker を使うパターン

目次1. はじめに1-1. Docker についての基礎知識1-2. 前提2. WSL 2 ディストロ(Ubuntu) + パッケージのDocker を利用するパターン3. WSL 2 ディストロ(U …