My Backup Script on OS X

It's sysadmin script day on Technometria. Earlier, I posted and
explained by script
for cleaning up unwanted files in Linux. Later this afternoon
Kelly Flanagan asked me how I did backups, so I decided to clean up
my backup script and post it for all to see.

First, let me explain that my goal here is to produce a copy of my
files. I'm not trying to do imcrementals. This protects me from disk
failure, but not my own stupidity. I used to use Synchronize! Pro
for backups. It had a few really nice advantages. First if created
an image and second, it only copied the files that had changed. But
it got flaky and would hang, complain about "non-deletable" files and
so on. Those problems, combined with the fact that it's expensive,
made me look for another solution.

I started using rsync several
months ago to back up my wife's photos.
rsync has been around for years and was actually the result
of someone's dissertation research in the 80's, if I remember right. I used to use it as a grad student
in the 80's to backup my files form one machine to another. It works
across a network, if necessary, and also only copies what's changed.
In fact, I wouldn't be surprised to find out that Synchronize! Pro
was just a fancy front end for rsync.

This script takes a user name as a parameter, and backs up that user
to a drive using rsync. The script automatically mounts and
unmounts the drive because I hate having the drive spin up every time
I go to open or save a file.

The script is intentionally chatty and OS X specific. For example,
the disk mounting and unmounting uses the OS X diskutil
command. To mount the device, you need the device name. You can get
that with diskutil (or it's graphical sibling
DiskUtil) by asking for the "info" on the volume when it's
mounted.

Note that I run rsync as root since there are some root
owned files in my directory space (from CPAN). I modified the
/etc/sudoers file (with visudo) so that I can run
rsync as root without a password. Be careful if you do
this. It's easy to make a mistake in the sudoer syntax and
make it so you can't use sudo anymore.