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) と比べて直感的に使える部分が損なわれているので,私は使いませんが。