Hi,
das hier ist mir grad so eingefallen. Das Script macht von allen datasets, die eine bestimmte user property haben, einen Snapshot, wobei es bei Filesystemen noch per zfs diff guckt, ob es Änderungen zu einem ggf. vorherigen Snapshot gibt, damit die Anzahl der Snapshots nicht ausufert.
Alte Snapshots zu recyclen ist noch nicht drin. Kann man evtl. auch über user properties machen.
Vielleicht findets ja einer hilfreich.
Edit: Die Idee ist natürlich, das alle x Minuten per cron zu starten. User properties sind solche, die ein : enthalten. Gängige Konvention ist, die Komponenten der Domain, unter der das läuft, umzudrehen und dann die property anzuhängen. Für einen Host unter foo.example also example.foo:autosnapshots.
das hier ist mir grad so eingefallen. Das Script macht von allen datasets, die eine bestimmte user property haben, einen Snapshot, wobei es bei Filesystemen noch per zfs diff guckt, ob es Änderungen zu einem ggf. vorherigen Snapshot gibt, damit die Anzahl der Snapshots nicht ausufert.
Alte Snapshots zu recyclen ist noch nicht drin. Kann man evtl. auch über user properties machen.
Vielleicht findets ja einer hilfreich.
Edit: Die Idee ist natürlich, das alle x Minuten per cron zu starten. User properties sind solche, die ein : enthalten. Gängige Konvention ist, die Komponenten der Domain, unter der das läuft, umzudrehen und dann die property anzuhängen. Für einen Host unter foo.example also example.foo:autosnapshots.
Code:
#!/bin/sh -u
PATH=/usr/bin:/usr/sbin:/bin:/sbin
property='example.foo:autosnapshot'
zfs get -H -o name,value -r -t filesystem,volume ${property} \
| while read dataset value; do
[ "${value}" = "on" ] || continue
lastsnapshot=''
snapshotrequired=0
case $(zfs list -H -o type ${dataset}) in
filesystem)
lastsnapshot=$(zfs list -d 1 -H -o name -t snapshot ${dataset} | tail -n 1)
if [ -n "${lastsnapshot}" ]; then
# previous snapshot exists, check for changes
[ -n "$(zfs diff -H ${lastsnapshot})" ] && snapshotrequired=1
else
# no previous snapshot exists, create one
snapshotrequired=1
fi
;;
volume)
# no diff checking for volumes
snapshotrequired=1
;;
esac
[ ${snapshotrequired} -eq 1 ] && zfs snapshot ${dataset}@auto_$(date +'%Y%m%d-%H%M')
done
Zuletzt bearbeitet: