How Easily to Backup Your Linux Box Using Rdiff-backup
9425 Views, 13 Favorites, 0 Comments
How Easily to Backup Your Linux Box Using Rdiff-backup
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
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/
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
Install rdiff-backup
[root@HOST scripts]# yum install rdiff-backup
[root@HOST scripts]# yum install rdiff-backup
Identify the Directories You Want to Backup
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
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
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
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
}
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
backup $BACKUPBASE /data
backup $BACKUPBASE /etc
backup $BACKUPBASE /usr/local
backup $BACKUPBASE /home
backup $BACKUPBASE /etc
backup $BACKUPBASE /usr/local
backup $BACKUPBASE /home
The Whole Thing Together Now
#!/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
#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
[root@HOST scripts]# crontab -e
10 1 * * * /usr/local/scripts/backup-rdiff.sh > /var/log/backup.log 2>&1
10 1 * * * /usr/local/scripts/backup-rdiff.sh > /var/log/backup.log 2>&1
Restore
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.
rdiff-backup -r 2D /backup/etc/named.conf /etc/named.conf
Simple and very effective.