rsync script for snapshot backups

Dennis Steinkamp dennis at
Tue Jun 21 16:45:37 UTC 2016

Am 20.06.2016 um 22:01 schrieb Larry Irwin (gmail):
> The scripts I use analyze the rsync log after it completes and then 
> sftp's a summary to the root of the just completed rsync.
> If no summary is found or the summary is that it failed, the folder 
> rotation for that set is skipped and that folder is re-used on the 
> subsequent rsync.
> The key here is that the folder rotation script runs separately from 
> the rsync script(s).
> For each entity I want to rsync, I create a named folder to identify 
> it and the rsync'd data is held in sub-folders:
> daily.[1-7] and monthly.[1-3]
> When I rsync, I rsync into daily.0 using daily.1 as the link-dest.
> Then the rotation script checks daily.0/rsync.summary - and if it 
> worked, it removes daily.7 and renames the daily folders.
> On the first of the month, the rotation script removes monthly.3, 
> renames the other 2 and makes a complete hard-link copy of daily.1 to 
> monthly.1
> It's been running now for about 4 years and, in my environment, the 10 
> copies take about 4 times the space of a single copy.
> (we do complete copies of linux servers - starting from /)
> If there's a good spot to post the scripts, I'd be glad to put them up.
Hi Larry,

that is something i couldn`t do with my current scripting skills but it 
sounds very interesting and i really would like to know how you did it 
if you don`t mind showing me your script of course.
As for my script, this is what i came up with.


# rsync copy scriptv2 for rsync pull from FreeNAS to BackupNAS

# Set Date
B_DATE=$(date +"%d-%m-%Y-%H%M")
EXPIRED=`date +"%d-%m-%Y" -d "14 days ago"`

# Create directory if it doesn`t exist already
if ! [ -d /volume1/Backup_Test/in_progress ] ; then
         mkdir -p /volume1/Backup_Test/in_progress

# rsync command
if   [ -f /volume1/rsync/Test/linkdest.txt ] ; then
         rsync -aqzh \
         --delete --stats --exclude-from=/volume1/rsync/Test/exclude.txt \
         --log-file=/volume1/Backup_Test/logs/rsync-$B_DATE.log \
         Test at /volume1/Backup_Test/in_progress
         rsync -aqzh \
         --delete --stats --exclude-from=/volume1/rsync/Test/exclude.txt \
         --log-file=/volume1/Backup_Test/logs/rsync-$B_DATE.log \
         Test at /volume1/Backup_Test/in_progress

# Check return value
if [ $? = 24 -o $? = 0 ] ; then
         mv /volume1/Backup_Test/in_progress /volume1/Backup_Test/$B_DATE
         echo $B_DATE > /volume1/rsync/Test/linkdest.txt

# Delete expired snapshots (2 weeks old)
if [ -d /volume1/Backup_Test/$EXPIRED-* ]
rm -Rf /volume1/Backup_Test/$EXPIRED-*

Keep in mind i am not very good at this and if something can be improved 
or you see a big flaw in it, i would be grateful if you let me know.
So far it seems to do the trick. I would like to improve it so that the 
logfile will be mailed to a specific e-mail adress after rsync completed 
Unfortunately the logfiles grow very big when i have lots of data to 
back up and i couldn`t figure out how to only send a specific part of 
the logfile or to customize the logfile somehow.

More information about the rsync mailing list