rsnapshot Backup to External USB Drive Gotcha

Written by James McDonald

January 26, 2012

I am using rsnapshot to make hourly, daily and weekly snapshots of my home workstation data. This is on Fedora 16.

In /etc/rsnapshot.conf there are two commands that specify the root directory you want to create your backups in and whether or not to create it if it doesn’t exist already

###########################
# SNAPSHOT ROOT DIRECTORY #
###########################

# All snapshots will be stored under this root directory.
#
snapshot_root   /mnt/3TB_USB/rsnapshot/

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
no_create_root  1

Problem:
The problem I am having is that if the USB drive isn’t mounted rsnapshot exits without doing the backup.

I tried to work around this by adding a script to the cmd_preexec setting thinking that rsnapshot would run cmd_preexec and then check to make sure the snapshot_root existed. But apparently the check for rsnapshot_root happens and rsnapshot exits before cmd_preexec runs. So this approach doesn’t work:

# Specify the path to a script (and any optional arguments) to run right
# before rsnapshot syncs files
#
cmd_preexec   /usr/local/bin/mount_backup_usb.sh

Resolution:
So the answer to my problem is to call the mount_backup_usb.sh from the crontab thusly:

# added by jamesm 5/12/2011
0 */4 * * *         /usr/local/bin/mount_backup_usb.sh && /usr/bin/rsnapshot hourly
50 23 * * *         /usr/local/bin/mount_backup_usb.sh && /usr/bin/rsnapshot daily
40 23 * * 6         /usr/local/bin/mount_backup_usb.sh && /usr/bin/rsnapshot weekly
30 23 1 * *         /usr/local/bin/mount_backup_usb.sh && /usr/bin/rsnapshot monthly

This is the script that I use to mount the external USB Drive. Note that I am using the by-uuid device entry to provide un-ambiguous access to the USB HDD volume just in case the device path (/dev/sdb, /dev/sdc) changes (which it can depending what you have plugged into the PC).

#!/bin/sh

VOLUME=/mnt/3TB_USB
BYUUID=/dev/disk/by-uuid/89406e23-02b9-4846-a9db-38c344fe851f

if mount | grep -q $VOLUME ;
then
	echo already mounted
else
	echo not mounted
        # just in case it's already mounted by the user to /media/*
	umount -f $BYUUID > /dev/null 2>&1
	mount $BYUUID $VOLUME

fi	

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

You May Also Like…

Squarespace Image Export

To gain continued access to your Squarespace website images after cancelling your subscription you have several...

MySQL 8.x GRANT ALL STATEMENT

-- CREATE CREATE USER 'tgnrestoreuser'@'localhost' IDENTIFIED BY 'AppleSauceLoveBird2024'; GRANT ALL PRIVILEGES ON...

Exetel Opt-Out of CGNAT

If your port forwards and inbound and/or outbound site-to-site VPN's have failed when switching to Exetel due to their...