8 Commits

Author SHA1 Message Date
Jonathan Carter
9c6f065589 Check whether we have zfs-auto-snapshot before running it 2017-06-06 11:06:16 +02:00
Jonathan Carter
62f5f7d920 Merge pull request #33 from aphor/master
zfs destroy will use -d for deferred destruction
2017-01-27 20:28:01 +02:00
Jonathan Carter
b74769894c Merge pull request #35 from bernhardschmidt/master
Fix frequent cronjob
2017-01-27 20:08:24 +02:00
Jonathan Carter
11130ba8d6 Merge pull request #43 from FransUrbo/prettify_SNAPSHOTS_OLD
"Prettify" long command line
2017-01-27 20:07:39 +02:00
Turbo Fredriksson
c4ad5eeac5 Break up the huge line where SNAPSHOTS_OLD (if --fast was used) to make
it easier to read and follow.
2015-04-03 17:34:16 +02:00
Bernhard Schmidt
b2e97c5fe0 use long options in frequent cronjob 2014-12-29 20:07:18 +01:00
Bernhard Schmidt
d3bdd2dc23 include default installation prefix in frequent cronjob 2014-12-29 20:05:26 +01:00
Jeremy McMillan
f2767ad43a zfs destroy will use -d for deferred destruction
I am working on a complimentary script that does log-shipping style replication to a backup volume for highly efficient incremental backups. This relies on "zfs send -R" and that the sets of snapshots existing on the source and backup destination overlap by at least one snapshot. I plan to use snapshot clones to place a "checkpoint" reservation on a snapshot that will be required for future backups.

In order to keep zfs-auto-snapshot from destroying a snapshot necessary for a future incremental backup replication stream, I will create an unmounted clone of that snapshot, and destroy any prior clones when the backup completes. 

Any snapshots destroyed by the zfs-auto-snapshot "zfs destroy -d" will be destroyed as the dependent clones are destroyed. Without the -d option, zfs-auto-snapshot would fail to destroy the old snapshot with a checkpoint clone, and it would persist until later snapshot jobs destroy it in subsequent runs. Since monthlies and weeklies are relatively infrequent, deferred destruction will reap the snapshots opportunistically as soon as the "checkpoint" clones are gone. Intermediate snapshots between the "checkpoint" reserved snapshots and the recent snapshots preserved by the zfs-auto-snapshot.sh will still be immediately destroyed.
2014-11-17 19:21:52 -06:00
6 changed files with 24 additions and 8 deletions

View File

@@ -1,2 +1,5 @@
#!/bin/sh #!/bin/sh
exec zfs-auto-snapshot --quiet --syslog --label=daily --keep=31 //
# Only call zfs-auto-snapshot if it's available
exec which zfs-auto-snapshot > /dev/null && \
zfs-auto-snapshot --quiet --syslog --label=daily --keep=31 //

View File

@@ -1,3 +1,3 @@
PATH="/usr/bin:/bin:/usr/sbin:/sbin" PATH="/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
*/15 * * * * root zfs-auto-snapshot -q -g --label=frequent --keep=4 // */15 * * * * root which zfs-auto-snapshot > /dev/null && zfs-auto-snapshot --quiet --syslog --label=frequent --keep=4 //

View File

@@ -1,2 +1,5 @@
#!/bin/sh #!/bin/sh
exec zfs-auto-snapshot --quiet --syslog --label=hourly --keep=24 //
# Only call zfs-auto-snapshot if it's available
exec which zfs-auto-snapshot > /dev/null && \
zfs-auto-snapshot --quiet --syslog --label=hourly --keep=24 //

View File

@@ -1,2 +1,5 @@
#!/bin/sh #!/bin/sh
exec zfs-auto-snapshot --quiet --syslog --label=monthly --keep=12 //
# Only call zfs-auto-snapshot if it's available
exec which zfs-auto-snapshot > /dev/null && \
zfs-auto-snapshot --quiet --syslog --label=monthly --keep=12 //

View File

@@ -1,2 +1,5 @@
#!/bin/sh #!/bin/sh
exec zfs-auto-snapshot --quiet --syslog --label=weekly --keep=8 //
# Only call zfs-auto-snapshot if it's available
exec which zfs-auto-snapshot > /dev/null && \
zfs-auto-snapshot --quiet --syslog --label=weekly --keep=8 //

View File

@@ -191,7 +191,7 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...]
KEEP=$(( $KEEP - 1 )) KEEP=$(( $KEEP - 1 ))
if [ "$KEEP" -le '0' ] if [ "$KEEP" -le '0' ]
then then
if do_run "zfs destroy $FLAGS '$jj'" if do_run "zfs destroy -d $FLAGS '$jj'"
then then
DESTRUCTION_COUNT=$(( $DESTRUCTION_COUNT + 1 )) DESTRUCTION_COUNT=$(( $DESTRUCTION_COUNT + 1 ))
else else
@@ -373,7 +373,11 @@ ZFS_LIST=$(env LC_ALL=C zfs list -H -t filesystem,volume -s name \
if [ -n "$opt_fast_zfs_list" ] if [ -n "$opt_fast_zfs_list" ]
then then
SNAPSHOTS_OLD=$(env LC_ALL=C zfs list -H -t snapshot -o name -s name|grep $opt_prefix |awk '{ print substr( $0, length($0) - 14, length($0) ) " " $0}' |sort -r -k1,1 -k2,2|awk '{ print substr( $0, 17, length($0) )}') \ SNAPSHOTS_OLD=$(env LC_ALL=C zfs list -H -t snapshot -o name -s name | \
grep $opt_prefix | \
awk '{ print substr( $0, length($0) - 14, length($0) ) " " $0}' | \
sort -r -k1,1 -k2,2 | \
awk '{ print substr( $0, 17, length($0) )}') \
|| { print_log error "zfs list $?: $SNAPSHOTS_OLD"; exit 137; } || { print_log error "zfs list $?: $SNAPSHOTS_OLD"; exit 137; }
else else
SNAPSHOTS_OLD=$(env LC_ALL=C zfs list -H -t snapshot -S creation -o name) \ SNAPSHOTS_OLD=$(env LC_ALL=C zfs list -H -t snapshot -S creation -o name) \