How can I reliably backup an external drive to another external drive? I have got an external hard drive (A) that contains my iTunes &amp; Aperture libraries. It's not always plugged to my MacBook.

What's the best way to make a backup of it on another external hard drive (B) ?

Wanted features :


fully automated (that executes itself hourly, or something like that)
incremental (in order to be fast)
only activates when both disks (A &amp; B) are plugged in
works with multiple backup disks (in order to have a backup at home and another at work)
discrete indication that a backup is in progress
ability to pause or stop backup (useful if I am in a hurry and have to disconnect external drives)


It would be nice if backup disks could be networked, but that's not mandatory.

I would have loved to use Time Machine in order to have an history, but it doesn't seem to work well with external hard drives that aren't always connected and I don't trust it for that use case (my internal SSD is backed up thanks to Time Machine, though).

Online backups aren't adequate because I have a very poor internet connection.
Another possible option: use rsync and a launchd job to execute it when the disk is mounted. I believe Time Machine uses a similar approach to running on disk mount. For the hourly execution, you can use cron. The discreet notification can be done in a number of ways (for instance sending a mail or the Growl extension which allows notifications to be sent from the command line). killall rsync should stop the backup safely if you need to pack up and go. Also rsync is also entirely capable of networked syncing.

It will take a bit of work to set up, but the advantages are:


it's versatile (see man rsync, they pretty much thought of everything)
it's discreet
it doesn't cost anything
rsync is quick


You may find this helpful for launchd jobs involving disk mounting.

Edit: I should add that the --partial option to rsync will mean that the backup is resumed after killall rsync.

Edit 2: You can use a Control Plane context instead of launchd if you prefer.