Earlier I used backup2l to first make local backup and then rsync to server. The only problem was it was wasting disk space on each host, specially laptops.
Recently I moved to bup, provides more efficient backups with very small local storage. Now I have in every laptop, desktop and my email server (all running either Debian or Ubuntu) in /etc/cron.daily/bup-backup:
echo Backup starting at $(hostname) $(date)
bup index -u /var/mail /home /var/lib/mysql
bup save -r backups.example.com: -n $(hostname) /var/mail /home /var/lib/mysql
echo Backup ending at $(hostname) $(date)
Because I do not want remote root logins on my file server at home, there is a need for small tweak in /root/.ssh/config:
Now as each system backups to the same bup archive, deduplication is taken care automagically.
Each month I rsync /home/bupups to external USB drive that is stored in different place in case of fire or other mishap it will be protected. At some point I've considered installing a low-power server at my father-on-law place for automated off-site backups; will keep the off-line copy in any case.
Of course, I do not much care about taking backups from movies, music - expect maybe some kids love; but they are already on some USB drive to entertain them while travelling...