From 3f0f29798b394167f6685e5aa5e983d6e340f104 Mon Sep 17 00:00:00 2001 From: Vincent Riquer Date: Thu, 19 Nov 2015 14:05:13 +0100 Subject: [PATCH] weekly, monthly --- defaults.conf | 2 ++ remote-backup | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/defaults.conf b/defaults.conf index 40cc775..907be8e 100644 --- a/defaults.conf +++ b/defaults.conf @@ -5,6 +5,8 @@ REMOTE_LOCATION="" EXCLUDES=/dev/null DEST="" MAX_ROTATE=7 +WEEK_KEEP=0 +MONTH_KEEP=0 BWLIMIT=0 # kBps TIMEOUT=1800 RETRY=5 diff --git a/remote-backup b/remote-backup index 80235c6..6273e2b 100755 --- a/remote-backup +++ b/remote-backup @@ -207,6 +207,58 @@ rotateBackup() { fi done fi + if (( WEEK_KEEP && $(date +%u) == 1 )) + then + if [ -d "$SNAPSHOT_RW/$NAME/weekly.${WEEK_KEEP}" ] + then + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\tDeleting $SNAPSHOT_RW/$NAME/weekly.${WEEK_KEEP}" + $RM -rf "$SNAPSHOT_RW/$NAME/weekly.${WEEK_KEEP}" + fi + for (( backup_num=$WEEK_KEEP ; backup_num >= 0 ; backup_num-- )) + do + if [ -d "$SNAPSHOT_RW/$NAME/weekly.${backup_num}" ] + then + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\tRename" \ + "$SNAPSHOT_RW/$NAME/weekly.${backup_num}" \ + "to" \ + "$SNAPSHOT_RW/$NAME/weekly.$(( backup_num + 1 ))" + $MV -f "$SNAPSHOT_RW/$NAME/weekly.${backup_num}" \ + "$SNAPSHOT_RW/$NAME/weekly.$(( backup_num + 1 ))" + fi + done + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\tCopying" \ + "$SNAPSHOT_RW/$NAME/daily.1" \ + to \ + "$SNAPSHOT_RW/$NAME/weekly.0" + cp -al "$SNAPSHOT_RW/$NAME/daily.1" \ + "$SNAPSHOT_RW/$NAME/weekly.0" + fi + if (( MONTH_KEEP && $(date +%d) == 1)) + then + if [ -d "$SNAPSHOT_RW/$NAME/monthly.${MONTH_KEEP}" ] + then + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\tDeleting $SNAPSHOT_RW/$NAME/monthly.${MONTH_KEEP}" + $RM -rf "$SNAPSHOT_RW/$NAME/monthly.${MONTH_KEEP}" + fi + for (( backup_num=$MONTH_KEEP ; backup_num >= 0 ; backup_num-- )) + do + if [ -d "$SNAPSHOT_RW/$NAME/monthly.${backup_num}" ] + then + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\tRename" \ + "$SNAPSHOT_RW/$NAME/monthly.${backup_num}" \ + "to" \ + "$SNAPSHOT_RW/$NAME/monthly.$(( backup_num + 1 ))" + $MV -f "$SNAPSHOT_RW/$NAME/monthly.${backup_num}" \ + "$SNAPSHOT_RW/$NAME/monthly.$(( backup_num + 1 ))" + fi + done + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\tCopying" \ + "$SNAPSHOT_RW/$NAME/daily.1" \ + to \ + "$SNAPSHOT_RW/$NAME/monthly.0" + cp -al "$SNAPSHOT_RW/$NAME/daily.1" \ + "$SNAPSHOT_RW/$NAME/monthly.0" + fi } runBackup() { @@ -244,6 +296,22 @@ runBackup() { echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\t\tdaily.$backup_num" fi done + for (( backup_num=0 ; backup_num <= WEEK_KEEP ; backup_num++ )) + do + if [ -d "$SNAPSHOT_RW/$NAME/weekly.$backup_num" ] + then + RSYNC_OPTS="$RSYNC_OPTS --link-dest=$SNAPSHOT_RW/$NAME/weekly.$backup_num" + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\t\tweekly.$backup_num" + fi + done + for (( backup_num=0 ; backup_num <= MONTH_KEEP ; backup_num++ )) + do + if [ -d "$SNAPSHOT_RW/$NAME/monthly.$backup_num" ] + then + RSYNC_OPTS="$RSYNC_OPTS --link-dest=$SNAPSHOT_RW/$NAME/monthly.$backup_num" + echo -e "$(date +%Y-%m-%d:%H:%M:%S)\t\t\tmonthly.$backup_num" + fi + done if (( TIMEOUT )) then RSYNC_OPTS="$RSYNC_OPTS --timeout=$TIMEOUT"