Backup with Rsnapshot

Now that our low-budget file server (a stock Dell Inspiron 531S desktop with an additional 500 GB SATA drive) is up & running Xubuntu 8.10, it’s time to get rsnapshot working again.

All our data files live on the server, so the backup routine need not handle any of the usual /home stuff on our desktop boxes. Rebuilding a dead box is a nuisance, but they’re all pretty much the same and it’s less of a nuisance not worrying about rare failures… haven’t had any failures in many years; they get replaced before they die.

The backup files go to an external 500 GB USB drive, which is not protection against a catastrophe in the basement. Mostly, this guards against finger fumbles; the external drive gets dumped to another hard drive in the fireproof safe more-or-less monthly.

So. To begin…

Install rsnapshot, which will also drag in ssh, the metapackage around the client & server sides of openssh. The server side is already installed so I can sign in using public-key authentication.

Set /etc/rsnapshot.conf thusly (comments snipped out):

snapshot_root   /mnt/backup/snapshots
no_create_root  1
cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du          /usr/bin/du
cmd_rsnapshot_diff      /usr/bin/rsnapshot-diff
#interval       hourly  6
interval        daily   30
#interval       weekly  4
interval        monthly 12
#interval       yearly  1
logfile /var/log/rsnapshot
du_args -csh
backup  /mnt/userfiles/         oyster/
backup  /mnt/bulkdata/          oyster/
backup  /mnt/music/             oyster/
backup  /mnt/diskimages/        oyster/

Basically, that creates a month of daily backups, plus monthly backups for a year. Haven’t ever gotten to a yearly backup, but you get the idea.

The no-create-root option prevents horrible things from happening if the USB drive wakes up dead and doesn’t mount; you don’t want to back up the drives to the /mnt/bulkdata mount point. The USB drive mounts using a UUID entry in /etc/fstab, as described there.

Create a pair of scripts in /root to mount the USB drive, do the backup, unmount it, and shut down the system:

rsnapshot.daily

#!/bin/sh
logger "Mounting USB drive"
mount /mnt/backup
logger "Starting backup"
/usr/bin/rsnapshot daily
logger "Unmounting USB drive"
umount /mnt/backup
logger "Power off"
shutdown -P now
logger "Done!"

rsnapshot.monthly

#!/bin/sh
mount /mnt/backup
/usr/bin/rsnapshot monthly
umount /mnt/backup
shutdown -P now

Note: the rsnapshot executable has moved from /usr/local/bin in Ubuntu 7.10 to /usr/bin in 8.10.

You could be more clever than that, but, eh, they’re simple & easy.

The Inspiron 531S 1.0.13 BIOS now powers off dependably with the 2.6.27-14-generic kernel in 8.10, a pleasant change from the 1.0.12 BIOS and the 2.6.22-16-generic kernel used in 7.10. That means the shutdown commands work and I can shave 25% off the server’s power bill. Not that it’s very big to begin with, but every little bit helps.

Set up /etc/crontab to run the backups (and sync the system clock with reality, for the reasons described there):

10 23	1 * *	root	/root/rsnapshot.monthly
30 23	* * *	root	/root/rsnapshot.daily
#
00 01	* * *	root	ntpdate north-america.pool.ntp.org

And that’s it.

Memo to Self: add e2fsck to the monthly backup routine and move it an hour earlier.