pdumpfs-rsync のハック
pdumpfs-rsync は便利ですが,使うにはいくつか注意点が。
まず,pdumpfs 1.x に対応していないです。これは CVS 版では直っているのでそちらをとってきましょう。なぜリリースされていないかは不明ですが。
そしてその CVS 版ですが,初めての実行のときに,「can't convert nil into String」とか怒られて途中で終わってしまうと思います。これは下記のパッチ(to CVS 1.7版)をあてれば大丈夫になります。
--- pdumpfs-rsync.1.7 2006-04-03 10:44:15.000000000 +0900 +++ pdumpfs-rsync 2006-04-03 10:58:21.000000000 +0900 @@ -143,7 +143,11 @@ if ( $? >> 8 != 0 ) STDERR.print "WARNING: rsync failed: #{ARGV[0]}; exit value: #{$? >> 8}\n" end - pdumpfs.update_snapshot(src, latest, today) + if latest + pdumpfs.update_snapshot(src, latest, today) + else + pdumpfs.recursive_copy(src, today) + end else STDERR.print "rsync failed: #{ARGV[0]}; exit value: #{$? >> 8}\n" exit $? >> 8
よんどころなき事情により rsync が fail すると処理が続行されないとか,pdumpfs 自身が Ruby 1.8 前提なのに pdumpfs-rsync(や pdumpfs-clean)が filtutils ではなく ftools 使っているとか,色々いじりたいところもありますが,動くこと優先のノウハウとしては上記のような感じで。
あと,似たようなソフトに Perl で書かれた http://www.rsnapshot.org/ というものもあるみたいです。rsync とハードリンクを使ったシンプルな仕組みで構造はわかりやすいです。pdumpfs(-rsync) と比べて直感的に使える部分が損なわれているので,私は使いませんが。