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