How Easily to Backup Your Linux Box Using Rdiff-backup

by joe in Circuits > Linux

9425 Views, 13 Favorites, 0 Comments

How Easily to Backup Your Linux Box Using Rdiff-backup

rdiff-restore.jpg
This instructable will show you how to run a simple full featured backup and recovery system on linux using rdiff-backup and a usb drive.

Assumptions

rdiff-df.jpg
I am going to assume a system that uses yum for installation and have mounted you usb drive as /mnt//backup.

I use fedora, but you can use anything and just install rdiff-backup however you'd like.

Also it is available from download here: http://rdiff-backup.nongnu.org/

Install Rdiff-backup

rdiff-yum.jpg
Install rdiff-backup
[root@HOST scripts]# yum install rdiff-backup

Identify the Directories You Want to Backup

rdiff-df.jpg
You can backup the whole system, but that may be overkill, I want to backup my /etc/ directory for any changes I may have made to named, sendmail, network, etc, /data and my home dirs.

Automate

rdiff-script-1.jpg
Clearly you don't want to do this by hand. We'll write a script.

First thing in the script, we will check to see the usb drive is mounted, and quit if not.
#!/bin/bash
#Script to backup to usb drive

BACKUPBASE="/backups"

#check to see if backup target is mounted.
if `df -h | grep $BACKUPBASE >/dev/null `
then
echo "Starting $0 `date`"
else
echo "ERROR: $BACKUPBASE not mounted"
echo "$0 exiting `date` "
exit 1
fi

Write a Function

rdiff-script-2.jpg
Next we will write a function to actually do the backup.

function backup {
DEST=$1$2
SOURCE=$2
echo "Src : $SOURCE"
if [-d $DEST]
then
echo "Dest: $DEST"
else
mkdir -p $DEST
echo "Dest: $DEST -created"
OPTS="--force"
fi

#Perform backup
rdiff-backup -v2 --exclude-special-files $OPTS $SOURCE $DEST
#Cleanup version files older than 4weeks
rdiff-backup -v2 --remove-older-than 4W --force $DEST
#Print a report of what we backed up and cleaned up
rdiff-backup --list-changed-since 0D23h00m $DEST
}

Do Tell the Script Which Dirs to Backup

rdiff-script-3.jpg
backup $BACKUPBASE /data
backup $BACKUPBASE /etc
backup $BACKUPBASE /usr/local
backup $BACKUPBASE /home

The Whole Thing Together Now

rdiff-script-4.jpg
#!/bin/bash
#Script to backup to usb drive

BACKUPBASE="/backups"

#Check to see if backup drive is mounted.
if `df -h | grep $BACKUPBASE >/dev/null `
then
echo "Starting $0 `date`"
else
echo "ERROR: $BACKUPBASE not mounted"
echo "$0 exiting `date` "
exit 1
fi

function backup {
DEST=$1$2
SOURCE=$2
echo "Src : $SOURCE"
if [-d $DEST]
then
echo "Dest: $DEST"
else
mkdir -p $DEST
echo "Dest: $DEST -created"
OPTS="--force"
fi

#Perform backup
rdiff-backup -v2 --exclude-special-files $OPTS $SOURCE $DEST
#Cleanup version files older than 4weeks
rdiff-backup -v2 --remove-older-than 4W --force $DEST
#Print a report of what we backed up and cleaned up
rdiff-backup --list-changed-since 0D23h00m $DEST
}

backup $BACKUPBASE /data
backup $BACKUPBASE /etc
backup $BACKUPBASE /usr/local
backup $BACKUPBASE /home

Add to Cron

rdiff-crontab.jpg
[root@HOST scripts]# crontab -e
10 1 * * * /usr/local/scripts/backup-rdiff.sh > /var/log/backup.log 2>&1

Restore

rdiff-restore.jpg
To restore the most recent version you can simply copy the file out of the backup directory. If you want a version from 2 days ago:
rdiff-backup -r 2D /backup/etc/named.conf /etc/named.conf

Simple and very effective.