2009/07/14

google desktopのキャッシュはpdumpfsから除くべし

pdumpfsを使っていますが、どうも/homeの領域にサイズの大きなファイルがあり、全体の保存期間が短かくなっているのに気がつきました。調べてみると"~/.google/"が毎回10GBほど新規に保存されています。

$ sudo -i
# cd /misk/bk/2009
# du -ks 07/*/home/user1/.google/
10078060 07/04/home/user1/.google/
10198732 07/08/home/user1/.google/
10200183 07/12/home/user1/.google/

pdumpfsは日付毎にディレクトリをコピーするイメージでバックアップを作ってくれますが、内容の変更されていないファイルについては、ハードリンクを使ってi-nodeが同じとすることで重複してディスクを消費する事はありません。"du"に"-l"オプションを付けずに、同時に共通する領域のサイズを計測すれば差分のサイズだけが表示されます。

 du -ks 07/*/home/user1/Mail
2815860 07/01/home/user1/Mail
21476 07/06/home/user1/Mail
21100 07/09/home/user1/Mail

ハードリンクなので同一ファイルシステム内にバックアップを取らなきゃいけないとか(2008, 2009年ディレクトリにディスクをmountするとかは無駄が起こる。してもいいけれど。)、直接バックアップファイルを編集するとi-nodeが同じな他の日付のファイルも書き変わってしまうとか、まっとうな制約はありますが、非常に理解しやすい仕組みで動いています。

悪さをしているのが~/.google/だとわかったので定期実行しているスクリプトの中で--exclude=/.google/を指定しましたが、コマンドラインの組み立て方によっては少し注意が必要です。

ファイルをコピーする時に$ cp src/. dest/.のように実行するイメージで$ sudo pdumpfs src/. dest/.などとコマンドラインを組み立てていて"src/file01"を除外しようとして$ sudo pdumpfs --exclude=src/file01 src/. dest.と実行しても"file01"は除外されずに保存されます。

まぁ第一引数SRCに"src/."と指定すれば内部的に"src/./test01"が生成されるとわかっていれば当然なんですけどね。ここら辺を調べるためにコードを眺めてみるとFile.fnmatchを使った方法も使える事がわかりました。けれどflagが設定できないので、ワイルドーカードを使うシェルに近い感覚で使えるものの、パワーは活かしきれないようです。

pdumpfsではFile.basename(path)に対して"--exclude-by-glob"の引数が一致するか確認されます。つまり"*.c"のような方法でファイル名を指定するためにあるので、'/'を含むパスで指定してはいけません。

$ sudo pdumpfs --exclude-by-glob=src/./test01 src/. dest/.
directory    src/.
new_file     src/./test02
new_file     src/./test01
$ pdumpfs --exclude-by-glob=test0 src/. dest/.
directory    src/.
new_file     src/./test02
new_file     src/./test01
$ pdumpfs --exclude-by-glob="test0*" src/. dest/.
directory    src/.

やりたかったのはこれ

$ pdumpfs --exclude=src/./test01 src/. dest/.
directory    src/.
new_file     src/./test02

それで、気をつけることは…

結論としてはGoogle Desktopを使っている場合は"~/.google/"をバックアップ取らないようにする事と、 SRC, DESTの末尾に"/."を含めないようにしてください。

$ pdumpfs
Usage: pdumpfs SRC DEST [BASE]

0 件のコメント: