2021-05-15 18:32:23 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
2021-05-16 05:53:27 +00:00
|
|
|
errors=0
|
2021-05-15 18:32:23 +00:00
|
|
|
|
2021-05-16 05:53:27 +00:00
|
|
|
run-parts --exit-on-error -- /etc/zfs-snapshot-backup-pre.d || errors=1
|
2021-05-15 18:32:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
% for dataset in sorted(node.metadata.get('zfs/filesystems_with_backup_snapshots')):
|
2021-05-16 05:43:31 +00:00
|
|
|
mountpoint="/mnt/backup-snapshot${node.metadata['zfs']['datasets'][dataset]['mountpoint']}"
|
|
|
|
|
|
|
|
if findmnt "$mountpoint" >/dev/null
|
|
|
|
then
|
2021-05-16 05:53:27 +00:00
|
|
|
umount "$mountpoint" || errors=1
|
2021-05-16 05:43:31 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if zfs get type "${dataset}@snapshot-backup" >/dev/null 2>&1
|
2021-05-15 18:32:23 +00:00
|
|
|
then
|
2021-05-16 05:53:27 +00:00
|
|
|
zfs destroy "${dataset}@snapshot-backup" || errors=1
|
2021-05-15 18:32:23 +00:00
|
|
|
fi
|
|
|
|
|
2021-05-16 05:53:27 +00:00
|
|
|
zfs snapshot "${dataset}@snapshot-backup" || errors=1
|
2021-05-15 18:32:23 +00:00
|
|
|
|
2021-05-16 05:53:27 +00:00
|
|
|
mkdir -p "$mountpoint" || errors=1
|
|
|
|
mount -t zfs "${dataset}@snapshot-backup" "$mountpoint" || errors=1
|
2021-05-15 18:32:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
% endfor
|
2021-05-16 05:53:27 +00:00
|
|
|
run-parts --exit-on-error -- /etc/zfs-snapshot-backup-post.d || errors=1
|
|
|
|
|
|
|
|
if (( errors ))
|
|
|
|
then
|
|
|
|
# We can't use 'set -e' in here, because this could result in services
|
|
|
|
# not getting started, if they need to get stopped before creating a
|
|
|
|
# consistent backup snapshot.
|
|
|
|
exit 1
|
|
|
|
fi
|