The Problem
Teresa and I use a single Dropbox account to share files between our computers. I also use the same account to store (and sync) plain-text notes on my iPad and iPhone (I use the apps PlainText and iA Writer). In case things go wrong with these apps, the syncing, or with Dropbox itself, I want to backup my Dropbox files and keep past snapshots of the backups so I can go back in time.
The Solution
rdiff-backup
can do this. It is a command-line tool written in Python that:
…backs up one directory to another, possibly over a network. The target directory ends up a copy of the source directory, but extra reverse diffs are stored in a special subdirectory of that target directory, so you can still recover files lost some time ago. The idea is to combine the best features of a mirror and an incremental backup.
To make this all happen, I have Dropbox installed, signed-in, and running on my Linux desktop/server, which runs Ubuntu 11.04 Natty with Gnome 2.
Install rdiff-backup
thusly:
# aptitude install rdiff-backup
I use the directory /backup/
to hold all my backup targets, so I can run rdiff-backup
like this:
$ rdiff-backup \ --exclude $HOME/Dropbox/.dropbox \ --exclude $HOME/Dropbox/.dropbox.cache \ $HOME/Dropbox /backup/Dropbox
Every time I run rdiff-backup
like this, it creates a new snapshot of my Dropbox files. Old snapshots are kept until I decide to purge them (if at all). To purge any snapshots older than two months, for example, I run this command:
$ rdiff-backup --force --remove-older-than 2M /backup/Dropbox
I run the above two commands in an @hourly
crontab script to keep this all happening automatically.
Browsing Past Snapshots
rdiff-backup
has its own commands for digging into the files stored in the past snapshots, but it requires exactly knowing the filenames and backup times. Another tool, rdiff-backup-fs solves this problem by mounting the rdiff-backup backup directory as a FUSE filesystem, allowing me to grep
and find
my way through a directory tree of all snapshots.
After installing FUSE and rdiff-backup-fs
, I mount my Dropbox snapshot tree with this command:
$ rdiff-backup-fs ~/mnt /backup/Dropbox
Note that the order of the arguments for mounting source and target are backwards compared to the canonical mount
command.
A long listing of my 10-oldest snapshots looks like this:
$ ls -lF ~/mnt/ | head -10 total 0 dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T05:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T06:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T07:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T08:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T09:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T10:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T11:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T12:00:01/ dr-xr-xr-x 1 root root 4096 2013-03-10 13:52 2013-01-06T13:00:01/
I can then explore all my snapshots at once with any tools wish.
When done, I unmount the rdiff-backup-fs filesystem with:
$ /bin/fusermount -u ~/mnt