WSL環境のバックアップ・リストア、さらにハードリンクで容量節約

Windows Subsystem for Linux (WSL) の環境のバックアップ・リストア方法です。
Windows領域にバックアップをとります。バックアップ先のファイルシステムは NTFS であることが必要です。
バックアップはフルバックアップをとりますが、変更が無いファイルはハードリンクで保持するので、実質、差分バックアップ相当のディスク使用量で済みます。

ただし、バックアップ元とバックアップ先が異なるドライブの場合、初回のフルバックアップでは、バックアップ元と同じサイズのディスクを使用します。

なお、以下 /mnt/X となっている個所は、バックアップ先ドライブに合わせて /mnt/c や /mnt/d に置き換えて下さい。


バックアップ


初回バックアップ


バックアップ先ディレクトリを用意します。
WSL でパス /mnt/X/~ のように Windows領域へアクセスして、バックアップを保存します。
Linuxのパーミッション情報なども保持するため、下の記事の設定を行っておいて下さい。

WSL で Windowsのディスク領域を Linuxディスク領域のように使う: パソコン鳥のブログ

バックアップ先ディレクトリを作成します。


sudo mkdir /mnt/X/wsl/backup


バックアップから除外するディレクトリを、exclude_list.txtファイルに記載しておきます。
後でこのファイルを使います。

/mnt/X/wsl/backup/exclude_list.txt

/mnt
/dev
/proc
/tmp
/sys
/run


準備ができたので、初回のフルバックアップを行います。
/mnt/X/wsl/backup/backup0 にバックアップします。

・バックアップ元とバックアップ先が同一ドライブの場合

sudo rsync -a --exclude-from=/mnt/X/wsl/backup/exclude_list.txt --link-dest=/ / /mnt/X/wsl/backup/backup0


・バックアップ元とバックアップ先が異なるドライブの場合

sudo rsync -a --exclude-from=/mnt/X/wsl/backup/exclude_list.txt / /mnt/X/wsl/backup/backup0



2回目以降のバックアップ


バックアップ先は、日付-時間 をディレクトリ名に含めています。


sudo rsync -a --delete --exclude-from=/mnt/X/wsl/backup/exclude_list.txt --link-dest=/mnt/X/wsl/backup/backup0 / "/mnt/X/wsl/backup/backup-$(date +%Y%m%d-%H%M%S)"



リストア


・初回バックアップに戻す場合

sudo rsync -a --delete --exclude-from=/mnt/X/wsl/backup/exclude_list.txt /mnt/X/wsl/backup/backup0/ /


・2回目以降のバックアップから戻す場合
バックアップ元ディレクトリの日付・時間は、実際のバックアップディレクトリ名で置き換えて下さい。

sudo rsync -a --delete --exclude-from=/mnt/X/wsl/backup/exclude_list.txt /mnt/X/wsl/backup/backup-20190727-084904/ /




参考


rsyncのlink-destオプションは便利そうだ | OpenGroove
rsyncで差分バックアップを行うための「--link-dest」オプション - ITmedia エンタープライズ
rsyncだけで実現する!ファイルのバックアップ手法6選 【コマンド例編】 – Hacker's High

この記事へのコメント