zap for ZFS backup

これまでzfsボリュームのリモートバックアップは 自作スクリプトでやっていたが、処理対象ホスト増やす時の確認作業が多くて 汎用化しないとなあと思っていた。 しばらく前、FreeBSD/ports のEmacs-canna の取次をしてくださるjrmさんのサイトを見たときにたまたま zap を見つけ、 一件 Contribute した愛着もあってこの際zapを使うことにした。

ということでzapリモートバックアップの設定のツボ。簡潔に。

ローカルファイルシステム側

たったこれだけ。とても簡単。

zap snap するだけならコストが低いので何度も試して 挙動をつかむ。ちゃんと destroy する練習もする。destroy を注意深くやるにはこんなコマンドラインを使うとよい。

zfs list -t snap -oname -H|grep ZAP|grep 消したいパターン
: と確認しておいてから
!! | xargs -n 1 echo zfs destroy
: してさらにコマンドラインを確認し、それで間違いなければ
!! | sh -x

とすると、実行するコマンドを視認できるのでよい。

このように、実行するコマンドを xargs と echo の組み合わせで作ってから sh -x にパイプで渡すのはわかりやすい。もちろん、xargsの引数に 空白が含まれる場合は注意。ファイル名に空白入る場所では使えない。

リモート側

受けて溜め続けるだけなら特に設定不要。zfs send で送るホストからの ssh remote zfs recv を許可するための .ssh/authorized_keys を設定する程度。

溜め続けずに消すには crontab に zap destroy を仕込む。 この時、引数に対象ホスト名を入れるのを忘れない。 たとえばこんな感じ。

# delete ZFS snapshots
44      05      *       *       *       zap destroy bravo,phe

このあたりまとめて ZFS Snapshot Management and Replication with zap に書いてある。 ああ、ここ先に読めばよかった。