NetAppのsnapshotみたいにスナップショットを取りたいと思う。とは言え、LVMのsnapshotはちょっと敬遠気味だ。用意すべき容量が読めないし、余りボリュームも用意しておかなかったし、多重に取っていくとOS全体に何か問題が起きそうな…。そこでfreshmeatで検索したら、rsnapshot(rsnapshot.org)というのが見つかった。
rsnapshotはけっこういい感じに見える。ハードリンクを使って容量を節約。ただしやはり、元データとスナップショットでハードリンクにするとスナップショット側まで更新されてしまうので、元データからスナップショットにコピーし、スナップショット間で更新されていなければハードリンクにするようにしてある。つまり、平たく言えば容量が2倍以上必要になる。まあこのほうが都合が良いのはわかる。スナップショットさえ1ボリュームに納めておけば、元データは複数のファイルシステムにまたがっていても大丈夫だし、むしろ別ノードからコピーしてスナップショットを取れる。初回以外ならけっこう高速なので1日に何度も取ることができるし。
ただ、実質的にディスクの使い方というのは90%を常に埋めておき、残りは10%くらいにしておく…という使い方が多いと思う。だから今さらこれを使おうとしても無理だ。必要なところ、ということでかなり絞らなければならない。そして、絞ると必要なところのスナップショットが取れてないという悲劇が起きる。
ext3cow(ext3cow.com)というのもある。ext3ファイルシステムの拡張で、copy on writeを使ってスナップショットを実現する。これなら2倍の容量は必要ない。ただし2.6系には移植されていないし、私はFedora Coreのgenericカーネルを使うことにしているので、使うのは無理だ。
結局いろいろexclude行を書いて容量的に辻褄を合わせたrsnapshotで使ってみることにした。
NetAppの共有をWindowsからCIFSで見ると、プロパティ経由等で過去のファイル履歴を取り出すことができる。恐らく、スナップショットを見るためのプロトコルがあるんだろうと思う。ファイルの属性に追加してるのかな。この機能もsambaと組み合わせてできるとうれしい人がいるかもしれないなと思う(私は別にうれしくないですが)。
(追記) 2006-01-13 12:03
sambaに入っているshadow_copyというvfs objectを使えばできそうだ。ディレクトリ名が固定なので、vfs_shadow_copy.cのほうを変更するか、rsnapshotのほうで都合をつけるかすればいいだろう。
なんかすぐにできそうな気がしてきた。だからどうなの、って話だけど。