Debian / Ubuntu Linux Install and Configure Remote Filesystem Snapshot with rsnapshot Incremental Backup Utility
Q. I'd like to configure my Debian box to backup two remote servers using rsnapshot software. It should make incremental snapshots of local and remote filesystems for any number of machines on 2nd hard disk located at /disk1 ( /dev/sdb2).
A. rsnapshot is perfect open source solution for making backups on local system. It supports both remote and local systems. From the man page:
rsnapshot saves much more disk space than you might imagine. The amount of space required is roughly the size of one full backup, plus a copy of each additional file that is changed. rsnapshot makes extensive use of hard links, so if the file doesn’t change, the next snapshot is simply a hard link to the exact same file. The following instructions are compatible with both Debian and Ubuntu Linux.
Required software / setup on local backup system
- rsnapshot
- rsync
- ssh client
- 2nd hard disk ( RAID array is suggested) - you can also use primary hard disk
- Password less login configured using ssh keys
- /disk1/backup - Backup directory
- /disk1/backup/server1 - Backup directory for remote server called server1
- /disk1/backup/server2 - Backup directory for remote server called server2
- /disk1/backup/localhost - Backup directory for local server
Required software on remote server
- OpenSSH sshd server
- Password less login configured using ssh keys
Step #1: Install rsync and rsnapshot software
Use apt-get command, enter:
$ sudo apt-get install rsync rsnapshot
Step #2: Configure passwordless login / public key based login
Type the following command
# ssh-keygen -t rsa
# scp .ssh/id_rsa.pub root@remotebox1.server.com:.ssh/authorized_keys2
# scp .ssh/id_rsa.pub root@remotebox2.server.com:.ssh/authorized_keys2
See how to configure RSA / DSA SSH public key based authentication.
Step #3: Configure rsnapshot utility
The configuration file is located at /etc/rsnapshot.conf. The configuration file requires tabs between elements and all drectories require a trailing slash. Just open config file using a text editor such as vi or gedit:
# vi /etc/rsnapshot.conf
OR
$ sudo vi /etc/rsnapshot.conf
Set snapshots root directory:
snapshot_root /disk1/backup/
Note you must separate snapshot_root and /disk1/ by a [tab] key i.e. type snapshot_root hit [tab] key once and type /disk1/backup/. All snapshots will be stored under this root directory (/disk1/backup/).
Configure backup policy
You can make hourly, daily, weekly or monthly snapshots of local and remote systems. To make a snapshot every four hours (six times a day) and keep a second set, which are taken once a day, and stored for a seven days, enter:
interval hourly 6 interval daily 7
Feel free to adapt configuration as per your backup needs.
Specify local and remote backup directories
Find out comments that read as follows:
############################### ### BACKUP POINTS / SCRIPTS ### ###############################
You need to comment out / delete default backup directories. To make snapshots for /home/, /etc/, /webroot/ directories to /disk1/backup/localhost, enter:
backup /home/ localhost/ backup /etc/ localhost/ backup /webroot/ localhost/
To backup remote server1 /home/, /etc/, /var/spool/mail/, /webroot/ directories to /disk1/backup/server1, enter:
backup root@remotebox1.server.com:/home/ server1/ backup root@remotebox1.server.com:/etc/ server1/ backup root@remotebox1.server.com:/webroot/ server1/ backup root@remotebox1.server.com:/var/spool/mail/ server1/ backup root@remotebox2.server.com:/home/ server2/
Save and close the file.
Test your config file for errors
Type the following to test your configuration file for errors
# rsnapshot configtest
Output:
Syntax OK
You can also run rsnapshot in a test mode to display its action:
# rsnapshot -t hourly
Step #4: Run rsnapshot for first time
To run first time, enter:
# rsnapshot hourly
Step #5: Configure cron job
Edit /etc/cron.d/rsnapshot file to setup backup snapshot job. This is a sample cron file for rsnapshot. The values used correspond to the examples in /etc/rsnapshot.conf. There you can also set the backup points and many other things. To activate this cron file you have to uncomment the lines below.
Feel free to adapt it to your needs.
0 */4 * * * root /usr/bin/rsnapshot hourly 30 3 * * * root /usr/bin/rsnapshot daily 0 3 * * 1 root /usr/bin/rsnapshot weekly 30 2 1 * * root /usr/bin/rsnapshot monthly
See crontab related faq for more information about cronjob under UNIX / Linux.
How do I exclude files from backup?
rsnapshot allows you to set the include and exclude parameters, if enabled, simply get passed directly to rsync. If you have multiple include/exclude patterns, put each one on a separate line. For example,
exclude_file /etc/rsnapshot.server1.conf
Append exclude file list to /etc/rsnapshot.server1.conf:
# vi /etc/rsnapshot.server1.conf
Exclude files matching pattern from backup:
var/lib/php/session/*
/var/spool/mail/nobody/*
cache/wp-cache-*.????
/var/logs/apache/access.log.*
/var/logs/apache/error.log.*
/linux-kernel/*
/tmp/cache/*
/var/lib/mysql/mysql.sock*
/tmp/php.socket-*
/tmp/*socket*
Save and close the file.
How do I backup remote MySQL database?
You can backup default database directory /var/lib/mysql. However, you can backup remote or local MySQL database with the following script:
#!/bin/sh NOW=$(date +"%d-%m-%Y") MUSER="MySQL-UserNAME" #root MPASS="MySQL-SERVER-PASSWORD" # mypassword MHOST="MySQL-SERVER-IP-ADDRESS" # server1 MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" for db in $DBS do FILE=mysql-$db.$NOW-$(date +"%T").gz $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE done
Now add following line to /etc/rsnapshot.conf file:
backup_script /root/scripts/mysql.backup.sh server1/mysql/
How do I restore backup?
You can simply copy back file using regular scp / cp command.
Further readings:
- rsnapshot project home page
- man pages - rsnapshot, rsync, crontab
Updated for accuracy and database section.
Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
Related Linux / UNIX FAQ:
- Is There a UNIX / Linux unerase / undelete Command?
- Backup home directories in Linux
- Howto: Backup CentOS / Fedora Linux / Red Hat Enterprise Linux server system
- Verify tar command tape backup under Linux or UNIX
- Backup CentOS Linux RPM database
Discussion on This FAQ
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Please do not use the comment form to ask for help / question. Ask your question on the excellent Linux tech support forum. Thank you very much for stopping by our site!
Tags: /etc/rsnapshot.conf, backup directory, backup system, configuration file, hard links, remote server, rsnapshot, rsnapshot backup, rsnapshot command, rsnapshot conf, rsnapshot cron, rsnapshot exclude, rsnapshot howto, rsnapshot remote, rsnapshot rsync, rsnapshot ssh, snapshot backups, software setup, ssh client ~ Last updated on: February 12, 2008



February 11th, 2008 at 1:13 pm
I’ll try to backup my VPS from my notebook.
Thanks for the info!
February 11th, 2008 at 7:54 pm
I do use this technique. Since you are running this from cron, the ssh-key you are using should probably be passwordless. In your .ssh/config on the the server you are going to backup use :
http://ipython.scipy.org/moin/Documentation
command=”/root/backupscript” ssh-rsa AAAAB…..
Then “/root/backupscript” can be setup like this:
# allow rsnapshot to backup /etc
if [ "$SSH_ORIGINAL_COMMAND" = "rsync --server --sender -logDtprRx --numeric-ids . /etc" ]
then
eval $SSH_ORIGINAL_COMMAND
exit 0
fi
echo no match $SSH_ORIGINAL_COMMAND >> /root/backupnomatch.log
#If the rsync server sends a slightly different command, modify backed on what is in /root/backupnomatch.log
February 11th, 2008 at 7:55 pm
Never mind that ipython link, cut and paste issue
February 11th, 2008 at 8:03 pm
Also, I use a script around rsnapshot that helps cut out a lot of my unneeded files from being backed-up. (Think cache files, or rapidly changing files like history in eclipse)
In rsnapshot.conf I have “exclude_file /var/backups/snapshot/excludefile.txt”
Then my script does a
find /home/user1/ -xdev -name .nobackup -print0 | xargs -0 -n1 dirname > $EXCLUDEFILE
cat /home/user1/.backupexcludes >> $EXCLUDEFILE
So this first uses the hdup style .nobackup flag files to ignore whole directories. This works pretty well, except for directories that get deleted like firefox cache directories. Those I put in the .backupexcludes file.
I do a similiar thing for the remote servers I backup.
February 12th, 2008 at 9:56 am
Scott,
Good suggestion. I’m adding additional content to this FAQ including your exclude_file and mysql backup issue.
February 13th, 2008 at 2:03 am
Another good tool to look at is rdiff-backup (http://www.nongnu.org/rdiff-backup/). It keeps a full copy of the current version of each file, with a diff of changed files. If you have a large file that changes a little at a time, you will use even less disk space than with rsnapshot.
February 27th, 2008 at 4:09 pm
I’m doing a backup to an external usb drive who I mounted in fstab like this:
/dev/sdc1 /media/usb_backup auto rw,user,auto 0 0
I get an error that the disk is full when I do my second backup. It looks like rsnapshot thinks that the catalog where the partion is mounted is the messure of who big the backup can bee.The usb drive is 250 Gb and my main partion where I mount it is (root) is 39Gb.
How do I solve this?
February 27th, 2008 at 5:06 pm
Klas,
Are you sure your usb hard disk mounted at /media/usb_backup? Use df or mount command to verify the same. df will also give out information about used disk space.
February 27th, 2008 at 6:33 pm
Looks like it functions know. I just changed the line in fstab to:
/dev/sdc1 /media/usb_backup auto rw,user,auto 0 0
So the problem occured when I had noauto, like this:
/dev/sdc1 /media/usb_backup auto rw,user,noauto 0 0
Can that bee true, that the disk whasnt mounted at al becourse of that (trying to learn al about linux)?
Thanks for your help!