LoginSignup
2
2

More than 1 year has passed since last update.

WSL2で同じディストリビューションの仮想マシンを複数作成する。

Posted at

はじめに

WSL2Ubuntuを触っていたとき、ふとVirtualBoxなどのように同じOSの仮想マシンを複数作成するにはどうするのだろうと思い、調べてやってみたことを残します。

WSLでの仮想マシンの作成

WSLで使えるディストリビューションを入手するにはMicrosoft Storeにアクセスし、インストールしたいディストリビューションを探し、「入手」ボタンを選択すればインストールされますが、一度入手してしまうと、再度同じディストリビューションを入手しようとしても以下のように「起動」ボタンしかなく、インストール済みであると表示されるため、同じディストリビューションで複数の仮想マシンを使うことができなくなっています。

capture_19072021_073904.jpg

しかし、wsl.exeのヘルプを見てみると、以下のようなimportexportの引数があることから、できないわけではないようなのでやってみます。

wsl.exeのヘルプ抜粋
Linux  Windows サブシステムを管理するための引数:

    --export <ディストリビューション> <ファイル名>
        ディストリビューションを tar ファイルにエクスポートします。
        標準出力の場合は、ファイル名を - とすることができます。

    --import <ディストリビューション> <インストール場所> <ファイル名> [オプション]
        指定した tar ファイルを新しいディストリビューションとしてインポートします。
        標準入力の場合は、ファイル名を - とすることができます。

        オプション:
            --version <バージョン>
                新しいディストリビューションに使用するバージョンを指定します。

WSLでの仮想マシンのファイル構成

WSLで仮想マシンをインストールする場合、「入手」ボタン一発でインストールされ、カスタマイズする余地が無いため、WSLで仮想マシンを作成する際のファイル構成などはユーザから意識させないつくりとなっていますが、実際の構成は以下のようになっているようです。

Ubuntu-20.04の構成 場所
仮想マシンディレクトリ C:\Users\[ユーザ名]\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxxxxxxxxxx
仮想ディスク C:\Users\[ユーザ名]\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxxxxxxxxxx\LocalState\ext4.vhdx

Microsoft Storeから他のディストリビューションをインストールした場合もCanonicalGroupLimited.Ubuntu20.04onWindows_xxxxxxxxxxxxxの部分が変わるだけで同じようにインストールされるようです。

また、仮想マシンディレクトリ内の構成は以下となります。

仮想マシンディレクトリ内の構成
tree /F C:\Users\[ユーザ名]\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxxxxxxxxxxx\
フォルダー パスの一覧:  ボリューム Windows
ボリューム シリアル番号は xxxxxxxx xxxx:xxxx です
C:\USERS\[ユーザ名]\APPDATA\LOCAL\PACKAGES\CANONICALGROUPLIMITED.UBUNTU20.04ONWINDOWS_XXXXXXXXXXXXX
├─AC
  └─Temp
├─AppData
├─LocalCache
  ├─Local
    └─Microsoft
  └─Roaming
      └─Microsoft
          └─Windows
              └─Start Menu
                  └─Programs
├─LocalState
      ext4.vhdx

├─RoamingState
├─Settings
      roaming.lock
      settings.dat

├─SystemAppData
  └─Helium
          User.dat
          UserClasses.dat

└─TempState

仮想マシンディレクトリとは異なりますが、\\wsl$と入力して開くと、各仮想マシンのファイルにアクセスできるため、ファイルをWindowsホストから仮想マシンに送りたい場合等に役に立つかと思います。

capture_21072021_082354.jpg

WSLでの仮想マシンエクスポート

インストール済みのUbuntu-20.04と同じ仮想マシンをもう一台作るためには仮想マシンをエクスポート→インポートすることで作成できるとのことなので、まずは仮想マシンをエクスポートしていきます。

仮想マシンをエクスポートするために、WSLで動作している仮想マシンを停止します。

停止するにはWindowsホスト側から以下コマンドで仮想マシン名と動作状況を確認して、起動中であればシャットダウンコマンドを実行することで停止します。

仮想マシン名と動作状況の確認
wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
Ubuntu-20.04の停止
wsl -t Ubuntu-20.04

停止後、以下エクスポートコマンドで仮想マシンをエクスポートします。

書式は上記ヘルプの通り、--export <ディストリビューション> <ファイル名>となるため、任意の場所にエクスポートします。

仮想マシンのエクスポート(ユーザディレクトリ直下に保存する場合)
wsl --export Ubuntu-20.04 'C:\Users\[ユーザ名]\Ubuntu-20.04_export.tar'

WSLでの仮想マシンインポート

エクスポートした仮想マシンのtarファイルをインポートして、新たな仮想マシンを作成していきます。

書式は上記ヘルプの通り、--import <ディストリビューション> <インストール場所> <ファイル名> [オプション]となります。

エクスポート時とは若干異なり、<ディストリビューション名>は新しい仮想マシンに付ける名前、インストール場所は任意の場所を指定できるので、Microsoft Storeから入手した場合にインストールされる場所にする必要は無いようです。

今回はUbuntu-importという名前の仮想マシン名でインポートしてみます。

仮想マシンのインポート
wsl --import Ubuntu-import 'C:\Users\[ユーザ名]\Ubuntu-import' 'C:\Users\[ユーザ名]\Ubuntu-20.04_export.tar'

インポート完了後、再度wsl -lコマンドで確認するとUbuntu-importという名前で新たに仮想マシンが作られていることが確認できます。

インポート後の仮想マシン名と動作状況の確認
 wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Stopped         2
  Ubuntu-import          Stopped         2

尚、インポート後はインポートするのに使用したtarファイルは不要なので削除してください。

インポートした仮想マシンの構成

仮想マシンをインポートすると、<インストール場所>で指定した名前のフォルダの中にext4.vhdxという仮想ディスクファイルが展開されます。

Microsoft Storeでインストールした場合のように他のフォルダは生成されず、仮想ディスクのみの構成となるようです。

また、仮想マシンの状態は、仮想マシンをエクスポートした時点の構成となり、リセットして初期状態に戻すようなこともできないようなので、もしMicrosoft Storeで入手したままの状態で作りたい場合、事前にその状態の仮想マシンをエクスポートしておく必要があります。

インポートした仮想マシンの起動

WSLのヘルプより以下コマンドを実行することで起動できます。

wsl.exeのヘルプ抜粋
    --distribution, -d <ディストリビューション>
        指定したディストリビューションを実行します。
インポートした仮想マシンの起動
wsl -d Ubuntu-import

インポートした仮想マシンの削除

Microsoft Storeからインストールしたディストリビューションは「アプリと機能」画面上からアンインストールすることで削除できますが、インポートした仮想マシンは「アプリと機能」に表示されないためコマンドから削除していきます。

削除はWSLの管理から以下コマンドで登録解除した後、インポートした際に指定したフォルダごと削除します。

wsl.exeのヘルプ抜粋
    --unregister <ディストリビューション>
        ディストリビューションの登録を解除します。
インポートした仮想マシンの削除
wsl --unregister Ubuntu-import
del <インストール場所>

おわりに

Windows Storeで入手した仮想マシンとは若干使い勝手が異なりますが、同じディストリビューションの仮想マシンを複数立ち上げられるのは、テストする場合などに有用だと感じました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2