2018年2月26日月曜日

FreeBSD Snapshot Management Environment の crontab

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
sysutils/freebsd-snapshot で導入される FreeBSD Snapshot Management Environment https://people.freebsd.org/~rse/snapshot/ では、毎時、毎日、毎週にスナップショットを取得するためのcrontabを書くんですが、これが見事にぜんぶ0分に回るんですよね…

# Perform hourly/daily/weekly maintenance (FreeBSD UFS/ZFS snapshots only).
0       *       *       *       *       root    periodic-snapshot hourly
0       0       *       *       *       root    periodic-snapshot daily
0       0       *       *       0       root    periodic-snapshot weekly

こんな具合で。で、daily.0 と weekly.0 のスナップショットが同時に取得されようとして、片方が失敗するということが稀に起きます。

Oct  1 00:00:01 filesv root: snapshot: making snapshot on /svr/home failed
Oct  1 00:00:04 filesv root: snapshot: daily.0 snapshot on filesystem /svr/home made (duration: 0 min)

ごらんのありさま。periodic-snapshot の中でロックファイルを作っているので、片方がコケるだけで済むのですが、どうもなあ…と思いまして、若干ずらしてみました。

# Perform hourly/daily/weekly maintenance (FreeBSD UFS/ZFS snapshots only).
0       *       *       *       *       root    periodic-snapshot hourly
5       0       *       *       *       root    periodic-snapshot daily
10      0       *       *       0       root    periodic-snapshot weekly

zfsでのsnapshot取りなら5分もいらないと思いますが、まあこれくらいでしょうか。

あと、snapshot作るのに失敗したとき、periodic-snapshot がエラーを記録してくれるんですけど、どのスナップショットを失敗したのかは表示してくれないのですね。

% diff -u periodic-snapshot.orig periodic-snapshot
--- periodic-snapshot.orig      2017-10-04 03:41:54.000000000 +0900
+++ periodic-snapshot   2017-10-04 03:42:35.000000000 +0900
@@ -121,7 +121,7 @@
                 snapshot make -g$when $fs:$time_tag.0
                 if [ $? -ne 0 ]; then
                     logger -p daemon.error \
-                        "snapshot: making snapshot on $fs failed"
+                        "snapshot: making snapshot on $fs:$time_tag.0 failed"
                     exit 1
                 fi
                 time_end=`date '+%s'`


こんな改造とかは許されるだろうか?

0 件のコメント: