I just use a few USB hard drives, and a script which uses rsync to copy the changed data:
Here's an example:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#!/bin/sh
#
# Archive all system and user data from active Hdd to External 500gb HD
#
LOG="/tmp/rsync.log"
EMAILTO="admin"
date >$LOG
DEV1="sda1"
DEV2="sdb1"
mount /dev/$DEV1 /media/usbdisk >>$LOG
if [ ! -e /media/usbdisk/backup? ];then mount /dev/$DEV2 /media/usbdisk >>$LOG
if [ ! -e /media/usbdisk/backup? ];then echo "Full backup usbdisk failed to mount ";exit 1
else echo "using $DEV2" >> $LOG;
DEV=$DEV2
fi
else echo "using $DEV1" >> $LOG;
DEV=$DEV1
fi
ls -l /media/usbdisk/backup? >> $LOG
HDindex=`ls -l /media/usbdisk/backup?`
HDindex=${HDindex#*backup}
echo "Backup disc $HDindex" >> $LOG
echo "pre-backup" >> $LOG
#signal-event pre-backup >> $LOG
/etc/e-smith/events/actions/mysql-dump-tables
ls -l /home/e-smith/db/mysql/* >> $LOG
echo "post pre-backup" >> $LOG
rsync -aPv /home /media/usbdisk/backup/ >> $LOG
rsync -aPv /etc /media/usbdisk/backup/ >> $LOG
rsync -aPv /root /media/usbdisk/backup/ >>$LOG
rsync -aPv /usr /media/usbdisk/backup/ >>$LOG
rsync -aPv /bin /media/usbdisk/backup/ >>$LOG
rsync -aPv /lib /media/usbdisk/backup/ >>$LOG
rsync -aPv /opt /media/usbdisk/backup/ >>$LOG
rsync -aPv /service /media/usbdisk/backup/ >>$LOG
PERCENT=`df | grep media | gawk '{print $5}'`
echo "USB Hard Drive used: $PERCENT" >>$LOG
date >>$LOG
umount /media/usbdisk >>$LOG
cat $LOG | grep -v "files\.\.\." | mail $EMAILTO -s "Full backup log on /dev/$DEV using Backup disc $HDindex used $PERCENT"
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
as you can see it expects to find a file on the top level "backup?" where the ? is a digit 0-9, each drive is formatted to ext3, and has a file "backup1","backup2" etc the numeric is used as part of the email sent, so that the admin can tell which drive was used.
I get the customer to change the drive as required (daily,weekly,etc).
Note that the files accumulate, which means that any files deleted are retained, but also means if you restore from the data, then files (and emails) "magically" re-appear. If you add "--delete" to the rsync calls, then it will produce a copy of the current state, but you will not be able to rescue deleted files unless they are on another drive (or it is the same day) I run it nightly via a script in cron.daily.
Note also that the drive that the USB connects as, depends on your other arrangements, SATA drives come up as /dev/sd?9, IDE drives come up as /dev/hd?9, therefore depedning on this your USB drives may be /dev/sda1 or /dev/sdc1 (or whatever).