Startseite‎ > ‎Linuix‎ > ‎Datensicherung‎ > ‎

Differentielles Backup mit Rsync

Taegliche_sicherung.sh durch einen Cronjob täglich ausführen lassen.

#!/bin/sh

# Der Ordner @eaDir, der vom System automatisch angelegt wird, muss geloescht werden,
# sonst wird der Ordner als der Ordner der letzten Sicherung angesehen
# Das Verzeichnis mit den Sicherungen darf nur die Ordner mit den Tagessicherungen enthalten, keine weiteren Ordner!

rm -r /volume1/sambadir/@eaDir

#Variablen setzen:
SOURCE_PATH="IP_des Quellservers:/volume1/sambadir/"    # Quelle  
DESTINATION="/volume1/sambadir/"                                      # Ziel 
CYCLEDAY="7"                                                                        # Nach  7 tagen wird die jeweils älteste Sicherung gelöscht
LOG="/var/log/backup.log"                                                     # Logdatei 

## Ab hier nichts veraendern ##
NEW_BACKUP_DIR=`date +%F`                                          # Das neue Backup-Verzeichnis, mit Datum als Ordnername
LAST_BACKUP_DIR=`ls -1 $DESTINATION | tail -n 1`          # Der unterste Ordner in der Liste = das zuletzt ausgefuehrte Backup
OLD_BACKUP_DIR=`ls -1 $DESTINATION | head -n 1`         # Der oberste Ordner in der Liste = das älteste Backup
NUM_BACKUP=`ls -1 $DESTINATION | wc -l`                       # Anzahl der Ordner im Zielverzeichnis = Anzahl der Backups

## Die alte Log-Datei loeschen
rm -f $LOG

## Anlegen des neuen backup-ordners
mkdir -p $DESTINATION/$NEW_BACKUP_DIR

## Differentielles Backup mit Abgleich zu dem Backup vom Vortag, bei den Daten die nicht veraendert wurden
#   wird nicht die Datei kopiert, sondern nur ein Symbolischer Link zu der Datei angelegt
rsync -rltcv --delete --copy-unsafe-links --link-dest=$DESTINATION/$LAST_BACKUP_DIR $SOURCE_PATH $DESTINATION/$NEW_BACKUP_DIR >> $LOG

## Check die Anzahl der Backup-Ordner und ggf. loeschen der Aeltesten
if [ "$NUM_BACKUP" -ge "$CYCLEDAY" ]; then
   echo "loeschen des aeltesten Backups mit den Datum - $OLD_BACKUP_DIR" >> $LOG
   rm -rf $DESTINATION/$OLD_BACKUP_DIR
fi


## Verhindern, dass mit einem leeren Ordner abgeglichen wird
if [ `find $DESTINATION/$NEW_BACKUP_DIR | wc -l` -eq 1 ]; then
   rm -rf $DESTINATION/$NEW_BACKUP_DIR
fi


Comments