6 Commits

Author SHA1 Message Date
2940f443bc Merge pull request #99 from stuehmer/patch-2
Merge changes fom master and add workaround for DASH shell problems
2019-04-12 22:47:04 +02:00
2d6bf078b1 Avoid syntax error in dash by specifically using bash
Error was:
`/usr/sbin/zfs-auto-snapshot: 207: /usr/sbin/zfs-auto-snapshot: Syntax error: redirection unexpected`
2018-10-22 17:21:22 +02:00
f44d47fb4d Merge changes from master into leecallan 2018-10-22 17:11:52 +02:00
87aec9039a Merge branch 'master' into leecallen
Conflicts:
	src/zfs-auto-snapshot.sh
2014-04-16 16:15:01 -04:00
087ac3eba2 Update zfs-auto-snapshot.sh 2014-02-10 17:20:22 -05:00
33d53d8cec Update zfs-auto-snapshot.sh
Remove 'label' from snapshot name and place in a snapshot property
2014-02-04 09:59:58 -05:00
11 changed files with 36 additions and 187 deletions

View File

@ -1,18 +1,16 @@
PREFIX := /usr/local
all: all:
install: install:
install -d $(DESTDIR)/etc/cron.d install -d $(DESTDIR)$(PREFIX)/etc/cron.d
install -d $(DESTDIR)/etc/cron.daily install -d $(DESTDIR)$(PREFIX)/etc/cron.daily
install -d $(DESTDIR)/etc/cron.hourly install -d $(DESTDIR)$(PREFIX)/etc/cron.hourly
install -d $(DESTDIR)/etc/cron.weekly install -d $(DESTDIR)$(PREFIX)/etc/cron.weekly
install -d $(DESTDIR)/etc/cron.monthly install -d $(DESTDIR)$(PREFIX)/etc/cron.monthly
install -m 0644 etc/zfs-auto-snapshot.cron.frequent $(DESTDIR)/etc/cron.d/zfs-auto-snapshot install etc/zfs-auto-snapshot.cron.frequent $(DESTDIR)$(PREFIX)/etc/cron.d/zfs-auto-snapshot
install etc/zfs-auto-snapshot.cron.hourly $(DESTDIR)/etc/cron.hourly/zfs-auto-snapshot install etc/zfs-auto-snapshot.cron.hourly $(DESTDIR)$(PREFIX)/etc/cron.hourly/zfs-auto-snapshot
install etc/zfs-auto-snapshot.cron.daily $(DESTDIR)/etc/cron.daily/zfs-auto-snapshot install etc/zfs-auto-snapshot.cron.daily $(DESTDIR)$(PREFIX)/etc/cron.daily/zfs-auto-snapshot
install etc/zfs-auto-snapshot.cron.weekly $(DESTDIR)/etc/cron.weekly/zfs-auto-snapshot install etc/zfs-auto-snapshot.cron.weekly $(DESTDIR)$(PREFIX)/etc/cron.weekly/zfs-auto-snapshot
install etc/zfs-auto-snapshot.cron.monthly $(DESTDIR)/etc/cron.monthly/zfs-auto-snapshot install etc/zfs-auto-snapshot.cron.monthly $(DESTDIR)$(PREFIX)/etc/cron.monthly/zfs-auto-snapshot
install -d $(DESTDIR)$(PREFIX)/share/man/man8 install -d $(DESTDIR)$(PREFIX)/share/man/man8
install src/zfs-auto-snapshot.8 $(DESTDIR)$(PREFIX)/share/man/man8/zfs-auto-snapshot.8 install src/zfs-auto-snapshot.8 $(DESTDIR)$(PREFIX)/share/man/man8/zfs-auto-snapshot.8
install -d $(DESTDIR)$(PREFIX)/sbin install -d $(DESTDIR)$(PREFIX)/sbin

9
README
View File

@ -10,12 +10,3 @@ snapshots if it is installed.
This program is a posixly correct bourne shell script. It depends only on This program is a posixly correct bourne shell script. It depends only on
the zfs utilities and cron, and can run in the dash shell. the zfs utilities and cron, and can run in the dash shell.
Installation:
-------------
wget https://github.com/zfsonlinux/zfs-auto-snapshot/archive/master.zip
unzip master.zip
cd zfs-auto-snapshot-master
make install

100
debian/changelog vendored
View File

@ -1,100 +0,0 @@
zfs-auto-snapshot (1.2.0-1) unstable; urgency=low
[ Roland Stühmer ]
* Fix SNAPNAME to contain the DATE if label is empty
[ Borut Mrak ]
* Remove PREFIX from cron scripts - they should always end up in /etc.
* Leave PREFIX for man page and program, and set it to /usr/local by default.
[ Maciej Małecki ]
* Add `--{pre,post}-snapshot` for pre and post creation hook
* Abort if pre snapshot hook returns non-zero
* Document `--{pre,post}-snapshot
[ Mike Baynton ]
* Make --{pre,post}-snapshot optional, add --destroy-only, revise docs
[ virtualguy ]
* Update README
[ Darik Horn ]
* Install the cron.d part without the execute bit.
* Update debian/rules for Makefile changes.
-- Darik Horn <dajhorn@vanadac.com> Mon, 13 Oct 2014 23:17:30 -0500
zfs-auto-snapshot (1.1.0-0ubuntu1) unstable; urgency=low
[ Markus Heberling ]
* Use only name property for zfs list
[ Darik Horn ]
* Add a switch for the fast zfs list invocation.
[ Mike Swanson ]
* Add a manpage
* Update Makefile for the manual page
[ HawkOwl ]
* Set the snapshots to use UTC time, which makes the date/time display correctly in Windows 7 Previous Versions.
-- Darik Horn <dajhorn@vanadac.com> Mon, 31 Mar 2014 01:48:58 -0500
zfs-auto-snapshot (1.0.8-0ubuntu2) unstable; urgency=low
* Update the debian/control file.
-- Darik Horn <dajhorn@vanadac.com> Sun, 31 Mar 2013 23:10:55 -0500
zfs-auto-snapshot (1.0.8-0ubuntu1) unstable; urgency=low
* Update the README file to be more descriptive.
* Fix pool exclusions.
-- Darik Horn <dajhorn@vanadac.com> Sat, 21 Jan 2012 16:37:28 -0600
zfs-auto-snapshot (1.0.7-0ubuntu1) unstable; urgency=low
[ Darik Horn ]
* Change objects to datasets in help and comments.
* Set keep=8 in the weekly cron job.
[ Ulrich Petri ]
* Fixed --prefix and --sep regexes
-- Darik Horn <dajhorn@vanadac.com> Wed, 28 Dec 2011 13:30:02 -0600
zfs-auto-snapshot (1.0.6-0ubuntu1) unstable; urgency=low
* Remove redundant lines in the cron.d file.
* Fix the hourly-daily transposition in the Makefile.
-- Darik Horn <dajhorn@vanadac.com> Mon, 28 Nov 2011 00:10:05 -0600
zfs-auto-snapshot (1.0.5-0ubuntu1) unstable; urgency=low
* Split the cron file for anacron compatibilty.
-- Darik Horn <dajhorn@vanadac.com> Fri, 25 Nov 2011 14:28:07 -0600
zfs-auto-snapshot (1.0.4-0ubuntu1) unstable; urgency=low
* Invert the --skip-scrub test.
* Fold the main loops into a do_snapshots function.
* Consistently quote literal strings.
* Implement --prefix parameter checking.
* Rebase exit codes to above 127.
* Implement the --event option for :auto-snap-desc.
-- Darik Horn <dajhorn@vanadac.com> Wed, 23 Nov 2011 10:49:14 -0600
zfs-auto-snapshot (1.0.3-0ubuntu1) unstable; urgency=low
* Add -q to the getopt list of short options.
* Add an explicit `exit 0` to the end of the script.
* Add gbp.conf file for git-buildpackage.
* Expand the options variable in the cron part file.
* Initial debian packaging.
-- Darik Horn <dajhorn@vanadac.com> Mon, 21 Nov 2011 21:52:11 -0600

1
debian/compat vendored
View File

@ -1 +0,0 @@
7

16
debian/control vendored
View File

@ -1,16 +0,0 @@
Source: zfs-auto-snapshot
Section: admin
Priority: extra
Maintainer: Darik Horn <dajhorn@vanadac.com>
Build-Depends: debhelper (>= 8)
Standards-Version: 3.9.4
Homepage: http://www.zfsonlinux.org/
Vcs-Git: git://github.com/zfsonlinux/zfs-auto-snapshot.git
Vcs-Browser: https://github.com/zfsonlinux/zfs-auto-snapshot/
Package: zfs-auto-snapshot
Architecture: all
Depends: ${misc:Depends}, cron, zfsutils
Description: ZFS Automatic Snapshot Service
Automatically create and destroy ZFS snapshots on an hourly, daily, weekly
and monthly schedule.

1
debian/copyright vendored
View File

@ -1 +0,0 @@
Copyright 2011 Darik Horn <dajhorn@vanadac.com>

3
debian/gbp.conf vendored
View File

@ -1,3 +0,0 @@
[DEFAULT]
upstream-branch = master
debian-branch = debian

7
debian/rules vendored
View File

@ -1,7 +0,0 @@
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_install:
dh_auto_install -- PREFIX=/usr

2
debian/watch vendored
View File

@ -1,2 +0,0 @@
version=3
http://githubredir.debian.net/github/dajhorn/zfs-auto-snapshot/([\d\.].*).tar.gz

View File

@ -64,27 +64,6 @@ Snapshot named filesystem and all descendants.
\fB\-v\fR, \fB\-\-verbose\fR \fB\-v\fR, \fB\-\-verbose\fR
Print info messages. Print info messages.
.TP .TP
\fB\-\-pre-snapshot\fR=\fICOMMAND\fR
Command to run before each dataset is snapshotted.
It is passed the dataset and snapshot name. If it
returns non-zero, snapshotting this dataset is
aborted.
.TP
\fB\-\-post-snapshot\fR=\fICOMMAND\fR
Command to run after each dataset is snapshotted.
It is passed the dataset and snapshot name.
.TP
\fB\-\-destroy-only\fR
Do not create new snapshots, but do destroy older
snapshots. Has no effect unless used with \fB\-k\fR.
.IP
A non-obvious use may be constructon of cron jobs or
scripts that run pre-snapshot command(s), then run
zfs-auto-snapshot (without \fB\-k\fR) to quickly
snapshot all datasets, then run post-snapshot
command(s) and clean up with zfs-auto-snapshot
\fB\-\-destroy-only\fR.
.TP
name name
Filesystem and volume names, or '//' for all ZFS datasets. Filesystem and volume names, or '//' for all ZFS datasets.
.SH SEE ALSO .SH SEE ALSO

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/bash
# zfs-auto-snapshot for Linux # zfs-auto-snapshot for Linux
# Automatically create, rotate, and destroy periodic ZFS snapshots. # Automatically create, rotate, and destroy periodic ZFS snapshots.
@ -110,7 +110,7 @@ print_log () # level, message, ...
;; ;;
(inf*) (inf*)
# test -n "$opt_syslog" && logger -t "$opt_prefix" -p daemon.info $* # test -n "$opt_syslog" && logger -t "$opt_prefix" -p daemon.info $*
test -n "$opt_verbose" && echo $* test -z ${opt_quiet+x} && test -n "$opt_verbose" && echo $*
;; ;;
(deb*) (deb*)
# test -n "$opt_syslog" && logger -t "$opt_prefix" -p daemon.debug $* # test -n "$opt_syslog" && logger -t "$opt_prefix" -p daemon.debug $*
@ -152,6 +152,7 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...]
local GLOB="$4" local GLOB="$4"
local TARGETS="$5" local TARGETS="$5"
local KEEP='' local KEEP=''
local LABEL="$6"
local RUNSNAP=1 local RUNSNAP=1
# global DESTRUCTION_COUNT # global DESTRUCTION_COUNT
@ -181,17 +182,21 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...]
# including the one that was just recently created. # including the one that was just recently created.
test -z "$opt_keep" && continue test -z "$opt_keep" && continue
KEEP="$opt_keep" KEEP="$opt_keep"
# ASSERT: The old snapshot list is sorted by increasing age. # ASSERT: The old snapshot list is sorted by increasing age.
for jj in $SNAPSHOTS_OLD # Match on both $GLOB *and* label.
while IFS=' ' read -ra arrjj
do do
# Check whether this is an old snapshot of the filesystem. # Check whether this is an old snapshot of the filesystem.
if [ -z "${jj#$ii@$GLOB}" ] if [ -z "${arrjj[1]#$ii@$GLOB}" ]
then then
# Check whether the snapshot has the same label property
test "${arrjj[0]}" = "$LABEL" || continue
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 '${arrjj[1]}'"
then then
DESTRUCTION_COUNT=$(( $DESTRUCTION_COUNT + 1 )) DESTRUCTION_COUNT=$(( $DESTRUCTION_COUNT + 1 ))
else else
@ -199,7 +204,7 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...]
fi fi
fi fi
fi fi
done done <<< "$SNAPSHOTS_OLD"
done done
} }
@ -367,16 +372,21 @@ fi
ZPOOL_STATUS=$(env LC_ALL=C zpool status 2>&1 ) \ ZPOOL_STATUS=$(env LC_ALL=C zpool status 2>&1 ) \
|| { print_log error "zpool status $?: $ZPOOL_STATUS"; exit 135; } || { print_log error "zpool status $?: $ZPOOL_STATUS"; exit 135; }
ZFS_LIST=$(env LC_ALL=C zfs list -H -t filesystem,volume -s name \ ZFS_LIST=$(env LC_ALL=C zfs list -H -t filesystem,volume -s name \
-o name,com.sun:auto-snapshot,com.sun:auto-snapshot:"$opt_label") \ -o name,com.sun:auto-snapshot,com.sun:auto-snapshot:"$opt_label") \
|| { print_log error "zfs list $?: $ZFS_LIST"; exit 136; } || { print_log error "zfs list $?: $ZFS_LIST"; exit 136; }
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 com.sun:auto-snapshot-label,name -s name | \
grep $opt_prefix | \
awk '{ print substr( $0, length($0) - 14, length($0) ) " " $0}' | \
sort -r -k1,1 -k3,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 com.sun:auto-snapshot-label,name) \
|| { print_log error "zfs list $?: $SNAPSHOTS_OLD"; exit 137; } || { print_log error "zfs list $?: $SNAPSHOTS_OLD"; exit 137; }
fi fi
@ -436,7 +446,8 @@ do
# Just testing "$ii" != ${ii#$jj} would incorrectly match. # Just testing "$ii" != ${ii#$jj} would incorrectly match.
iii="$ii/" iii="$ii/"
# Exclude datasets that are not named on the command line.
# Exclude datasets that are not named on the command line.
IN_ARGS='0' IN_ARGS='0'
for jj in "$@" for jj in "$@"
do do
@ -526,17 +537,17 @@ done
# Linux lacks SMF and the notion of an FMRI event, but always set this property # Linux lacks SMF and the notion of an FMRI event, but always set this property
# because the SUNW program does. The dash character is the default. # because the SUNW program does. The dash character is the default.
SNAPPROP="-o com.sun:auto-snapshot-desc='$opt_event'" SNAPPROP="-o com.sun:auto-snapshot-desc='$opt_event' -o com.sun:auto-snapshot-label=$opt_label"
# ISO style date; fifteen characters: YYYY-MM-DD-HHMM # ISO style date; fifteen characters: YYYY-MM-DD-HHMM
# On Solaris %H%M expands to 12h34. # On Solaris %H%M expands to 12h34.
DATE=$(date --utc +%F-%H%M) DATE=$(date --utc +%F-%H%M)
# The snapshot name after the @ symbol. # The snapshot name after the @ symbol.
SNAPNAME="$opt_prefix${opt_label:+$opt_sep$opt_label}-$DATE" SNAPNAME="$opt_prefix$opt_sep$DATE"
# The expression for matching old snapshots. -YYYY-MM-DD-HHMM # The expression for matching old snapshots. -YYYY-MM-DD-HHMM
SNAPGLOB="$opt_prefix${opt_label:+?$opt_label}????????????????" SNAPGLOB="${opt_prefix}????????????????"
if [ -n "$opt_do_snapshots" ] if [ -n "$opt_do_snapshots" ]
then then
@ -564,8 +575,8 @@ fi
test -n "$opt_dry_run" \ test -n "$opt_dry_run" \
&& print_log info "Doing a dry run. Not running these commands..." && print_log info "Doing a dry run. Not running these commands..."
do_snapshots "$SNAPPROP" "" "$SNAPNAME" "$SNAPGLOB" "$TARGETS_REGULAR" do_snapshots "$SNAPPROP" "" "$SNAPNAME" "$SNAPGLOB" "$TARGETS_REGULAR" "$opt_label"
do_snapshots "$SNAPPROP" "-r" "$SNAPNAME" "$SNAPGLOB" "$TARGETS_RECURSIVE" do_snapshots "$SNAPPROP" "-r" "$SNAPNAME" "$SNAPGLOB" "$TARGETS_RECURSIVE" "$opt_label"
print_log notice "@$SNAPNAME," \ print_log notice "@$SNAPNAME," \
"$SNAPSHOT_COUNT created," \ "$SNAPSHOT_COUNT created," \