rsyncでハノイの塔シーケンスな世代管理付きバックアップ

毎日1回の単純バックアップでは、1日放置すると障害でもうダメになったものをバックアップし、バックアップもアウトになる可能性があります。

世代管理があれば、そういったものは諦めて古いもので復旧できるので安心です。

 

ということで、rsyncのバックアップスクリプトをパワーアップさせてみました。

オプション–compare-destを使って世代管理を導入、ただのインクリメンタルじゃ面白くないのでdumpライクなハノイの塔シーケンスを採用しました。

レベル0(フルバックアップ)は手動でやることにして、こんなかんじにしました。

1a -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8

1b -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8 ->1aに戻る

 

以下、実装の話。

ソースをのせてバグっていたら危なすぎるので、考え方だけ。

 

■バックアップレベル管理

ファイルにハノイの塔シーケンスでレベルをずらっと書いておき、バックアップのたびに先頭にあるレベルを使います。

使ったら最後に移動させてローテーションさせます。

 

■–compare-destの指定

–compare-destは、指定したディレクトリにすでに同じものがバックアップされているかチェックしてくれるオプションです。

これを使って世代管理をします。

似たようなオプションに、同じものがあったらローカルコピーする–copy-dest、コピーではなくハードリンクを作る–link-destがあります。

 

ハノイの塔シーケンスを組むには、–compare-destを複数指定できるrsyncのバージョン2.6.4以降が必要です。

2.6.4以降であれば、複数書くと前から順番にチェックしてくれます。

例えばレベル3の時は、こんな感じで自分より低いレベルのディレクトリをチェックします。

rsync うんたらかんたら \

–compare-dest=/backup/2/dir/ –compare-dest=/backup/1a/dir/ –compare-dest=/backup/0/dir/ \

vps:/dir/ /backup/3/dir/

こうすれば、vps:/dir/をバックアップ元として、すでに同じものがないか2 -> 1a -> 0の順番でチェックしてくれます。

どこかにあればそのファイルは無視、見つからなければ3配下にバックアップされ、差分バックアップとなります。

 

今回レベル1を1aと1bの2セットにしました。

レベル1はどっちのディレクトリを見ればいいかは、バックアップレベル管理のファイルを見ます。

ファイルの後ろにあるほうが現在のサイクルで使っているレベル1なので、後ろにあるものを使います。

 

 

これでうっかり何かやっちゃっても安心。