From 0dbeebc37f9fd6b10742c669ff423da06fecf7c7 Mon Sep 17 00:00:00 2001 From: Lonnie Olson Date: Tue, 29 Apr 2014 14:04:24 -0600 Subject: [PATCH 1/2] Add option --utc to use UTC dates in snapshot names instead of the local time zone. --- src/zfs-auto-snapshot.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/zfs-auto-snapshot.sh b/src/zfs-auto-snapshot.sh index e60a437..cff1116 100755 --- a/src/zfs-auto-snapshot.sh +++ b/src/zfs-auto-snapshot.sh @@ -38,6 +38,7 @@ opt_sep='_' opt_setauto='' opt_syslog='' opt_skip_scrub='' +opt_utc='' opt_verbose='' # Global summary statistics. @@ -62,6 +63,7 @@ print_usage () -k, --keep=NUM Keep NUM recent snapshots and destroy older snapshots. -l, --label=LAB LAB is usually 'hourly', 'daily', or 'monthly'. -p, --prefix=PRE PRE is 'zfs-auto-snap' by default. + --utc Use UTC times in snapshot names. -q, --quiet Suppress warnings and notices at the console. --send-full=F Send zfs full backup. Unimplemented. --send-incr=F Send zfs incremental backup. Unimplemented. @@ -196,7 +198,7 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...] GETOPT=$(getopt \ --longoptions=default-exclude,dry-run,fast,skip-scrub,recursive \ - --longoptions=event:,keep:,label:,prefix:,sep: \ + --longoptions=event:,keep:,label:,prefix:,sep:,utc \ --longoptions=debug,help,quiet,syslog,verbose \ --options=dnshe:l:k:p:rs:qgv \ -- "$@" ) \ @@ -272,6 +274,10 @@ do opt_prefix="$2" shift 2 ;; + (--utc) + opt_utc='--utc' + shift 1 + ;; (-q|--quiet) opt_debug='' opt_quiet='1' @@ -504,7 +510,7 @@ SNAPPROP="-o com.sun:auto-snapshot-desc='$opt_event'" # ISO style date; fifteen characters: YYYY-MM-DD-HHMM # On Solaris %H%M expands to 12h34. -DATE=$(date --utc +%F-%H%M) +DATE=$(date $opt_utc +%F-%H%M) # The snapshot name after the @ symbol. SNAPNAME="$opt_prefix${opt_label:+$opt_sep$opt_label}-$DATE" From bd681482581c299a47682c6ea1f3ee9699c352a2 Mon Sep 17 00:00:00 2001 From: Lonnie Olson Date: Wed, 30 Apr 2014 15:39:20 -0600 Subject: [PATCH 2/2] Snapshot name collision handling. Handle snapshot name collisions by destroying the previous snapshot. --- src/zfs-auto-snapshot.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/zfs-auto-snapshot.sh b/src/zfs-auto-snapshot.sh index cff1116..3252b81 100755 --- a/src/zfs-auto-snapshot.sh +++ b/src/zfs-auto-snapshot.sh @@ -158,6 +158,10 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...] for ii in $TARGETS do + if echo $SNAPSHOTS_OLD | grep -q "$ii@$NAME" + then + do_run "zfs destroy $FLAGS '$ii@$NAME'" + fi if do_run "zfs snapshot $PROPS $FLAGS '$ii@$NAME'" then SNAPSHOT_COUNT=$(( $SNAPSHOT_COUNT + 1 ))