I have been using BackupPC for years. It is written in Perl, based on the rsync protocol, and has sophisticated scheduling, file pooling, and expiry systems to minimize disk usage. It has a web UI to view the contents of backups. I backup eight Linux and Windows systems each night to a BackupPC volume on a 1TB hard disk and then periodically snapshot the volume and copy the snapshot to an eSATA hard disk (copy takes about 90 mins) and store that off site. It has worked well for me.