Features
For many people hard disks provide the form of persistent storage that is most readily available and cheapest per MB. I think that rdiff-backup is often the best way to back one hard drive to another.
Creates mirror: rdiff-backup makes the backup directory into an almost exact copy of the source directory (the only difference is one extra subdirectory on the backup side). If you delete a file from the source directory you can simply copy it from the backup directory, use "find" or "locate" to find the file, or use any other familiar utility. Also, if the two directories are on different disks, you can recover almost immediately if the disk containing the source directory crashes, just by mounting the backup directory where the source directory used to be.
Keeps increments: Normally, with a mirror, any changes made to the source directory are immediately sent to the backup directory, and old changes are lost. rdiff-backup saves those changes in the form of reverse diffs, so you can recover the older form of the file.
For instance, suppose last week you deleted half of some document, thinking that what you had written was garbage. Yesterday, your backup event ran, saving these changes. Today you realize that you were on to something and want what you deleted back. If you just mirrored, you would be out of luck, since the copy on your mirror would be the newer one. With rdiff-backup, the newer version would indeed be present, but in a special directory (rdiff-backup-data/) there would be a file that recorded this change. Running rdiff-backup on this file recovers the version from a week ago.
Preserves all information: Whether you restore from the mirror directory or from an earlier incremental backup, rdiff-backup will reproduce your files exactly as they were. Files missing at the time of backup will also be missing after the restore. Files hard linked when backed up will be hard linked after the restore. rdiff-backup also preserves permissions, user and group ownership, modification time, device files, fifos, and symlinks.
Sometimes it is impossible for the information to be replicated exactly on the destination. For instance, ownership cannot usually be replicated without root access at the destination; windows file systems may not be case sensitive and have no ownership at all. rdiff-backup records file metadata in a separate file so that all information is preserved even if the destination file system is missing features.
Space efficient: Suppose you have a large database file that changes a little bit every day. A normal incremental backup would keep saving copy after copy of this database, wasting a lot of space. rdiff-backup uses rdiff, an efficient diffing program that works on binary files as well as text, so only a fraction of the data in your database would be saved in each incremental backup.
Bandwidth efficient: rdiff-backup uses rdiff, which was written by the authors of and uses the same algorithm as rsync. As a result, when when writing to a remote location, rdiff-backup will only send diffs over and can use much less bandwidth than, say, ftp or scp.
For instance, suppose you slightly alter large file A to make large file A', and A is still on the remote system. When rdiff-backup is run, it will only send over the diff A->A' (in order to "copy" A' to the remote system). Neither A nor A' needs to be sent in its entirety.
Transparent data format: Except for recording the hard link structure of old data sets, rdiff-backup doesn't depend on any data files formatted specifically for rdiff-backup. So if you want to stop using rdiff-backup in the future, you won't be stuck with any undecipherable files in some strange format. As noted above, the mirror directory will just be a copy of the source directory as it was when rdiff-backup was last run. Earlier states of your files are saved just by 1) keeping a copy of them, 2) in diff form as produced by rdiff, or 3) as a gzipped version of 1 or 2.