Backup mit rsync

Im einfachsten Fall legt der Benutzer diese beiden Dateien auf seinen Desktop und macht backup-rsync ausführbar. Diese Datei enthält ein paar Zeilen, die man Konfigurieren muss: Wo ist Die Backup-Festplatte gemountet? Welches Verzeichnis soll gesichert werden? backup-rsync:

download

#!/bin/bash
#
# Backup aller Dateien eines vorgegebenen Verzeichnisses 
# auf eine externe Festplatte, die am Zielverzeichnis 
# gemountet sein sollte. 
# Als Dateisystem auf dem Ziel ist XFS die erste Wahl.
#
# Aufruf: backup-rsync
#
#-------- Start Konfiguration --------------
#
#  Welches Verzeichnis soll gesichert werden?
# default: $HOME  also das komplette Benutzerverzeichnis des aufrufenden Benutzers
# Was immer man hier einträgt, die Dateien in diesem Verzeichnis müssen vom
# aufrufenden Benutzer lesbar sein! Um /home zu sichern müsste dieses Script also
# per sudo oder aus einer root-shell aufgerufen werden.
QUELLE=$HOME/a51
#  Wohin ist das Backupmedium gemountet? (externe Festplatte)
MOUNTP=/media/flash
# Soll der Plattenplatz vorher geprüft werden?  <true|false>
# das kann sehr lange dauern und prüft ob ein Vollbackup passen würde
# Wenn man sicher ist, dass genug platz da ist kann man diese Variable 
# auch auf  false  setzen.
PRUEFE=false
#
#-----------ENDE KONFIGURATION --------------------
#
#  Liste von Dateimustern, die nicht gesichert werden sollen
EXCLUDES=backup-rsync-exclude
ZIEL=$MOUNTP/$(date -Is)
LETZTE=$MOUNTP/letzte
#
check-space() {
echo "prüfe den benütigten Plattenplatz...."
DFREE=$(df $MOUNTP/ |tail -1|awk '{ print $4 }')
DREQ=$(du -s $QUELLE/ |awk '{ print $1 }')
if [ $DREQ -ge $DFREE ]
then
    echo "Leider ist nur noch $DFREE auf $MOUNTP platz, benötigt würden $DREQ. ENDE"
    exit 1
else echo "Das Vollbackup würde $DREQ K benötigen, es sind $DFREE K auf $MOUNTP frei."
fi
}
##############################################################
if $PRUEFE
then check-space
fi
# Los geht`s: rsync zieht ein Vollbackup
echo "Starte rsync backup von $QUELLE nach $MOUNTP ($DREQ Gesamtplatz)..."
rsync  -avHz --link-dest=$LETZTE --numeric-ids --delete --delete-excluded  \
        --exclude-from="$EXCLUDES"   $QUELLE $ZIEL
# Rückgabewert prüfen.
# 0 = fehlerfrei, # 24 ist harmlos; tritt auf, wenn während der Laufzeit
# von rsync noch Dateien verändert oder gelöscht wurden.
# Alles andere ist fatal -- siehe man (1) rsync
if ! [ $? = 24 -o $? = 0 ] ; then
	echo "FEHLER: rsync wurde mit Fehlern beendet!"
#	logger "Fatal: rsync finished $SERVER with errors!"
fi

echo "erzeuge Hardlinks auf dieses Backup neu"
rm -f $LETZTE
ln -s $ZIEL $LETZTE

# Fertig!
echo "Fertig rsync backup ..."

# Sicher ist sicher...
sync


In einer weiteren Datei kann man Dateimuster eintragen, die von der Sicherung ausgeschlossen werden sollen. Diese Datei kann auch leer sein, sollte aber nicht fehlen. backup-excludes:

download

# rsync backup exclude
# Den Papierkorb braucht man nicht wirklich sichern
.local/share/Trash/*
# Die Kleinbilder (Thumbnails) sind ersetzbar...
.thumbnails/*
# wollte man / sichern sollte man in jedem Fall folgendes ausnehmen
/proc/*
/sys/
# eventuell auch 
/tmp/*
/lost+found
/media/*
/mnt/*

Das Backup bekommt jedes Mal ein Unterverzeichnis mit dem Zeitstempel als Verzeichnisnamen. In jedem Verzeichnis befindet sich ein kompletter Snapshot zu diesem Zeitpunkt. Die Geänderten Dateien sind dann normale Dateien, die ungeänderten sind allerdings Hardlinks auf die älteren, ungeänderten Dateien. Die Vorteile dieses Verfahrens sind:

rsync an sich kann noch viel mehr. Man könnte das ganze auch über Netzwerke tranportieren, sogar über das internet denn es beinhaltet ssh-Verschlüsselung.

Im Vergleich zu rdiff-backup benötigt dieses Verfahren etwas mehr Speicherplatz. Das Suchen oder eine Rücksicherung einer bestimmten Version einer Datei aus dem Backup wird bei rdiff-backup aber schwierig ohne das Programmpaket rdiff-backup. Bei diesem Verfahren genügen Linux Basismittel: Kommandozeile oder Ein Dateibrowser. rsync-backup setzt keine kompression für das Backup ein. Das ist für die meisten modernen Dateitypen keine Einschränkung, da diese oft bereits komprimiert sind. Eine Verschlüsselung des Backup kann man auch mit Boardmitteln machen, es böte sich an auf Dateisystemebene zu verschlüsseln.