WSL 2 の環境をバックアップ&複製する方法

この記事は最終更新日から 1年以上 が経過しています。

WSL 2 を使用していると、1つのディストリビューションにつき1つの環境しか作れないように感じてしまいますが、実はそんなことはありません。 WSL 2 のエクスポートとインポートの機能を使用すると、環境を丸ごとバックアップしたり、同じ環境を簡単に複製したりすることができます。 複数の環境を作って動作確認したい場合などではとても便利です。 WSL 2 の使い方がわからないという方は、まずは「WSL(Windows Subsystem for Linux)の使い方」を参考にしてください。

環境をバックアップ(エクスポート)する

WSL 2 の指定したディストリビューションを丸ごと .tar ファイルに出力(エクスポート)することができます。 出力された .tar ファイルを保存しておけば、環境を丸ごとバックアップしておくことができます。

エクスポートするには、wsl コマンドで --export オプションを使用し、 エクスポートしたいディストリビューション名と、エクスポート先のファイル名を指定します。 ファイルのフォーマットは .tar ファイルになります。

書式
wsl --export <Distro> <FileName>
例:"Ubuntu" を "C:\Users\Test\Ubuntu.tar" ファイルにエクスポートする場合
wsl --export Ubuntu "C:\Users\Test\Ubuntu.tar"

バックアップから復元(インポート)する

.tar ファイルにエクスポートした環境を、新しい環境に復元(インポート)することができます。

エクスポートした .tar ファイルをインポートするには、wsl コマンドで --import オプションを使用し、 新しいディストリビューション名、VHD ファイルを保存するディレクトリ名、インポートする .tar ファイル名を指定します。

WSL 2 の各ディストリビューションは、VHD ファイルで管理されています。 VHD というのは、Virtual Hard Disk の略です。 つまり、仮想ハードディスクファイルです。 この VHD ファイルこそが各ディストリビューションの本体ということになります。 インポートする際には、その VHD ファイルをどこに置くか(つまり、どこにインポートするか)を指定する必要があります。 場所はどこでも良いのですが、ホームディレクトリなどの邪魔にならないところに置いておくと良いでしょう。

なお、インポートした環境を起動すると、何故かデフォルトのユーザーが root になってしまうという問題が発生します。 デフォルトのユーザーを変更する方法は後述します。

書式
wsl --import <Distro> <InstallLocation> <FileName>
例:新しいディストリビューション名 "NewUbuntu" として、
VHD ファイルを "C:\Users\Test\wsl\NewUbuntu" ディレクトリに置いて、
"C:\Users\Test\Ubuntu.tar" ファイルをインポートする場合。
wsl --import NewUbuntu "C:\Users\Test\wsl\NewUbuntu" "C:\Users\Test\Ubuntu.tar"

環境を複製(コピー)する

環境を複製(コピー)するには、エクスポートしてからインポートすれば良いのですが、 その場合はバックアップとしての .tar ファイルを経由させる必要はありません。 標準入出力を使用すると良いでしょう。

エクスポートの際、ファイル名に - を指定すると、標準出力にエクスポートされるようになります。 また、インポートの際、ファイル名に - を指定すると、標準入力からインポートされるようになります。

この2つを組み合わせることで、.tar ファイルを使用せずに、簡単に環境を複製(コピー)することができます。

書式
wsl --export <FromDistro> - | wsl --import <ToDistro> <InstallLocation> -
例:"Ubuntu" を、新しいディストリビューション名 "CopyUbuntu" として複製し、
その VHD ファイルを "C:\Users\Test\wsl\CopyUbuntu" ディレクトリに置く場合
wsl --export Ubuntu - | wsl --import CopyUbuntu "C:\Users\Test\wsl\CopyUbuntu" -

インポートした環境のデフォルトのユーザーを変更する

インポートした環境を起動すると、何故かデフォルトのユーザーが root になってしまうという問題が発生します。 デフォルトのユーザーを変更する方法は、主に2つあります。

  • ディストリビューションの設定ファイルでユーザーを指定する
  • 起動時に --user オプションでユーザーを指定する

ディストリビューションの設定ファイルでユーザーを指定する

ディストリビューションの設定ファイルは、各ディストリビューションの中の "/etc/wsl.conf" に作成します。 フォーマットは ini です。 [user] セクションの中の default という項目で、デフォルトのユーザーを指定できます。

例:デフォルトのユーザーを "test" にする場合
/etc/wsl.conf
[user]
default = test

なお、この設定ファイルが反映されるのは、そのディストリビューションを次に起動した時(つまり、Stopped から Running に変わるとき)です。 下記のコマンドを実行して、ディストリビューションの状態を確認してください。 ターミナルを閉じて開きなおしたとしても、そのディストリビューションがずっと Running 状態のままなら反映されないので注意してください。

wsl -l -v

ディストリビューションを停止させたい場合は、wsl コマンドで、--terminate オプションを使用します。 --terminate オプション には、エイリアス(別名) -t オプションがあります。

書式
wsl --terminate <Distro>
例:"NewUbuntu" を停止させる場合
wsl --terminate NewUbuntu

起動時に --user オプションでユーザーを指定する

もう一つの方法は、wsl コマンドでディストリビューションを起動する際に、 --user オプションでデフォルトのユーザーを指定する方法です。 --user オプション には、エイリアス(別名) -u オプションがあります。

例:"NewUbuntu" の デフォルトのユーザーを "test" にする場合
wsl -d NewUbuntu -u test

Windows ターミナルのコマンドライン欄に登録しておくと便利かもしれません。

terminal.png

参考サイト

関連記事

Docker は、構成を気軽に組み替えたりできるので、とても便利ですよね。Windows で Docker を使って開発している方も多いと思うのですが、個人的にはどうしても気が乗らない理由がありました。それは処理速度です。遅い。遅すぎる。めちゃくちゃ遅い。つらい。耐えられない。。。ということで調査しました。いろいろと調 ...
Windows で開発している際、動作確認のために Linux のプログラムやコマンドを動かしたいなと思うことがあります。そんな場合に便利なのが WSL(Windows Subsystem for Linux)です。WSL(Windows Subsystem for Linux)とは?WSL(Windows Subsy ...
Windows 上の Docker を高速化するためには WSL 2 を使うと良いというのは、以前の記事「Windows の Docker 環境を高速化する方法」で書きました。そこで、今回はその WSL 2 上に PHP と JavaScript の開発環境を作る方法を、備忘録としてメモしておきます。WSL 2 の使い ...

お知らせ

記事検索

最新記事

人気記事

RSSフィード

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(旧 Twitter) もしくは、お問い合わせより、お願いします。