How Easily to Backup Your Linux Box Using Rdiff-backup
9494 Views, 13 Favorites, 0 Comments
How Easily to Backup Your Linux Box Using Rdiff-backup
![rdiff-restore.jpg](/proxy/?url=https://content.instructables.com/F21/Q4DL/FWYHVKQS/F21Q4DLFWYHVKQS.jpg&filename=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](/proxy/?url=https://content.instructables.com/F8Z/HDVA/FWYHVKM3/F8ZHDVAFWYHVKM3.jpg&filename=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/
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](/proxy/?url=https://content.instructables.com/FFM/PB1B/FWYHVKLJ/FFMPB1BFWYHVKLJ.jpg&filename=rdiff-yum.jpg)
Install rdiff-backup
[root@HOST scripts]# yum install rdiff-backup
[root@HOST scripts]# yum install rdiff-backup
Identify the Directories You Want to Backup
![rdiff-df.jpg](/proxy/?url=https://content.instructables.com/F8Z/HDVA/FWYHVKM3/F8ZHDVAFWYHVKM3.jpg&filename=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](/proxy/?url=https://content.instructables.com/F4L/THCV/FWYHVKMR/F4LTHCVFWYHVKMR.jpg&filename=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
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](/proxy/?url=https://content.instructables.com/F2Q/5CCR/FWYHVKNE/F2Q5CCRFWYHVKNE.jpg&filename=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
}
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](/proxy/?url=https://content.instructables.com/F31/ZGYE/FWYHVKO1/F31ZGYEFWYHVKO1.jpg&filename=rdiff-script-3.jpg)
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
![rdiff-script-4.jpg](/proxy/?url=https://content.instructables.com/FFM/QER5/FWYHVKPW/FFMQER5FWYHVKPW.jpg&filename=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
#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](/proxy/?url=https://content.instructables.com/FU4/P3B3/FWYHVKQ6/FU4P3B3FWYHVKQ6.jpg&filename=rdiff-crontab.jpg)
[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
![rdiff-restore.jpg](/proxy/?url=https://content.instructables.com/F21/Q4DL/FWYHVKQS/F21Q4DLFWYHVKQS.jpg&filename=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.
rdiff-backup -r 2D /backup/etc/named.conf /etc/named.conf
Simple and very effective.