• Windows Subsystem for Linuxガイド 第16回 WSLのバックアップとリストア

WSLは、Windowsの「サブ環境」として実現されているため、ホストマシンが動かなくなれば当然WSLも動かなくなる。PCには寿命があり、一人のユーザーからみれば、いつかは、ハードウェアを交換する時期が来る。こうした場合にそなえてWSLには、「バックアップ」と「リストア」の機能がある。ここでは、WSLのバックアップとリストアに関して解説を行なう。

このバックアップ、リストアを使うことで、以下のようなことが可能になる。

  • 現在の状態(ファイル、設定)を維持したまま他のマシンにコピー
  • 同一ディストリビューションを複数登録
  • ユーザー間でWSLローカルファイルシステムを共有
  • ディトリビューションの名前変更

なお、この記事では、Microsoftストア版のWSLを利用し、Windows 11 Ver.22H2上で動作させることを前提にしている。基本的には他のWSLやWindowsでも動作は同じと思われるが、wsl.exeコマンドは、Windows付属版とMicrosoftストア版により異なる動作をする点に注意されたい。

この記事で利用する用語などについては、(表01)にまとめておく。その他、本連載の過去記事なども適宜、参照していただけるとありがたい。

  • 表01

WSLのバックアップ方法

WSLのバックアップ方法には、WSLの機能を使うもの、Linuxの機能を使うもの、Windowsの機能を使うもの、の3種類がある(表02)。基本的には、WSLの機能を使うもので十分だが、リストア条件などにより3つを使い分ける必要がある。今回は、基本的なWSLによるバックアップとリストア方法を中心に解説する。

  • 表02

WSLによるバックアップ機能は、wsl.exeにある「export」、「import」オプションを利用する。このとき、Linuxの標準的なアーカイブ形式であるtar形式と、仮想ハードディスクファイル形式であるVHDXが選択できる。ただし、VHDX形式はWSL2のディストリビューションのみ利用可能である。

WSLディストリビューション内でバックアップを行なうには、「バックアッププログラム」を導入する方法(dumpなど)、「Linux標準のコマンド」を使う方法(tarなど)、そして「パッケージマネージャーのバックアップ機能」を使う方法の大きく3つがある。

WSL2のWSLディストリビューションは、仮想ハードディスクファイルに記憶され、起動に必要なのは、レジストリ情報であるため、WSLがシャットダウンされているときに、手動でVHDXファイルのコピーを作成することができる。また、PowerShellなどでレジストリを設定することで、VHDXファイルをWSLディストリビューションとして登録することも可能になる(詳細は次回解説)。このほか、VHDXファイルをWSLに外部ドライブとしてマウントして一部のファイルを取り出すことも可能だ。ただし、この方法で扱うことができるのは、WSL2で動作しているディストリビューションのみである。

バックアップ、リストアを行なう場合、WSLディストリビューションを停止させておく必要がある。このためには、


wsl.exe --shutdown

を実行する。

WSLの機能を使うバックアップ

WSLの機能を使うバックアップでは、“--export”オプションを使う。このとき、ファイル形式としてtarファイルまたは、vhdxファイルで出力ができる。

tarファイルによるバックアップは、WSLディストリビューションがVer.1でもVer.2でも対応が可能だが、vhdxファイルによるバックアップは、Ver.2のWSLディストリビューションのみ行なうことができる。逆に、WSL1のディストリビューションもtarファイルでしかバックアップが行えない。なお、ディストリビューションのバージョンは、「wsl.exe -l -v」で確認できる。

バックアップは、各ディストリビューションのローカルファイルシステム全体をバックアップしたもので、スワップファイルや外部ドライブなどは含まれない。コマンドは、


wsl.exe␣--export␣<ディストリビューション名>␣<バックアップファイルパス>␣[<オプション>]

という書式で利用する。オプションは、“--vhd”のみが指定可能で、指定しなければtar形式、指定すれば、vhdx形式でバックアップが行なわれる。なお、このコマンドでは、バックアップファイルパスの拡張子を自動的に変更してはくれないので、オプションに合わせてユーザーが「.tar」または「.vhdx」を指定する。指定しなくても動作に問題はないが、後で形式を判断するのが面倒になる。

たとえば、“Ubuntu-20.04”ディストリビューションをtar形式でバックアップするには、


wsl.exe --export Ubuntu-20.04 c:\temp\ubuntu2004.tar

とする(写真01)。

  • 写真01: wsl.exeを使ってのバックアップ(エクスポート)では、tar形式とvhdx形式の2つが利用できる

同様にvhdx形式でバックアップを行なうには、


wsl.exe --export Ubuntu-20.04 c:\temp\ubuntu2004.vhdx --vhd

とする。

WSLの機能を使うリストア

エクスポートしたファイルは、--importオプションで「新規」ディストリビューションとして登録することができる。

リストア(インポート)には2つの形式がある。このうち以下の形式は、tarファイル、vhdxファイルのどちらでも対応できる。


wsl.exe␣--import␣<ディストリビューション名>␣<インストール先パス>␣<バックアップファイルパス>[<オプション>]

ディストリビューション名は、英数(半角)ピリオドまたはハイフンのみを使う。大文字小文字は区別されないが、指定は保存される。なお、この--importオプションでは、バックアップファイルを元に新たなLinuxローカルファイルシステムが作られる点に注意されたい。

具体的には、以下のようなコマンドを使う(写真02)。


wsl.exe --import NewUbuntu2004 .\NU2004 c:\temp\ubuntu2004.tar --version 2
  • 写真02: wsl.exeを使ってのリストア(インポート)では、ディストリビューション名、インストール先、バックアップファイルを指定する。オプションでWSLバージョンとファイル種別が指定できる

これは、tar形式でエクスポートしたファイルシステムを「NewUbuntu2004」というディストリビューション名で、カレントディレクトリにある“NU2004”にWSL2でインポートするものだ。なお、ディストリビューション名は、既存のディストリビューション名と同じものは使えない。インストール先ディレクトリは、存在なければ作成される。

もし、バックアップしたファイルがvhdx形式なら、以下のように“--vhd”オプションを付ける。


wsl.exe --import NewUbuntu2004 .\NU2004 c:\temp\ubuntu2004.vhdx --version 2 --vhd

vhdxファイルを使い、WSL2でディストリビューションをインポート、エクスポートする場合、ファイルのコピーのみなので、tar形式よりも短時間で処理が終了する。逆にいうと、WSL2で、作業を短時間で終了させたい場合、vhdx形式でバックアップを行ない、vhdx形式でリストアを行なう。

ディストリビューションの登録解除

wsl.exeによるリストアは、必ず新規ディストリビューションとして登録されるため、既存のディストリビューションと同じ名前を付けることができない。現時点では、wsl.exeコマンドでは、ディストリビューション名を変更することができないため、既存のディストリビューションと異なる名前をつけるか、既存のディストリビューションを登録解除するしかない。

ディストリビューションの登録解除は、以下のコマンドで行なう。


wsl.exe␣--unregister␣<ディトリビューション名>

ただし、--unregisterを実行すると、WSLローカルファイルシステム(ext4.vhdx)が消去されることに注意してほしい。かならず、先にバックアップを行なった上で実行する必要がある。

他のユーザーとディストビューションを共有する

もう1つのリストア方法は、vhdx形式専用で、以下のオプションを使う。


wsl.exe␣--import-in-place␣<ディストリビューション名>␣<vhdxファイルパス>

このオプションでは、vhdxファイルをその場所で直接ディストリビューションとして登録する。--importオプションと違い、コピーは行なわれず指定したvhdxファイルがそのままローカルファイルシステムになる点が異なる。

このオプションを使うことで、システム内にある他のユーザーのWSLディストリビューションをそのまま利用することが可能になる。ただし、WSL自体は、ユーザー固有のプロセスとなり、異なるユーザーが同時に同じvhdxファイルをWSLで開くことはできない点に注意が必要だ。

複数のユーザーを使い分けて作業をするような場合、この方法で単一のWSLディストリビューション・イメージをユーザー間で共有でき、同じWSL環境を使うことが可能になる。

いま、あるユーザーが「C:\temp\Ubuntu2004」にWSLディストリビューションを配置しているとしよう。これを別のユーザーがディストリビューションとして登録するには、


wsl.exe --import-in-place NewU2004 C:\temp\Ubuntu2004\ext4.vhdx

とする(写真03)。ext4.vhdxは、WSL側ローカルファイルシステムのvhdxファイルの標準名である。なお、ディストリビューションを共有している場合、--unregisterオプションを使ってディストリビューションの登録解除を行なってはいけない。

  • 写真03: wsl.exeの--import-in-placeオプションを使うことで、他のユーザーとWSLディストリビューションを共有できる。既存のWSLディストリビューションのext4.vhdxファイルを指定する

今回はWSLが持つ機能を利用したバックアップ、リストアを中心に解説した。次回は、他の方法を使ったバックアップリストアについて解説したい。

>> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/