2020年7月15日追記
この記事の執筆から7年近くが経過しましたが、CentOS 7.8(Sambaのバージョンは4.10.4)とZFS on Linux 0.8.4の組み合わせでも以下に記載の設定で問題なく動いています。ご活用くださいませ。
前回(といっても4か月前ですが)に引き続きZFS on Linuxのお話。
ZFSの便利な機能の一つとしてスナップショット機能がありますが、ZFSをSambaで共有している場合にはスナップショットをWindowsのシャドウ・コピー機能から扱うことができます。
ただし、前回紹介したzfs set sharesmbによる方法では不可能です。smb.confで共有設定を行う必要があります。
なお、私の環境はCentOS 6.4とZFS on Linux 0.6.1です。
SambaはCentOS 6.4標準の3.6.9を用いています。
Step 1. 共有外のシンボリック・リンクを辿れるようにする
ZFSのスナップショットへのアクセスはSambaからは共有外へのシンボリック・リンクへのアクセスと同様に扱われるようなので、smb.confの[global]セクションに以下の設定を行います。
follow symlinks = yes
wide links = yes
unix extensions = no
Step 2. 共有設定でシャドウ・コピー機能をオンにする
例えばpoolストレージプール内のfooファイルシステムの全体またはその中のフォルダを共有している場合、以下のような設定を共有設定のセクションに追記します。
vfs objects = shadow_copy2
shadow:snapdir = /pool/foo/.zfs/snapshot
shadow:basedir = /pool/foo
shadow:format = %Y%m%d-%H%M%S
shadow:sort = desc
1行目ではシャドウ・コピーを有効化するvfs_shadow_copy2モジュールを指定しています。
2行目ではスナップショットのディレクトリとして、/pool/foo/.zfs/snapshotを指定しています。
.zfs/snapshotはファイルシステムのルートにあるスナップショット参照用隠しフォルダです。
3行目ではスナップショットの基準となるベースディレクトリとして/pool/fooを指定しています。
4行目ではスナップショット名のフォーマットを指定しています。
デフォルトのフォーマットである@GMT-%Y.%m.%d-%H.%M.%Sは@が含まれるため、
ZFSではスナップショット名として使用できません。
そこで、今回はフォーマットとして%Y%m%d-%H%M%Sを指定しています。
なお、時間はGMTです。
5行目では日付が新しい順でのソートを指定しています。
Step 3. スナップショットを作成する
Step 2のshadow:formatで指定したフォーマット通りの名前のスナップショットを作成します。
Step 2と同様にpoolストレージプール内のfooファイルシステムについて行うものとすると、
以下のようなシェルスクリプトでスナップショットを作成することができます。
#!/bin/sh
NOW=`TZ=GMT date +%Y%m%d-%H%M%S`
zfs snapshot pool/foo@${NOW}
このスクリプトはcronで定期実行させるのが便利でしょう。
以上、ZFS on LinuxとSambaでシャドウ・コピーを利用する方法でした。