6 Commits

Author SHA1 Message Date
b5bf1149ca Merge pull request #2 from ulope/master
Fixed --prefix and --sep regexes
2011-12-28 10:06:04 -08:00
5fc395c2bb Fixed --prefix and --sep regexes
Fixes: #1
2011-12-28 17:06:34 +01:00
d99147db7a Set keep=8 in the weekly cron job.
A default of keep=8 for weekly snapshot is more useful than keep=4,
which is no more protective than the default daily schedule.
2011-12-21 20:29:27 -06:00
c8507a0da9 Change objects to datasets in help and comments.
In the usage synopsis and program comments, change "objects" to
"datasets" for consistency with upstream ZFS terminology.
2011-12-18 07:34:40 -06:00
74359e51a7 Fix the hourly-daily transposition in the Makefile.
The hourly cron job was installed to cron.daily, and the daily cron
job was installed to cron.hourly, which caused incorrect scheduling.
2011-11-28 00:07:30 -06:00
afdae86271 Remove redundant lines in the cron.d file. 2011-11-28 00:05:43 -06:00
4 changed files with 22 additions and 26 deletions

View File

@ -7,8 +7,8 @@ install:
install -d $(DESTDIR)$(PREFIX)/etc/cron.weekly install -d $(DESTDIR)$(PREFIX)/etc/cron.weekly
install -d $(DESTDIR)$(PREFIX)/etc/cron.monthly install -d $(DESTDIR)$(PREFIX)/etc/cron.monthly
install etc/zfs-auto-snapshot.cron.frequent $(DESTDIR)$(PREFIX)/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)$(PREFIX)/etc/cron.daily/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)$(PREFIX)/etc/cron.hourly/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)$(PREFIX)/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)$(PREFIX)/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)/sbin install -d $(DESTDIR)$(PREFIX)/sbin

View File

@ -1,7 +1,3 @@
PATH="/usr/bin:/bin:/usr/sbin:/sbin" PATH="/usr/bin:/bin:/usr/sbin:/sbin"
*/15 * * * * root zfs-auto-snapshot -q -g --label=frequent --keep=4 // */15 * * * * root zfs-auto-snapshot -q -g --label=frequent --keep=4 //
@hourly root zfs-auto-snapshot -q -g --label=hourly --keep=24 //
@daily root zfs-auto-snapshot -q -g --label=daily --keep=31 //
@weekly root zfs-auto-snapshot -q -g --label=weekly --keep=4 //
@monthly root zfs-auto-snapshot -q -g --label=monthly --keep=12 //

View File

@ -1,2 +1,2 @@
#!/bin/sh #!/bin/sh
exec zfs-auto-snapshot --quiet --syslog --label=weekly --keep=4 // exec zfs-auto-snapshot --quiet --syslog --label=weekly --keep=8 //

View File

@ -51,7 +51,7 @@ SNAPSHOTS_OLD=''
print_usage () print_usage ()
{ {
echo "Usage: $0 [options] [-l label] <'//' | name [name...]> echo "Usage: $0 [options] [-l label] <'//' | name [name...]>
--default-exclude Exclude objects if com.sun:auto-snapshot is unset. --default-exclude Exclude datasets if com.sun:auto-snapshot is unset.
-d, --debug Print debugging messages. -d, --debug Print debugging messages.
-e, --event=EVENT Set the com.sun:auto-snapshot-desc property to EVENT. -e, --event=EVENT Set the com.sun:auto-snapshot-desc property to EVENT.
-n, --dry-run Print actions without actually doing anything. -n, --dry-run Print actions without actually doing anything.
@ -67,7 +67,7 @@ print_usage ()
-g, --syslog Write messages into the system log. -g, --syslog Write messages into the system log.
-r, --recursive Snapshot named filesystem and all descendants. -r, --recursive Snapshot named filesystem and all descendants.
-v, --verbose Print info messages. -v, --verbose Print info messages.
name Filesystem and volume names, or '//' for all ZFS objects. name Filesystem and volume names, or '//' for all ZFS datasets.
" "
} }
@ -256,7 +256,7 @@ do
while test "${#opt_prefix}" -gt '0' while test "${#opt_prefix}" -gt '0'
do do
case $opt_prefix in case $opt_prefix in
([![:alnum:]_-.:\ ]*) ([![:alnum:]_.:\ -]*)
print_log error "The $1 parameter must be alphanumeric." print_log error "The $1 parameter must be alphanumeric."
exit 130 exit 130
;; ;;
@ -278,7 +278,7 @@ do
;; ;;
(--sep) (--sep)
case "$2" in case "$2" in
([[:alnum:]_-.:\ ]) ([[:alnum:]_.:\ -])
: :
;; ;;
('') ('')
@ -369,15 +369,15 @@ ZPOOLS_NOTREADY=$(echo "$ZFS_STATUS" | awk -F ': ' \
$1 ~ /^ *state$/ && $2 !~ /ONLINE|DEGRADED/ { print pool } ' \ $1 ~ /^ *state$/ && $2 !~ /ONLINE|DEGRADED/ { print pool } ' \
| sort) | sort)
# Get a list of objects for which snapshots are explicitly disabled. # Get a list of datasets for which snapshots are explicitly disabled.
NOAUTO=$(echo "$ZFS_LIST" | awk -F '\t' \ NOAUTO=$(echo "$ZFS_LIST" | awk -F '\t' \
'tolower($2) ~ /false/ || tolower($3) ~ /false/ {print $1}') 'tolower($2) ~ /false/ || tolower($3) ~ /false/ {print $1}')
# If the --default-exclude flag is set, then exclude all objects that lack # If the --default-exclude flag is set, then exclude all datasets that lack
# an explicit com.sun:auto-snapshot* property. Otherwise, include them. # an explicit com.sun:auto-snapshot* property. Otherwise, include them.
if [ -n "$opt_default_exclude" ] if [ -n "$opt_default_exclude" ]
then then
# Get a list of objects for which snapshots are explicitly enabled. # Get a list of datasets for which snapshots are explicitly enabled.
CANDIDATES=$(echo "$ZFS_LIST" | awk -F '\t' \ CANDIDATES=$(echo "$ZFS_LIST" | awk -F '\t' \
'tolower($2) ~ /true/ || tolower($3) ~ /true/ {print $1}') 'tolower($2) ~ /true/ || tolower($3) ~ /true/ {print $1}')
else else
@ -386,20 +386,20 @@ else
'tolower($2) !~ /false/ && tolower($3) !~ /false/ {print $1}') 'tolower($2) !~ /false/ && tolower($3) !~ /false/ {print $1}')
fi fi
# Initialize the list of objects that will get a recursive snapshot. # Initialize the list of datasets that will get a recursive snapshot.
TARGETS_RECURSIVE='' TARGETS_RECURSIVE=''
# Initialize the list of objects that will get a non-recursive snapshot. # Initialize the list of datasets that will get a non-recursive snapshot.
TARGETS_REGULAR='' TARGETS_REGULAR=''
for ii in $CANDIDATES for ii in $CANDIDATES
do do
# Qualify object names so variable globbing works properly. # Qualify dataset names so variable globbing works properly.
# Suppose ii=tanker/foo and jj=tank sometime during the loop. # Suppose ii=tanker/foo and jj=tank sometime during the loop.
# Just testing "$ii" != ${ii#$jj} would incorrectly match. # Just testing "$ii" != ${ii#$jj} would incorrectly match.
iii="$ii/" iii="$ii/"
# Exclude objects 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
@ -413,13 +413,13 @@ do
continue continue
fi fi
# Exclude objects in pools that cannot do a snapshot. # Exclude datasets in pools that cannot do a snapshot.
for jj in $ZPOOLS_NOTREADY for jj in $ZPOOLS_NOTREADY
do do
# Ibid regarding iii. # Ibid regarding iii.
jjj="$jj/" jjj="$jj/"
# Check whether the pool name is a prefix of the object name. # Check whether the pool name is a prefix of the dataset name.
if [ "$iii" != "${iii#$jjj}" ] if [ "$iii" != "${iii#$jjj}" ]
then then
print_log info "Excluding $ii because pool $jj is not ready." print_log info "Excluding $ii because pool $jj is not ready."
@ -427,13 +427,13 @@ do
fi fi
done done
# Exclude objects in scrubbing pools if the --skip-scrub flag is set. # Exclude datasets in scrubbing pools if the --skip-scrub flag is set.
test -n "$opt_skip_scrub" && for jj in $ZPOOLS_SCRUBBING test -n "$opt_skip_scrub" && for jj in $ZPOOLS_SCRUBBING
do do
# Ibid regarding iii. # Ibid regarding iii.
jjj="$jj/" jjj="$jj/"
# Check whether the pool name is a prefix of the object name. # Check whether the pool name is a prefix of the dataset name.
if [ "$iii" != "${iii#$jjj}" ] if [ "$iii" != "${iii#$jjj}" ]
then then
print_log info "Excluding $ii because pool $jj is scrubbing." print_log info "Excluding $ii because pool $jj is scrubbing."
@ -449,14 +449,14 @@ do
# The --recusive switch only matters for non-wild arguments. # The --recusive switch only matters for non-wild arguments.
if [ -z "$opt_recursive" -a "$1" != '//' ] if [ -z "$opt_recursive" -a "$1" != '//' ]
then then
# Snapshot this object non-recursively. # Snapshot this dataset non-recursively.
print_log debug "Including $ii for regular snapshot." print_log debug "Including $ii for regular snapshot."
TARGETS_REGULAR="${TARGETS_REGULAR:+$TARGETS_REGULAR }$ii" # nb: \t TARGETS_REGULAR="${TARGETS_REGULAR:+$TARGETS_REGULAR }$ii" # nb: \t
continue 2 continue 2
# Check whether the candidate name is a prefix of any excluded object name. # Check whether the candidate name is a prefix of any excluded dataset name.
elif [ "$jjj" != "${jjj#$iii}" ] elif [ "$jjj" != "${jjj#$iii}" ]
then then
# Snapshot this object non-recursively. # Snapshot this dataset non-recursively.
print_log debug "Including $ii for regular snapshot." print_log debug "Including $ii for regular snapshot."
TARGETS_REGULAR="${TARGETS_REGULAR:+$TARGETS_REGULAR }$ii" # nb: \t TARGETS_REGULAR="${TARGETS_REGULAR:+$TARGETS_REGULAR }$ii" # nb: \t
continue 2 continue 2
@ -468,7 +468,7 @@ do
# Ibid regarding iii. # Ibid regarding iii.
jjj="$jj/" jjj="$jj/"
# Check whether any included object is a prefix of the candidate name. # Check whether any included dataset is a prefix of the candidate name.
if [ "$iii" != "${iii#$jjj}" ] if [ "$iii" != "${iii#$jjj}" ]
then then
print_log debug "Excluding $ii because $jj includes it recursively." print_log debug "Excluding $ii because $jj includes it recursively."