うまいぼうぶろぐ

linuxとhttpdとperlのメモ

samba でshadow copy の機能を使う

LVMやbtrfsのsnapshotを使わなくてもrsyncの--link-dest と組み合わせれば簡単にshadow copy 使えて、昔のファイルにも復元可能にできますね。

snapshotの作成

sambaが利用するdefaultのsnapshotのディレクトリ名のformatは @GMT-%Y.%m.%d-%H.%M.%S

$ DIR=$(TZ=GMT date +@GMT-%Y.%m.%d-%H.%M.%S)
$ rsync -av  /path/to/data/ /path/to/snapshot/$DIR/

以後、rsyncのコピー先を、次に実行するrsync --link-destの引数に置き換えていって差分でバックアップを取っておくようにする。

$ rsync -av --delete --link-dest=/path/to/snapshot/$DIR1/ /path/to/data/ /path/to/snapshot/$DIR2

sambaの設定

このとき、shadowのsnapdir、basedir の末尾にはスラッシュをつけてはいけない!
snapshotのディレクトリ名のformatを変更したい場合はshadow: format で指定する。これでwindows のexplorer から右クリック、プロパティで"以前のバージョン" タブを選べば、過去のファイル・フォルダにアクセスできる。

[share1]
  comment = Data Directories
  browseable = yes
  writable   = yes
  path = /path/to/data
  vfs objects = shadow_copy2
  shadow: snapdir = /path/to/snapshot
  shadow: basedir = /path/to/data
  shadow: sort = desc

おまけ

必要ないけど、過去のファイルをさくっと見たいときに、右クリックしてプロパティ選んで、、、というのが面倒なのでsnapshotを置いている場所をread only でアクセス出来るような共有も作ってみた。pathをsnapshotのdirectoryに指定するだけですね。writable をnoにしておけばよりsnapshotっぽくなる。

[snapshot]
  comment = Snapshot Directories
  browseable = yes
  writable   = no
  path = /path/to/snapshot