24 Commits

Author SHA1 Message Date
Darik Horn
bd5161fe5d Update changelog for 1.2.0-1 release 2014-10-13 23:19:48 -05:00
Darik Horn
c0b226d4df Update debian/rules for Makefile changes.
Create an override_dh_auto_install rule that appropriately forces the PREFIX
for a managed installation. Creating autotools boilerplate or a fancier
Makefile for this script is not yet worthwhile.
2014-10-13 23:17:01 -05:00
Darik Horn
e7e13e9235 Merge branch 'master' into debian 2014-10-13 23:16:31 -05:00
Darik Horn
6b24132ccd Update changelog for 1.1.0-0ubuntu1 release 2014-03-31 01:50:30 -05:00
Darik Horn
937db23c5b Merge branch 'master' into debian 2014-03-31 01:48:47 -05:00
Darik Horn
c19ff8728b PPA 1.0.8-0ubuntu2 release. 2013-03-31 23:11:21 -05:00
Darik Horn
28aa53155e Update the debian/control file.
Bump the Standards-Version and update the project links.
2013-03-31 23:08:43 -05:00
Darik Horn
64bed700dd PPA 1.0.8-0ubuntu1 release. 2012-01-21 16:38:00 -06:00
Darik Horn
a4073f06ed Merge branch 'master' into debian 2012-01-21 16:37:17 -06:00
Darik Horn
8486e63724 PPA 1.0.7-0ubuntu1 release. 2011-12-28 13:31:43 -06:00
Darik Horn
499e39de29 Merge branch 'master' into debian 2011-12-28 13:29:44 -06:00
Darik Horn
646378fe7b PPA 1.0.6-0ubuntu1 release. 2011-11-28 00:11:30 -06:00
Darik Horn
3cb3d0b8aa Merge branch 'master' into debian 2011-11-28 00:09:59 -06:00
Darik Horn
360098de29 PPA 1.0.5-0ubuntu1 release. 2011-11-25 14:28:40 -06:00
Darik Horn
139f4b30d9 Merge branch 'master' into debian 2011-11-25 14:26:50 -06:00
Darik Horn
ae3909510a PPA 1.0.4-0ubuntu1 release. 2011-11-23 10:50:57 -06:00
Darik Horn
d294fa5401 Merge branch 'master' into debian 2011-11-23 10:49:07 -06:00
Darik Horn
968d50ce92 Invert the --skip-scrub test.
The test sense for the --skip-scrub flag is incorrect, which causes
it to operate opposite as intented.
2011-11-22 22:04:13 -06:00
Darik Horn
f6f194ac13 PPA 1.0.3-0ubuntu1 release.
My local unpushed tree went bad at the 1.0.2 release. Truncate the
changelog file so that git-dch update it again.
2011-11-21 21:52:54 -06:00
Darik Horn
bfe074fbe8 Merge branch 'master' into debian 2011-11-21 21:51:23 -06:00
Darik Horn
9327a3f737 Add gbp.conf file for git-buildpackage. 2011-11-21 21:50:35 -06:00
Darik Horn
7fd3c45cd4 PPA 1.0.1-0ubuntu1 release. 2011-11-21 20:56:51 -06:00
Darik Horn
fe429f408a Merge branch 'master' into debian 2011-11-21 20:41:54 -06:00
Darik Horn
8868d533e5 PPA 1.0.0-0ubuntu1 release. 2011-11-21 20:38:25 -06:00
17 changed files with 152 additions and 111 deletions

View File

@@ -1,9 +0,0 @@
[ 1.2.5 (Unreleased) ]
* Start a changelog
* Accept PR#94 from aimileus/macos
- Replace --utc longform option with -u for macos compatibility
* Accept PR#107 from ArakniD/master
- Add optional label for snap removals
-- Jonathan Carter 2019-09-25, 15:24 SAST

View File

@@ -14,15 +14,6 @@ install:
install etc/zfs-auto-snapshot.cron.weekly $(DESTDIR)/etc/cron.weekly/zfs-auto-snapshot install etc/zfs-auto-snapshot.cron.weekly $(DESTDIR)/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)/etc/cron.monthly/zfs-auto-snapshot
install -d $(DESTDIR)$(PREFIX)/share/man/man8 install -d $(DESTDIR)$(PREFIX)/share/man/man8
install -m 0644 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
install src/zfs-auto-snapshot.sh $(DESTDIR)$(PREFIX)/sbin/zfs-auto-snapshot install src/zfs-auto-snapshot.sh $(DESTDIR)$(PREFIX)/sbin/zfs-auto-snapshot
uninstall:
rm $(DESTDIR)/etc/cron.d/zfs-auto-snapshot
rm $(DESTDIR)/etc/cron.hourly/zfs-auto-snapshot
rm $(DESTDIR)/etc/cron.daily/zfs-auto-snapshot
rm $(DESTDIR)/etc/cron.weekly/zfs-auto-snapshot
rm $(DESTDIR)/etc/cron.monthly/zfs-auto-snapshot
rm $(DESTDIR)$(PREFIX)/share/man/man8/zfs-auto-snapshot.8
rm $(DESTDIR)$(PREFIX)/sbin/zfs-auto-snapshot

6
README
View File

@@ -15,7 +15,7 @@ the zfs utilities and cron, and can run in the dash shell.
Installation: Installation:
------------- -------------
wget https://github.com/zfsonlinux/zfs-auto-snapshot/archive/upstream/1.2.4.tar.gz wget https://github.com/zfsonlinux/zfs-auto-snapshot/archive/master.zip
tar -xzf 1.2.4.tar.gz unzip master.zip
cd zfs-auto-snapshot-upstream-1.2.4 cd zfs-auto-snapshot-master
make install make install

100
debian/changelog vendored Normal file
View File

@@ -0,0 +1,100 @@
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 Normal file
View File

@@ -0,0 +1 @@
7

16
debian/control vendored Normal file
View File

@@ -0,0 +1,16 @@
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 Normal file
View File

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

3
debian/gbp.conf vendored Normal file
View File

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

7
debian/rules vendored Executable file
View File

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

2
debian/watch vendored Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -78,7 +78,7 @@ It is passed the dataset and snapshot name.
Do not create new snapshots, but do destroy older Do not create new snapshots, but do destroy older
snapshots. Has no effect unless used with \fB\-k\fR. snapshots. Has no effect unless used with \fB\-k\fR.
.IP .IP
A non-obvious use may be construction of cron jobs or A non-obvious use may be constructon of cron jobs or
scripts that run pre-snapshot command(s), then run scripts that run pre-snapshot command(s), then run
zfs-auto-snapshot (without \fB\-k\fR) to quickly zfs-auto-snapshot (without \fB\-k\fR) to quickly
snapshot all datasets, then run post-snapshot snapshot all datasets, then run post-snapshot

75
src/zfs-auto-snapshot.sh Normal file → Executable file
View File

@@ -42,7 +42,6 @@ opt_verbose=''
opt_pre_snapshot='' opt_pre_snapshot=''
opt_post_snapshot='' opt_post_snapshot=''
opt_do_snapshots=1 opt_do_snapshots=1
opt_min_size=0
# Global summary statistics. # Global summary statistics.
DESTRUCTION_COUNT='0' DESTRUCTION_COUNT='0'
@@ -111,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 -z "$opt_quiet" && test -n "$opt_verbose" && echo $* 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 $*
@@ -162,23 +161,7 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...]
for ii in $TARGETS for ii in $TARGETS
do do
# Check if size check is > 0 if [ -n "$opt_do_snapshots" ]
size_check_skip=0
if [ "$opt_min_size" -gt 0 ]
then
bytes_written=`zfs get -Hp -o value written $ii`
kb_written=$(( $bytes_written / 1024 ))
if [ "$kb_written" -lt "$opt_min_size" ]
then
size_check_skip=1
if [ $opt_verbose -gt 0 ]
then
echo "Skipping target $ii, only $kb_written kB written since last snap. opt_min_size is $opt_min_size"
fi
fi
fi
if [ -n "$opt_do_snapshots" -a "$size_check_skip" -eq 0 ]
then then
if [ "$opt_pre_snapshot" != "" ] if [ "$opt_pre_snapshot" != "" ]
then then
@@ -208,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 -d $FLAGS '$jj'" if do_run "zfs destroy $FLAGS '$jj'"
then then
DESTRUCTION_COUNT=$(( $DESTRUCTION_COUNT + 1 )) DESTRUCTION_COUNT=$(( $DESTRUCTION_COUNT + 1 ))
else else
@@ -224,19 +207,12 @@ do_snapshots () # properties, flags, snapname, oldglob, [targets...]
# main () # main ()
# { # {
if [ "$(uname)" = "Darwin" ]; then GETOPT=$(getopt \
GETOPT_BIN="$(brew --prefix gnu-getopt 2> /dev/null || echo /usr/local)/bin/getopt"
else
GETOPT_BIN="getopt"
fi
GETOPT=$($GETOPT_BIN \
--longoptions=default-exclude,dry-run,fast,skip-scrub,recursive \ --longoptions=default-exclude,dry-run,fast,skip-scrub,recursive \
--longoptions=event:,keep:,label:,prefix:,sep: \ --longoptions=event:,keep:,label:,prefix:,sep: \
--longoptions=debug,help,quiet,syslog,verbose \ --longoptions=debug,help,quiet,syslog,verbose \
--longoptions=pre-snapshot:,post-snapshot:,destroy-only \ --longoptions=pre-snapshot:,post-snapshot:,destroy-only \
--longoptions=min-size: \ --options=dnshe:l:k:p:rs:qgv \
--options=dnshe:l:k:p:rs:qgvm: \
-- "$@" ) \ -- "$@" ) \
|| exit 128 || exit 128
@@ -295,10 +271,6 @@ do
opt_label="$2" opt_label="$2"
shift 2 shift 2
;; ;;
(-m|--min-size)
opt_min_size="$2"
shift 2
;;
(-p|--prefix) (-p|--prefix)
opt_prefix="$2" opt_prefix="$2"
while test "${#opt_prefix}" -gt '0' while test "${#opt_prefix}" -gt '0'
@@ -395,31 +367,14 @@ 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
# Check if a snapshot label is being used, in which case restrict the old 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) )}') \
# snapshot removal to only snapshots with the same label format
if [ -n "$opt_label" ]
then
SNAPSHOTS_OLD=$(env LC_ALL=C zfs list -H -t snapshot -o name -s name | \
grep "$opt_prefix"_"$opt_label" | \
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
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; }
fi
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) \
|| { print_log error "zfs list $?: $SNAPSHOTS_OLD"; exit 137; } || { print_log error "zfs list $?: $SNAPSHOTS_OLD"; exit 137; }
@@ -481,20 +436,11 @@ 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 or
# * those whose prefix is not on the command line (if --recursive flag is set)
IN_ARGS='0' IN_ARGS='0'
for jj in "$@" for jj in "$@"
do do
# Ibid regarding iii.
jjj="$jj/"
if [ "$jj" = '//' -o "$jj" = "$ii" ] if [ "$jj" = '//' -o "$jj" = "$ii" ]
then
IN_ARGS=$(( $IN_ARGS + 1 ))
elif [ -n "$opt_recursive" -a "$iii" != "${iii#$jjj}" ]
then then
IN_ARGS=$(( $IN_ARGS + 1 )) IN_ARGS=$(( $IN_ARGS + 1 ))
fi fi
@@ -584,14 +530,13 @@ SNAPPROP="-o com.sun:auto-snapshot-desc='$opt_event'"
# 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.
# We use the shortfirm -u here because --utc is not supported on macos. DATE=$(date --utc +%F-%H%M)
DATE=$(date -u +%F-%H%M)
# The snapshot name after the @ symbol. # The snapshot name after the @ symbol.
SNAPNAME="${opt_prefix:+$opt_prefix$opt_sep}${opt_label:+$opt_label}-$DATE" SNAPNAME="$opt_prefix${opt_label:+$opt_sep$opt_label}-$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_prefix$opt_sep}${opt_label:+$opt_label}-???????????????" SNAPGLOB="$opt_prefix${opt_label:+?$opt_label}????????????????"
if [ -n "$opt_do_snapshots" ] if [ -n "$opt_do_snapshots" ]
then then