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

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

関連記事

ICTリテラシー

複数のGIFファイルを一括でPNGファイルに変換する

複数のGIFファイルを一括でPNGファイルに変換する方法を紹介します。

英辞郎

英辞郎 on the WEB はどこに行った?

最近、株式会社アルクのURL https://www.alc.co.jp/ は完全にコーポレートサイトになったようです。英辞郎 on the WEB は全く表示されなくなり、英単語を調べることはできま …

Vim

Emmet-vim の HTML5用スニペットを変更する

Vim エディタには、HTML & CSS の入力補助を行う mattn/emmet-vim というプラグインがあります。 これを使うと、例えば ul>li*5 と入力した直後に、Ctr …

Windows

Windows 10 のターミナル設定(MSYS2編)

MSYS2 を使って、Windows 10 にターミナル環境を構築する方法を紹介します。 MSYS2というのは、Windows上にUNIXライクな環境を導入するソフトウェアです。 現在では、Windo …

Evernote

Android 用 Evernote 8.9 で検索ができない問題

Android 用 Evernote バージョン 8.9 で検索ができない問題についての対応策を書いています。