# Based on incremental-backup 0.1 by Matteo Mattei
#
# Copyright 2006 Matteo Mattei <matteo.mattei@gmail.com>
# Based on incremental-backup 0.1 by Matteo Mattei
#
# Copyright 2006 Matteo Mattei <matteo.mattei@gmail.com>
-# Copyright 2007, 2008, 2009, 2010, 2011 Bernie Innocenti <bernie@codewiz.org>
+# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2015 Bernie Innocenti <bernie@codewiz.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# NOTE: --timeout needs to be large enough: if a large dir tree don't change a lot of time can pass without I/O
# NOTE: --inplace will clobber linked files in older snapshots. DON'T USE IT!
RSYNC_OPTS="-HAXa --stats --timeout 1800 --numeric-ids --delete --delete-excluded --ignore-errors $@"
# NOTE: --timeout needs to be large enough: if a large dir tree don't change a lot of time can pass without I/O
# NOTE: --inplace will clobber linked files in older snapshots. DON'T USE IT!
RSYNC_OPTS="-HAXa --stats --timeout 1800 --numeric-ids --delete --delete-excluded --ignore-errors $@"
# Use "backup" ssh key with ssh protocol, or password file for rsync protocol
if [ "${SRC%:*}" == "rsync" ]; then
RSYNC_OPTS="$RSYNC_OPTS --password-file=/etc/wizbackup/rsync_password --contimeout 10"
else
# Use "backup" ssh key with ssh protocol, or password file for rsync protocol
if [ "${SRC%:*}" == "rsync" ]; then
RSYNC_OPTS="$RSYNC_OPTS --password-file=/etc/wizbackup/rsync_password --contimeout 10"
else
set -o pipefail
echo "$(date): rsync $RSYNC_OPTS $SRC $DEST/tmp/"
rsync $RSYNC_OPTS "$SRC" "$DEST/tmp/" 2>&1 | tgrep -v -E 'vanished|some files'
set -o pipefail
echo "$(date): rsync $RSYNC_OPTS $SRC $DEST/tmp/"
rsync $RSYNC_OPTS "$SRC" "$DEST/tmp/" 2>&1 | tgrep -v -E 'vanished|some files'
-do_prune()
-{
- local old="`ls | grep -v tmp | head -n -$SNAPSHOTS`"
- if [ ! -z "$old" ]; then
+do_prune() {
+ local num_snapshots="$1"
+ local suffix="$2"
+ local oldest="$(ls -d [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$suffix | head -n -$num_snapshots)"
+ for old in $oldest; do
if [ -d "$DEST/tmp" ]; then
echo "$(date): Continuing with pre-existing snapshot $DEST/tmp"
elif [ -z "$newest" ]; then
if [ -d "$DEST/tmp" ]; then
echo "$(date): Continuing with pre-existing snapshot $DEST/tmp"
elif [ -z "$newest" ]; then
# TODO: test for free space and free inodes in the $DEST filesystem
block_size=`stat --file-system --format "%S" "$DEST"`
free_blocks=`stat --file-system --format "%f" "$DEST"`
# TODO: test for free space and free inodes in the $DEST filesystem
block_size=`stat --file-system --format "%S" "$DEST"`
free_blocks=`stat --file-system --format "%f" "$DEST"`