I use rdiff-backup to keep a few months worth of daily backups for my home systems (and those of my parents for that matter). The ability to recover any version of a file is great – although the process still requires a geek (me).
$ rdiff-backup --restore-as-of "7D" user@backupserver::/path/to/backup/file
Wouldn’t it be great if you could just mount the backup repository and browse by path or date and then just copy the desired version? Enter BackupFS, a fuse filesystem implemented with rdiff-backup.
I’ve only just started digging into this, and rdiff-backup’s python packages were not intended to be used as libraries (not with all the code buried in rdiff_backup.Main and all the global module variables floating around. Still, I was able to get a server test and a listing of the repositories root increments by using the python modules (and not just making multiple subprocess() calls).
I have a glorified version of the example hello world fuse filesystem able to mount and list a few meta-directories:
dvhart@vin:backupfs.git$ ./backupfs.py mnt && (tree mnt; fusermount -u mnt) Testing server started by: ssh -C katara rdiff-backup --server Server OK mnt |-- By Date | `-- increments.2010-01-07T22:11:42-08:00.dir |-- By Path `-- hello 3 directories, 1 file Fatal Error: Lost connection to the remote system
I still have some basic research to do in order to understand how to operate within the rdiff-backup packages (API isn’t quite the right term ;-). After that, it’ll be on to a more formal design and then some nicer code.