How To Set Red hat / CentOS Linux Remote Backup / Snapshot Server

by on July 5, 2008 · 27 comments· LAST UPDATED July 7, 2008

in , ,

Q. I've HP RAID 6 server running RHEL 5.x. I'd like to act this box as a backup server for my other Red Hat DNS and Web server. The server must keep backup in hourly, daily and monthly format. How do I configure my Red Hat / CentOS Linux server as remote backup or snapshot server?

A. rsnapshot is easy, reliable and disaster recovery backup solution. It is a remote backup program that uses rsync to take backup snapshots of filesystems. It uses hard links to save space on disk and offers following features:

  • Filesystem snapshot - for local or remote systems.
  • Database backup - MySQL backup
  • Secure - Traffic between remote backup server is always encrypted using openssh
  • Full backup - plus incrementals
  • Easy to restore - Files can restored by the users who own them, without the root user getting involved.
  • Automated backup - Runs in background via cron.
  • Bandwidth friendly - rsync used to save bandwidth

Sample setup

  • snapshot.example.com - HP box with RAID 6 configured with Red Hat / CentOS Linux act as backup server for other clients.
  • DNS ns1.example.com - Red Hat server act as primary name server.
  • DNS ns2.example.com - Red Hat server act as secondary name server.
  • www.example.com - Red Hat running Apache web server.
  • mysql.example.com - Red Hat mysql server.

Install rsnapshot

Login to snapshot.example.com. Download rsnapshot rpm file, enter:

WARNING! These examples only works on Red hat / CentOS / Suse / RHEL / Fedora Linux. See Debian / Ubuntu Linux backup server instructions here.

# cd /tmp
# wget http://www.rsnapshot.org/downloads/rsnapshot-1.3.0-1.noarch.rpm
# wget http://www.rsnapshot.org/downloads/rsnapshot-1.3.0-1.noarch.rpm.md5

Verify rpm file for integrity, enter
# md5sum -c rsnapshot-1.3.0-1.noarch.rpm.md5
Sample output:

rsnapshot-1.3.0-1.noarch.rpm: OK

Install rsnapshot, enter:
# rpm -ivh rsnapshot-1.3.0-1.noarch.rpm
Sample output:

Preparing...                ########################################### [100%]
   1:rsnapshot              ########################################### [100%]

Configure rsnapshot

You need to perform following steps

Step # 1: Configure password less login

To perform remote backup you need to setup password less login using openssh. Create ssh rsa key and upload they to all servers using scp (note you are overwriting ~/ssh/authorized_keys2 files). You need to type following commands on snapshot.example.com server:
# ssh-keygen -t rsa
# scp .ssh/id_rsa.pub root@ns1.example.com:.ssh/authorized_keys2
# scp .ssh/id_rsa.pub root@ns2.example.com:.ssh/authorized_keys2
# scp .ssh/id_rsa.pub root@www.example.com:.ssh/authorized_keys2
# scp .ssh/id_rsa.pub root@mysql.example.com:.ssh/authorized_keys2

Step # 2: Configure rsnapshot

The default configuration file is located at /etc/rsnapshot.conf. Open configuration file using a text editor, enter:
# vi /etc/rsnapshot.conf

Configuration rules

You must follow two configuration rules:

  • rsnapshot config file requires tabs between elements.
  • All directories require a trailing slash. For example, /home/ is correct way to specify directory, but /home is wrong.

First, specify root directory to store all snapshots such as /snapshots/ or /dynvol/snapshot/ as per your RAID setup, enter:

snapshot_root	/raiddisk/snapshots/

You must separate snapshot_root and /raiddisk/snapshots/ by a [tab] key i.e. type snapshot_root hit [tab] key once and type /raiddisk/snapshots/.

Define snapshot intervals

You need to specify backup intervals i.e. specify hourly, daily, weekly and monthly intervals:

interval	hourly	6
interval	daily	7
interval	weekly	4
interval	monthly	3

The line "interval hourly 6" means 6 hourly backups a day. Feel free to adapt configuration as per your backup requirements and snapshot frequency .

Remote backup directories

To backup /var/named/ and /etc/ directory from ns1.example.com and ns2.example.com, enter:

backup	root@ns1.example.com:/etc/	ns1.example.com/
backup	root@ns1.example.com:/var/named/	ns1.example.com/
backup	root@ns2.example.com:/etc/	ns2.example.com/
backup	root@ns2.example.com:/var/named/	ns2.example.com/

To backup /var/www/, /var/log/httpd/ and /etc/ directory from www.example.com, enter

backup	root@www.example.com:/var/www/	www.example.com/
backup	root@www.example.com:/etc/	www.example.com/
backup	root@www.example.com:/var/log/httpd/	www.example.com/

To backup mysql database files stored at /var/lib/mysql/, enter:

backup	root@mysql.example.com:/var/lib/mysql/	mysql.example.com/dbdump/

Save and close the file. To test your configuration, enter:
# rsnapshot configtest
Sample output:

Syntax OK

Schedule cron job

Create /etc/cron.d/rsnapshot cron file. Following values used correspond to the examples in /etc/rsnapshot.conf.

0 */4 * * *         /usr/bin/rsnapshot hourly
50 23 * * *         /usr/bin/rsnapshot daily
40 23 * * 6         /usr/bin/rsnapshot weekly
30 23 1 * *         /usr/bin/rsnapshot monthly

Save and close the file. Now rsnapshot will work as follows to backup files from remote boxes:

  1. 6 hourly backups a day (once every 4 hours, at 0,4,8,12,16,20)
  2. 1 daily backup every day, at 11:50PM
  3. 1 weekly backup every week, at 11:40PM, on Saturdays (6th day of week)
  4. 1 monthly backup every month, at 11:30PM on the 1st day of the month

How do I see backups?

To see backup change directory to
# cd /raiddisk/snapshots/
# ls -l

Sample output:

drwxr-xr-x 4 root root 4096 2008-07-04 06:04 daily.0
drwxr-xr-x 4 root root 4096 2008-07-03 06:04 daily.1
drwxr-xr-x 4 root root 4096 2008-07-02 06:03 daily.2
drwxr-xr-x 4 root root 4096 2008-07-01 06:02 daily.3
drwxr-xr-x 4 root root 4096 2008-06-30 06:02 daily.4
drwxr-xr-x 4 root root 4096 2008-06-29 06:05 daily.5
drwxr-xr-x 4 root root 4096 2008-06-28 06:04 daily.6
drwxr-xr-x 4 root root 4096 2008-07-05 18:05 hourly.0
drwxr-xr-x 4 root root 4096 2008-07-05 15:06 hourly.1
drwxr-xr-x 4 root root 4096 2008-07-05 12:06 hourly.2
drwxr-xr-x 4 root root 4096 2008-07-05 09:05 hourly.3
drwxr-xr-x 4 root root 4096 2008-07-05 06:04 hourly.4
drwxr-xr-x 4 root root 4096 2008-07-05 03:04 hourly.5
drwxr-xr-x 4 root root 4096 2008-07-05 00:05 hourly.6
drwxr-xr-x 4 root root 4096 2008-07-04 21:05 hourly.7
drwxr-xr-x 4 root root 4096 2008-06-22 06:04 weekly.0
drwxr-xr-x 4 root root 4096 2008-06-15 09:05 weekly.1
drwxr-xr-x 4 root root 4096 2008-06-08 06:04 weekly.2

How do I restore backup?

Let us say you would like to restore a backup for www.example.com. Type the command as follows (select day and date from ls -l output):
# cd /raiddisk/snapshots/
# ls -l
# cd hourly.0/www.example.com/
# scp -r var/www/ root@www.example.com:/var/www/
# scp -r etc/httpd/ root@www.example.com:/etc/httpd/

How do I exclude files from backup?

To exclude files from backup, open rsnapshot.conf file and add following line:

exclude_file	/etc/rsnapshot.exclude.www.example.com

Create /etc/rsnapshot.exclude.www.example.com as follows:

/var/www/tmp/
/var/www/*.cache

Further readings:

  1. man rsnaspshot, ssh, ssh-keygen
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 27 comments… read them below or add one }

1 Tushar July 7, 2008 at 1:01 pm

Hi,

Really great article, you guys are experts :)

Regards,
Tushar

Reply

2 Naresh July 10, 2008 at 4:56 am

It’s a great backup solution… :)
and also a good how to.

Reply

3 Uncle Tanaka July 10, 2008 at 5:34 pm

Hello,

I have no luck…
I got this error when run:
scp .ssh/id_rsa.pub root@ns1.example.com:.ssh/authorized_keys2

stdin: is not a tty

Google search didn’t help….

Any idea?

Thanks

Reply

4 Abdul Basit October 18, 2010 at 6:38 pm

use ssh-copy-id instead.
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ns1.example.com

this saves the hazel.

Reply

5 Jalal Hajigholamali July 11, 2008 at 6:13 am

Hi,

Really very useful article

Reply

6 Mehdi January 27, 2009 at 11:22 am

Uncle T;
did you see this?:

you have to setup passwordless login.
well i cant post a link so go back up and find the link in blue

Reply

7 Chris April 2, 2009 at 4:58 pm

I think I have it set up correctly. I ran the rsnapshot -t minutes and took that output and copied it to the command line and it created the files correctly. My problem is creating the cron job.
1. I created a new file /etc/cron.d/rsnapshot with the following text.
2. It contains 5 * * * * /usr/bin/rsnapshot minutes

This should be all, correct. Am I missing something?

And another question, when I do the backup of /usr/mydirectory/font/ to /usr/TEST/
I get /usr/TEST/minutes.1/localhost/usr/TEST/usr/mydirectory/font/
Is this right?

Reply

8 nixCraft April 2, 2009 at 5:27 pm

You do not need to run rsnapshot per minutes. Use hourly or daily settings.

Reply

9 Chris April 2, 2009 at 5:29 pm

The only reason I was using minutes was to confirm that the program was running correctly as a CRON job.

Reply

10 nixCraft June 30, 2009 at 5:09 am

To test just enter the following:
rsnapshot -v hourly

And it will make backup from command line.

Reply

11 ubu_fan August 14, 2011 at 11:03 pm

Thanks alot . .
Great Tutorial :)

Reply

12 shital July 30, 2009 at 2:00 pm

I am very satisfied

Reply

13 Luca November 8, 2009 at 9:27 pm

Very thanks. It just work. Keep on it!

Reply

14 Vamsi November 24, 2009 at 6:02 pm

Thanks..I am trying to set it up :)

Reply

15 Narendra December 24, 2009 at 9:21 am

Is will take backup of files/directories as it is or in some compress mode .
Thanks,
Narendra.

Reply

16 nixCraft December 24, 2009 at 11:29 am

No compress mode is used to store backup. So if you backup 20GB from remote server you are going to need 20-25GB for last 7 days.

Reply

17 alex domeny January 5, 2010 at 1:02 pm

Hi
I didn`t get the point

I need examples for the red-hat

Reply

18 Narendra January 9, 2010 at 3:32 pm

Thanks for supporting Vivek.
I ‘m able to take backup hourly using cronjob and command line.
when i tried to run backup as daily m getting the below log info:
logs:
[08/Jan/2010:23:50:01] /usr/bin/rsnapshot daily: started
[08/Jan/2010:23:50:01] /usr/bin/rsnapshot daily: ERROR: Lockfile /var/run/rsnapshot.pid exists and so does its process, can not continue
[09/Jan/2010:00:00:01] /usr/bin/rsnapshot hourly: started
[09/Jan/2010:00:00:01] /usr/bin/rsnapshot hourly: ERROR: Lockfile /var/run/rsnapshot.pid exists and so does its process, can not continue
[09/Jan/2010:00:59:59] /usr/bin/rsnapshot hourly: started
[09/Jan/2010:00:59:59] /usr/bin/rsnapshot hourly: ERROR: Lockfile /var/run/rsnapshot.pid exists and so does its process, can not continue
[09/Jan/2010:01:00:17] /usr/bin/rsnapshot hourly: started
[09/Jan/2010:01:00:17] echo 27149 > /var/run/rsnapshot.pid
[09/Jan/2010:01:00:17] mkdir -m 0755 -p /media/disk/intrabackup/hourly.0/
Please help me out from this.

Thanks,
Narendra

Reply

19 Greg August 26, 2011 at 10:58 pm

Hi Narendra,
I am having similar issues with daily back ups. Did you ever get your problems resolved?

Greg

Reply

20 Jan July 1, 2010 at 8:18 am

Maybe it’s not the best idea to use “scp -r” for data restore on the remote host – if you would like to keep the file permissions and also the ownership informations you shall use “scp -rp” (-p = preserve permissions) or “rsync -avH –progress /path/to/backupdir/ root@targethost:/path/to/restoredir” ;-)

But nevertheless it’s a great HOWTO which makes it also possible for beginners to manage simple backup strategies without keeping terms like “full”, “incremental” and “differential” backups in mind!

keep up the good work

Reply

21 Egor September 1, 2010 at 10:08 am

>To backup mysql database files stored at /var/lib/mysql/, enter:
>backup root@mysql.example.com:/var/lib/mysql/ mysql.example.com/dbdump/

Is it really correct way to backup MySQL database without previous stopping server itself or at least blocking tables?

Reply

22 Patel ROcky February 21, 2011 at 11:54 am

Hi Vivek,

In this how to u mentioned DB backup.

So while we are using mysqldump for DB backup and this shown method will be producing same result.
means suppose i have a db in /var/lib/mysql

so can i copy that directory as bakcup and when it will be needed……?

can i use it as backup…….

what is the difference between myqldump backup approach and this on which used in this article…..?

and what is the suggested method …..?

Regards,
Rocky

Reply

23 nixCraft February 21, 2011 at 1:33 pm

Both will backup database. However, with rsnapshot you can quickly select and restore backup based on days, week or month.

Reply

24 iss March 12, 2011 at 12:09 pm

Is there any way to do remote backup of system without root access (PermitRootLogin set to “no” in sshd_config)?

Reply

25 Naveen March 15, 2011 at 10:00 pm

U guys are the best, Great work.

Reply

26 Chris November 2, 2011 at 3:49 pm

Don’t you need to specify a username in the cron file? for a user file its not needed, but if its in /etc/cron.d/rsnapshot, you should need it.

Reply

27 Gonzo December 18, 2013 at 6:56 pm

There’s one line that you forgot to set:

# Uncomment this to enable remote ssh backups over rsync.
#
cmd_ssh /usr/bin/ssh

I kept getting “cmd_ssh not defined in /etc/rsnapshot.conf” after following your guide until I uncommented that line from rsnapshot.conf.

Reply

Leave a Comment

Tagged as: , , , , , , , , , , , , ,

Previous Faq:

Next Faq: