Ich hab jetzt auf die schnelle mal was gescripted. Da gibt es sicherlich noch einiges zu verbessern, aber das ist jetzt erstmal der erste Wurf.
Falls noch jemand an sowas interesse hat - hier ist es:
Bei mir liegen die rsnap.sh und die rsnap.conf auf der USB-Platte unter:
/media/<id_der_usb_platte>/Backup/Dreambox/scripts
und die Backup-Sets landen unter:
/media/<id_der_usb_platte>/Backup/Dreambox/rsnap
Der erste Full-Backup wird mit "cp" erledigt, weil rsync hier etwa 3,5x langsamer ist. So als Richtwert mit "cp" über USB3.0 sind das ~310GB pro Stunde. Alle weiteren Backups sind dann nur noch incrementell - bereits im vorherigen set existierende Files werden dann nur noch verhardlinked. Somit ist jedes incrementelle Backup auch gleichzeitig ein full-backup.
RETENTION_COUNT=30 gibt an, dass die letzten 30 Backup-Sets vorgehalten werden. Alle anderen Backup-Sets werden gelöscht. d.h. bei täglicher Sicherung, sind das 30 Tage.
install rsync:
rsnap.conf
### directory which should contain backup sets ###
RSNAP_BASE=/media/<id_der_usb_platte>/Backup/Dreambox/rsnap
### directory which should be backuped ###
### Important: without an slash at the end ###
RSNAP_SOURCE=/media/hdd/movie
### keep on every backup-set deletion the last x backup-sets ###
RETENTION_COUNT=30
### define directory format for backup-sets ###
DATE=`date +"%Y%m%d%H%M"`
RSNAP_SET_FORMAT=rsnap_$DATE
### rsync options ###
OPTIONS="-aW --protocol=28 --delete"
### Logfile ###
LOGFILE=rsnap.log
Alles anzeigen
rsnap.sh
#!/bin/sh
BASEDIR=$(dirname $0)
. $BASEDIR/rsnap.conf
PATH=$PATH:/bin:/usr/bin
LOG=$RSNAP_BASE/$LOGFILE
ERROR_COUNT=0
RSNAP_DEST=$RSNAP_BASE/$RSNAP_SET_FORMAT
echo "" >> $LOG
echo "===============================================" >> $LOG
echo "Date: $DATE" >> $LOG
echo "===============================================" >> $LOG
echo "Source: $RSNAP_SOURCE" >> $LOG
echo "Destination Base: $RSNAP_BASE" >> $LOG
echo "Destination: $RSNAP_DEST" >> $LOG
echo "Retention-Keep: $RETENTION_COUNT" >> $LOG
echo "Logfile: $LOG" >> $LOG
echo "===============================================" >> $LOG
### create rsnap-sets ###
EXISTING_SETS=`ls -1 $RSNAP_BASE | grep -v $LOGFILE`
SET_COUNT=`ls -1 $RSNAP_BASE | grep -v $LOGFILE | wc -l`
if [ $SET_COUNT -eq 0 ]; then
echo "--> doing first full-backup" >> $LOG
### speed-up first full-backup with cp instead of rsync ###
## echo "rsync $OPTIONS $RSNAP_SOURCE $RSNAP_DEST" >> $LOG
## rsync $OPTIONS $RSNAP_SOURCE $RSNAP_DEST >> $LOG 2>> $LOG
echo "mkdir -p $RSNAP_DEST" >> $LOG
mkdir -p $RSNAP_DEST >> $LOG 2>> $LOG
echo "cp -aR $RSNAP_SOURCE $RSNAP_DEST" >> $LOG
cp -aR $RSNAP_SOURCE $RSNAP_DEST >> $LOG 2>> $LOG
ERR=$?
ERROR_COUNT=$((ERROR_COUNT+ERR))
echo "Return: $ERR" >> $LOG
else
for SET in $EXISTING_SETS
do
LAST_SET=$SET
done
echo "--> doing incremental backup to $LAST_SET" >> $LOG
echo "rsync $OPTIONS --link-dest=$RSNAP_BASE/$LAST_SET $RSNAP_SOURCE $RSNAP_DEST" >> $LOG
rsync $OPTIONS --link-dest=$RSNAP_BASE/$LAST_SET $RSNAP_SOURCE $RSNAP_DEST >> $LOG 2>> $LOG
ERR=$?
ERROR_COUNT=$((ERROR_COUNT+ERR))
echo "Return: $ERR" >> $LOG
fi
### delete old rsnap-sets ###
echo "===============================================" >> $LOG
echo "delete backup-sets except the last $RETENTION_COUNT" >> $LOG
i=$SET_COUNT
for SET in $EXISTING_SETS
do
if [ $i -le $RETENTION_COUNT ]; then
echo "$SET --> keep" >> $LOG
else
echo "$SET --> delete" >> $LOG
rm -Rf $RSNAP_BASE/$SET >> $LOG 2>> $LOG
ERR=$?
ERROR_COUNT=$((ERROR_COUNT+ERR))
echo "Return: $ERR" >> $LOG
fi
i=$((i-1))
done
echo "===============================================" >> $LOG
echo "ErrorCount: $ERROR_COUNT" >> $LOG
echo "===============================================" >> $LOG
Alles anzeigen
cron-entry:
00 22 * * * /media/<id_der_usb_platte>/Backup/Dreambox/scripts/rsnap.sh > /tmp/rsnap_cron.log 2>&1
Gruß
Ryker