einfacher Backup mit rsync

Meine Backups habe ich früher immer mit backup2l gemacht. Bis ich mal einen Restore brauchte und irgendwie backup2l Zicken gemacht hat. Auch von Platzverbrauch und Geschwindigkeit ist backup2l nicht gut - hier wird gezippt und getart, inkrementiert und was weiß ich.

UPDATE: ich habe das ganze auch unter Windows 8.1 probiert und bin daran verzweifelt. Die Verzeichnisse Desktop, Videos, Bilder usw wurden einfach ignoriert. Keine Ahnung. Als Alternative kann ich hier nur das Freeware Programm SyncBackFree nennen. Außerdem war das zurückspielen des Backups (von Win7) nur mit Hürden möglich. Windows 8.1 wollte mich einfach nicht an die Dateien ranlassen.

keine History

Was ich immer gesucht habe ist ein einfacher und vor allem auch schneller Backup. Ein History um eine Datei wiederherzustellen, die ich vor 4 Wochen gelöscht habe, brauche ich nicht, dafür gibt es git.

Mit rsync (für Windows: rsync.zip) lässt sich dies erreichen. In einfachster Variante sieht das dann so aus:

rsync -a --progress --delete /von /nach

Das bedeutet: alles von /von wird nach /nach gesichert. 1:1 ohne zippen oder ähnliches. Und Dateien, die nicht mehr existieren, werden auch im Backup gelöscht.

Im richtigen Leben empfehle ich ein etwas komplexeres Script. Hier meins. Es sichert von / auf ein Verzeichnis auf einer externe Festplatte (/media/ich/Backups/). Ich glaube es ist soweit selbsterklärend.

#!/bin/bash

PROG=$( basename "$0" )

# temp files
INCLUDE="/tmp/$PROG-include"
EXCLUDE="/tmp/$PROG-exclude"
ERRORS="/tmp/$PROG-errors"

DESTINATION="/media/ich/Backups/"

if [ ! -d "$DESTINATION" ]; then
echo "$DESTINATION does not exist - aborting ..."
exit 1
fi

# gather some infos - pre backup
mkdir -p /root/backup/
dpkg --get-selections > /root/backup/dpkg.get-selections

# included / excluded paths
echo "# includes
/home/
/etc/
/usr/local/
/var/
/root/
" > $INCLUDE

echo "# excludes
/bin/
/cdrom/
/dev/
/lib/
/lib32/
/lib64/
/lost+found/
/media/
/mnt/
/opt/
/proc/
/run/
/sbin/
/srv/
/sys/
/tmp/
/usr/
/home/ich/.local/share/Trash/
/home/ich/.mldonkey/temp/
/home/ich/.cache/
" > $EXCLUDE

# do backup to external drive
rsync -a --progress --delete --delete-excluded / --include-from="$INCLUDE" --exclude-from="$EXCLUDE" "$DESTINATION" 2> "$ERRORS"

if [ -f "$ERRORS" -a $( cat "$ERRORS" | wc -l ) -ne 0 ]; then
echo "##### vvv ERRORS vvv #####"
cat "$ERRORS"
echo "##### ^^^ ERRORS ^^^ #####"
else
echo "#####   no  errors   #####"
fi

echo -n "umount $DESTINATION (y/n)? "
read -n 1 taste
echo
if [ $taste == "y" ]; then
echo "unmounting ..."
umount "$DESTINATION"
fi