#

rdiff-backup

rdiff-backup can be used for local and/or remote incremental backups.

Incremental means that successive backups use previous backups and the rsync delta-transfer algorithm in order to save space.

The syntax is like that of rsync, except two colons are used to separate the username/hostname and the path (instead of one) and trailing slashes on paths are not significant.

The latest versions of files in the backups are stored as normal files, and reverse increments are stored in a directory named rdiff-backup-data.

The rdiff-backup command can be used to pull data from the incrementals and restore files to previous states.

You can setup your environment on the Odyssey cluster to use the rdiff-backup software by issuing the command:

module load hpc/rdiff-backup-1.2.8

It's most commonly used on linux systems, but is also available for Mac OS X and Windows (under Cygwin).

Creating Backups

The following two command will make a backup of /some/path as /some/path-backup:

rdiff-backup /some/path /some/path-backup

The rdiff-backup software automatically preserves file attributes and all the other things (and more) that rsync's -a does.

You can prefix the destination with a network path in order to backup to a remote machine instead of the localhost:

rdiff-backup /some/path USERNAME@HOSTNAME::/some/path-backup

Likewise, you can pull from a remote host by adding such syntax to the source.

The rdiff-backup software must be installed on both the source and destination machines.

Purging Old Data From Backups

Running the command: rdiff-backup -v2 --force --remove-older-than 14D /some/path-backup will remove any incremental data that's over 14 days old. Note that this is independent of the actual file modification times. Combining this command with one of the previous backup commands in a script and running it as a daily cron job is a simple way to setup automated backups.

Listing and Restoring Files from Backups

The command: rdiff-backup -l /some/path-backup where /some/path-backup is either the local or remote DESTINATION as specified above, or a path to a subdirectory within it, will list all the past versions of the specified directory/file that are available. Increments are only created if data changed — do not be alarmed if you backup on a regular basis but find rdiff-backup -l does not list an increment for every time the command ran.

To restore the file some/file from the latest backup, use:

rdiff-backup --restore-as-of now /some/path-backup/some/file /place/to/put/it

To restore the backup that was current as of, say, 1 week, 2 days, 3 hours, 4 minutes, and 5 seconds ago:
rdiff-backup --restore-as-of 1W2D3h4m5s /some/path-backup/some/file /place/to/put/it

You can also copy-n-paste one of the increment times listed by the rdiff-backup -l command.

The options --compare, --compare-at-time, --list-changed-since, and --list-at-time are often quite useful for finding the version of a file that you need.

To restore all available backups, use something like the following:

restoresource=/some/path-backup/some/file
restoretarget=/place/to/put/them
rdiff-backup -l "$restoresource" | tail -n +2 | head -n -1 | while read dname date; do rdiff-backup --restore-as-of "$date" "$restoresource" "$restoretarget"/"${dname%%.dir}"; done

CC BY-NC 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License. Permissions beyond the scope of this license may be available at Attribution.