ディストロのバックアップ/リストア

 WSL2上で稼働するLinuxディストリビューションのバックアップおよびリストアの方法

基本操作

 バックアップ/リストアを行う際には以下の確認操作を行う。

ステータスの確認

 バックアップは、該当するディストリビューションの動作ステータスが停止状態であることを確認してから実施する。
 またリストアは、該当するディストリビューションが存在しないことを確認してから実施する。

PS> wsl.exe --list|-l --verbose|-v

ディストロの停止

 バックアップ時、該当ディストロがもし稼働中であれば停止する。

PS> wsl.exe --terminate|-t <ディストロ名>
or
PS> wsl.exe --shutdown

仮想ハードディスクのロケーション

 WSL 2 は、ディストリビューション毎に1つの仮想ハードディスク(ext4.vhdx)を持つ。
それぞれのフォルダは、以下のレジストリキー値に記載されている。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\<GUID>\
  DistributionName: ディストロ名
  BasePath: ext4.vhdxが設置されているフォルダ

仮想ハードディスクの最適化

 仮想ハードディスクは使用に伴い拡大するため、必要なら縮小(最適化)しておく。
最適化前には必ずディストロを停止しておくこと。

(管理者モード)
PS> Optimize-VHD -Path <設置フォルダ>\ext4.vhdx -Mode Full

バックアップ

 該当ディストロが停止していることを確認し、バックアップ(アーカイブ)を行う。

PS> wsl.exe --export <ディストロ名> <アーカイブファイル(.tar)>

リストア

既存ディストロの解除(削除)

 該当ディストロが存在する場合には上書きされない。もし、上書きの必要がある場合には、予めDocker Desktopから解除(削除)しておく。
※ 本コマンドにより、仮想ハードディスク(ext4.vhdx)も削除される。

PS> wsl.exe --unregister <ディストロ名>

リストア

 バックアップを行ったアーカイブファイル(.tar)を用いてリストアを行う。

PS> wsl.exe --import <ディストロ名> <設置先フォルダ> <アーカイブファイル(.tar)> [--version 2]
  • ディストロ名:バックアップ時のディストロ名以外でもよい
  • 設置先フォルダ:仮想ハードディスク(ext4.vhdx)を格納するディレクトリ
  • アーカイブファイル:バックアップ時に取得したtarファイル
  • デフォルトバージョンが2の場合、–version 2 は不要。

ディストロ内シンボリック・リンクの解除(異なるWindowsユーザの場合)

 バックアップ時とは異なるWindowsユーザを用いてリストアした場合は、ディストロ内に書き込まれているシンボリック・リンクの参照先が、元のユーザ・フォルダを指している。
もし、現ユーザーが管理者に昇格している場合には、元のユーザーフォルダを破壊する可能性も否めない。一般ユーザーの場合には、正常にdockerコマンドを発行する事が不可能となる。
 これに対処するため、以下の操作を行う。

  1. 当該ディストロに関して、Docker Desktop fow Windows のWSL 2 統合を無効にする。
  2. 当該ディストロにログインし、rootユーザホームディレクトリ(/root)内に存在する無効なシンボリック・リンクを解除(unink)する。解除対象のファイルは以下の通り(他にもある?)
    1. .aws
    2. .azure
    3. .docker/contexts
    4. .docker/features.json
# cd ~
# unlink .aws
# unlink .azure
# unlink .docker/contexts
# unlink .docker/features.json
  1. 当該ディストロに関して、Docker Desktop fow Windows のWSL 2 統合を有効にする。これにより、現ユーザを用いたシンボリック・リンクに置き換わる。
  2. もし、ディストロ内でrootユーザ以外も使用している場合には、各ユーザのホームディレクトリも確認しておく。(影響は無いかもしれないが念のため確認する)