Sonntag, 11. Januar 2009

versionierte und inkrementelle backups mit rsync

Die Paramter sind weitgehend selbsterklärend... man muss nur darauf achten jedes Verzeichnis mit / abzuschließen.

Die ausgeschlossenen Verzeichnisse müssen auch mit / beginnen und enden, obwohl die angaben relativ zum jeweiligen Quellverzeichnis gesehen werden (fmb ist z.B. ein Verzeichnis in /home/).
Bei den excludes habe ich auch darauf geachtet, welche Verzeichnisse sich häufig ändern und deshalb z.B. .Zattoo wegen den epg-Daten ausgeschlossen.

Als Cron habe ich es nicht eingerichtet, weil es bei mir auf eine externe Platte geht.

Restore
Die Rücksicherung erfolgt durch einfaches Kopieren der Daten aus dem Ordner mit dem entsprechenden Datum.

Backup komprimieren
Gelöschte Dateien können mit dem Schalter --delete auch aus dem Backup gelöscht werden. Zusätzlich kann man mit dem Schalter -b gelöschte Dateien sichern (mit --backup-dir auch in ein bestimmtes Verzeichnis).
Einzelne alte Sicherungen zu verwerfen geht wohl nicht. Man könnte nur die neuste Sicherung behalten, indem man sie umkopiert, dann das Backup Verzeichnis leert und die einzelne Sicherung dann zurück spielt. Macht man das mit mehreren Versionen, multipliziert sich aber wahrscheinlich der Platzbedarf, da diese nach dem zurückkopieren nicht mehr inkrementell zueinander sind.
Keinesfalls dürfen alte Sicherungen einfach gelöscht werden, weil dadurch auch die neueren beschädigt werden. Wenn man glück hat, verbietet das Dateisystem Dateien zu löschen, auf die ein Hardlink existiert.

Rechte
Am einfachsten ist es, den Job als Root zu starten. Durch den Schalter -a bleiben alle Dateieigenschaften wie owner, group, permissions und datum erhalten.

Hinweis:
das script ist nicht für Ziellaufwerke mit FAT oder NTFS geeignet, weil FAT Hardlinks nicht unterstützt und das Script bzw. GNU rsync nicht für NTFS getestet ist.
Es gibt allerdings ein Script vom heise Verlag, das unter Windows läuft und mit NTFS umgehen kann, hier die Anleitung dazu:
http://alfafox.info/backup-auf-ntfs-festplatte-mit-rsync.htm
Die Datei rsync.exe ist von 2006, evt. kann man aus einer cygwin Installation eine neuere Version extrahieren.


#!/bin/bash
# Backupscript /root/backup.sh
# Einfaches Backup-Script zur inkrementellen Sicherung mit "rsync".


# Pfade fuer Quellen und Ziel (Pfade mit "/" beenden)
QUELLEN="/home/ /root/ /etc/ /boot/ /usr/local/"
ZIEL="/media/externe/backup/rsync/"

# RSYNC-Parameter (optional)
RSYNC="--delete -b \
--exclude=/fmb/.gvfs/ \
--exclude=/fmb/.tvbrowser/ \
--exclude=/fmb/.Zattoo/ \
--exclude=/fmb/data/public/ \
--exclude=/fmb/.cache/ \
--exclude=/fmb/data/tmp/ \
--exclude=/fmb/data/download/ \
--exclude=/fmb/data/virtualbox/"

# SSH-Parameter (optional)
#SSHUSER="user"
#SSHHOST="rechner"

### ab hier bitte keine Aenderungen mehr vornehmen ###

# Letztes verfügbares Backup in der Form $ZIEL/TTMMJJ
LASTBACKUP=`/bin/ls -d $ZIEL[[:digit:]]* | /usr/bin/sort -r | /usr/bin/head -1`

# Berechnung Tagesdatum
DATUM=`/bin/date +%y%m%d`

# Anlegen Logdatei /root/backup.log
`/bin/date > /root/rsync.log`

for QUELLE in `/bin/echo $QUELLEN`
do

# Anlegen Tagesordner $ZIEL/JJMMTT
`/bin/mkdir -p $ZIEL$DATUM$QUELLE `


if [ "$LASTBACKUP" ]; then
INC="--link-dest=$LASTBACKUP$QUELLE"
fi

if [ "$SSHUSER" ] && [ "$SSHHOST" ]; then
REMOTEQUELLE="$SSHUSER@$SSHHOST:$QUELLE"
else
REMOTEQUELLE=$QUELLE
fi

# Erzeugen inkrementelles Backup
`echo rsync -av $RSYNC $INC $REMOTEQUELLE $ZIEL$DATUM$QUELLE >> /root/rsync.log`
`/usr/bin/rsync -av $RSYNC $INC $REMOTEQUELLE $ZIEL$DATUM$QUELLE >> /root/rsync.log`

done

Keine Kommentare: