Es gibt auf FreeBSD mehrere Möglichkeiten um ZFS Snapshots zu automatisieren. Ich selbst nutze sehr gerne die zfstools (sysutils/zfstools). Dieses orientiert sich nämlich an der Automatisierung von Solaris / Opensolaris. Liegt mir am nächsten und kann sogar konsistente Snapshots einer MySQL oder auch PostgreSQL erstellen.

Die zfstools sind als binary oder aus den Ports flott installiert:

root@errorlap ~> pkg install zfstools

Nach der Installation füttert man noch schnell seine /etc/crontab:

# ZFS snapshots
15,30,45 * * * * root /usr/local/sbin/zfs-auto-snapshot frequent  4
0        * * * * root /usr/local/sbin/zfs-auto-snapshot hourly   24
7        0 * * * root /usr/local/sbin/zfs-auto-snapshot daily     7
14       0 * * 7 root /usr/local/sbin/zfs-auto-snapshot weekly    4
28       0 1 * * root /usr/local/sbin/zfs-auto-snapshot monthly  12

Ggf. muss die Path Variable in der crontab noch erweitert werden:

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

Fehlt nur noch dieses ebenfalls im jeweiligen ZFS Volume zu aktivieren. Auf meinem Notebook reicht es mir für das Homevolume:

root@errorlap ~> zfs set com.sun:auto-snapshot=true zroot/usr/home

Ab diesem Moment werden nun ZFS Snapshots für mein(e) home(s) erstellt. Im Standard werden dabei folgende Snapshots vorgehalten:

– Ein Snapshot alle 15 Minuten, dabei werden 4 Snapshots vorgehalten.
– Ein Snapshot jede Stunde, dabei werden 24 Snapshots vorgehalten.
– Ein Snapshot jeden Tag, dabei werden 7 Snapshots vorgehalten.
– Ein Snapshot jede Woche, dabei werden 4 Snapshots vorgehalten.
– Ein Snapshot jeden Monat, dabei werden 12 Snapshots vorgehalten.

Für meine Zwecke ist diese absolut ausreichend. Über diesen Weg komme ich sehr schnell und einfach wieder an einen alten Stand 🙂

kernel@errorlap ~> zfs list -r -H -t snapshot zroot/usr/home
zroot/usr/home@zfs-auto-snap_hourly-2016-05-19-11h00	21,5M	-	82,5G	-
zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-11h30	14,6M	-	82,6G	-
zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-11h45	13,3M	-	82,6G	-
zroot/usr/home@zfs-auto-snap_hourly-2016-05-19-12h00	14,0M	-	82,7G	-
zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-12h15	12,6M	-	83,9G	-
zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-12h30	13,7M	-	83,9G	-

Möchte man eine Datenbank damit „sichern“ muss dieses speziell für das Datenbankvolume angegeben werden:

root@errorlap ~> zfs set com.sun:auto-snapshot=postgresql DATASET

Im Grunde muss es nicht erwähnt werden…. Aber eine Datensicherung auf dem gleichen System ist keine echte Datensicherung 😛 Man könnte jetzt aber diese Snapshots mit einem zfs send  verbinden und somit die Snapshots replizieren.