From: Sugar Labs BOFH <sysadmin@sugarlabs.org>
Date: Sun, 17 May 2015 05:35:25 +0000 (-0400)
Subject: Introduce the notion of weekly and monthly snapshots.
X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=7c061b438673833744dc9c3db70ed82d1d5c00db;p=wizbackup.git

Introduce the notion of weekly and monthly snapshots.

By default, we keep 6 daily, 4 weekly and 3 monthly snapshots.
Should save a ton of space with most workloads while preserving
more history.
---

diff --git a/wizbackup b/wizbackup
index d96ee40..c88cc7e 100755
--- a/wizbackup
+++ b/wizbackup
@@ -4,7 +4,7 @@
 # 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, 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
@@ -42,14 +42,19 @@ DEST=$1; shift
 # 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 $@"
 
-# Number of saved snapshots
-SNAPSHOTS=45
+# Number of months to keep
+MONTHS=3
 
 # Abort backup if the destination volume has less than these GBs free
 MIN_FREE_GB=10
 
 RESULT=500
-DATE=`date +"%Y%m%d"`
+DATE=$(date +"%Y%m%d")
+if [ $(date +"%d") = 1 ]; then
+	DATE="$DATE-monthly"
+elif [ $(date +"%w") = 0 ]; then
+	DATE="$DATE-weekly"
+fi
 DEST="`echo $DEST | sed -e 's/\/$//'`"
 
 
@@ -104,15 +109,17 @@ do_init() {
 }
 
 do_prune() {
-	local old="`ls | grep -v tmp | head -n -$SNAPSHOTS`"
-	if [ ! -z "$old" ]; then
+	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
 		echo "$(date): Removing oldest snapshot(s): $old..."
 		rm -rf "$old" || exit 669
-	fi
+	done
 }
 
 do_link() {
-	local newest=`ls | grep  -v tmp | tail -n 1`
+	local newest=`ls -d [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]* | tail -n 1`
 	if [ -d "$DEST/tmp" ]; then
 		echo "$(date): Continuing with pre-existing snapshot $DEST/tmp"
 	elif [ -z "$newest" ]; then
@@ -164,7 +171,9 @@ if (( `id -u` != 0 )); then { echo "Sorry, must be root.  Exiting..."; exit; } f
 echo "$(date): BEGIN backup: $SRC -> $DEST"
 echo "$(date): $0 $SRC $DEST $@"
 do_init
-do_prune
+do_prune 6 ""
+do_prune 4 "-weekly"
+do_prune $MONTHS "-monthly"
 do_test
 do_link
 do_backup