rsyncを使って過去の変更・更新履歴だけを切り出す「差分バックアップ」を行う

2023年2月20日Linux・Ubuntu TipsLinux,Ubuntu,rsync

 

非常に分かりづらいタイトルであるが、rsyncを使用した差分バックアップの話。よく紹介されているrsyncの差分バックアップは、変更されていないファイルはハードリンクを取ることで、あたかも毎回「全てのファイルがバックアップされているかのように見える」方法をとるのだが、今回は次のようなファイル構成にしたい。

rsyncで差分バックアップを取る際のフォルダ構造

イラストで描くと次のような形である。

といってもわかりづらい。バックアップを取ると、常に「latest」フォルダに最新のファイルが格納されている。このファイルはハードリンクなどで構成されているのではなく、全て実ファイルとなっている。
しかし、バックアップ時点で変更されたファイルがあった場合、それらのファイルは自動的に「20171231」など、別のフォルダに取り分けられ、更新・変更を行っている場合でも、それらのファイルを参照すればバックアップを取得することが出来るようにする。

rsyncで使用するオプション

このバックアップを実行するのは非常に簡単で、「–backup-dir=」というオプションを使用すれば、このオプションで指定した場所に変更されたファイルが自動的に格納される。

なので、バックアップ時点の日付で変更されたファイルを取り分けたい場合、次のような形でrsyncを実行すれば良い。

rsync -azpv --delete --backup --backup-dir=../old-`date +%Y%m%d-%H%M` [バックアップするフォルダ] [バックアップ先]

rsyncのオプションはいちいち参照しても仕方がないと思うので、「azpv」の部分は適当に直して頂きたい。その他の部分をかいつまんでおくと、最新のバックアップは常に「[バックアップ先]」で指定した場所に格納され、変更されたファイルがある場合、そのファイルは「old-yyyyMMdd-hhmm」というフォルダに格納される。

常に「latest」を見れば最新のファイルを確認することが出来、昔のファイルに遡りたい場合には「old-*****」にアクセスすれば良い。別にハードリンクを作るバックアップオプションを使用しても良いのだが、このようにした方がWindowsやMacを使用している場合(私の場合、NASにバックアップを取っている)には都合が良いので、こんな形にしている。

Posted by webnetforce