Vor einiger Zeit habe ich ein kleines Backup Script geschrieben, welches sich des schönen Programmes DAR bedient.
Das Script ist so gedacht, dass ganze Verzeichnisse in .dar Dateien zusammengefasst und verschlüsselt werden. Diese werden zuerst in einem lokalen Verzeichnis zwischengespeichert und nach der Fertigstellung auf einen FTP-Server hochgeladen. Nach erfolgreichem Transfer wird die lokale Datei gelöscht.
Ab dem zweiten Durchlauf, also Start des Scripts, werden „differentielle“ Backups erstellt. Anhand des vorher angelegten „Catalogues“, welcher, im Gegensatz zur eigentlichen Backup Datei, noch lokal im Dateisystem belassen wird, ensteht eine neue Backup Datei die nur noch die Unterschiede zur Vorherigen enthält.
#!/bin/bash KEY="foobar" DIRS="/etc /home/bjoern" BACKUP_DIR="/backup/ftp-raw" BACKUP_TEMP="/backup/temp" BACKUP_CATALOGUES="/backup/catalogues" DATE_STRING=`date +"%Y-%m-%d-%H-%M"` FTP_USER="foo" FTP_PASS="bar" FTP_IP="123.123.123.123" date if ! test -e $BACKUP_DIR;then mkdir -p $BACKUP_DIR fi if ! test -e $BACKUP_TEMP;then mkdir -p $BACKUP_TEMP fi if ! test -e $BACKUP_CATALOGUES;then mkdir -p $BACKUP_CATALOGUES fi for i in $DIRS do echo "Backing up $i" NAME=`echo $i | sed -s "s/\//_/g"` LATEST=`ls $BACKUP_CATALOGUES/*.1.dar 2>/dev/null | grep $NAME | tail -n1| sed -s "s/\.1\.dar//"` if [[ $LATEST ]];then NAME_NEW="$NAME-$DATE_STRING-diff" echo "Latest was $LATEST" dar -K bf:$KEY -R $i -c $BACKUP_TEMP/$NAME_NEW -A $LATEST -X *.log if [[ $? -eq 0 || $? -eq 11 ]];then echo "Backup of $i done." else echo "Backup failed." continue fi dar -J bf:$KEY -C $BACKUP_CATALOGUES/$NAME_NEW-catalogue -A $BACKUP_TEMP/$NAME_NEW if [[ $? -eq 0 || $? -eq 11 ]];then echo "Catalogue created." else continue echo "Catalogue failed." fi lftp ftp://$FTP_USER:$FTP_PASS@$FTP_IP/ -e "put $BACKUP_TEMP/$NAME_NEW.1.dar;exit" if [[ $? -eq 0 ]];then rm -f $BACKUP_TEMP/$NAME_NEW.1.dar fi else NAME_NEW="$NAME-$DATE_STRING" echo "No previous backup found" dar -K bf:$KEY -R $i -c $BACKUP_TEMP/$NAME_NEW -X *.log if [[ $? -eq 0 || $? -eq 11 ]];then echo "Backup of $i done." else echo "Backup failed." continue fi dar -J bf:$KEY -C $BACKUP_CATALOGUES/$NAME_NEW-catalogue -A $BACKUP_TEMP/$NAME_NEW if [[ $? -eq 0 || $? -eq 11 ]];then echo "Catalogue created." else continue echo "Catalogue failed." fi lftp ftp://$FTP_USER:$FTP_PASS@$FTP_IP/ -e "put $BACKUP_TEMP/$NAME_NEW.1.dar;exit" if [[ $? -eq 0 ]];then rm -f $BACKUP_TEMP/$NAME_NEW.1.dar fi fi done |