Backup von einem Server auf den Privatrechner
Da ich gerne zusätzlich ein Backup von meinem Server auf meinem Rechner mache und nicht nur auf dem Rechenzentrum sichere habe ich mir ein Script ausgedacht, was folgendes erfüllt:
- Das Backup soll jederzeit starten können, also unabhängig davon, wann ich den Rechner eingeschaltet habe
- maximal alle 24 Stunden wird ein Backup gemacht
- Es sollen nur geänderte Dateien kopiert werden
- /tmp, /var/tmp usw. soll nicht gesichert werden
- Die Geschwindigkeit soll gedrosselt sein, damit es im Hintergrund laufen kann
- Alte Backup-stände sollen erhalten bleiben und nur manuell gelöscht werden
Das Script das das alles erfüllt ist erstaunlich kurz, dank rsync:
#!/bin/sh
BACKUPDIR=/path/to/backup
LOCKFILE=/path/to/.backup.lock
BACKUPCUR=$BACKUPDIR/current
BACKUPDATE=$BACKUPDIR/`date +"%d.%m.%Y_%H-%M-%S"`
EXCLUDE="--exclude=/tmp \
--exclude=/var/tmp \
--exclude=/usr/portage \
--exclude=/usr/src \
--exclude=/proc \
--exclude=/list+found \
--exclude=/var/lib/clamav/ \
--exclude=/var/log/"MAXSECSOLD=$((24*60*60))
KBLIMIT=200if [ "$1" == "--force" ] ; then
echo -n
elif ! [ "$(( $(date +"%s") - $(stat -c "%Y" $LOCKFILE) ))" -gt "$MAXSECSOLD" ];
then
exit 0;
fi
flock -n $LOCKFILE nice rsync -avz --delete --delete-excluded --bwlimit=$KBLIMIT -e ssh root@abma.de:/ $BACKUPCUR $EXCLUDE --backup --backup-dir=$BACKUPDATE
touch $LOCKFILE
touch $BACKUPCUR
Kurz zur Erklärung:
es wird überprüft, ob der Parameter --force angegeben wurde, wenn ja wird das Backup ausgeführt. Wenn nicht wird überprüft die letzte Änderung von LOCKFILE weniger als MAXSECSOLD Sekunden her ist, wenn ja wird das Script beendet.
Dann wird das lockfile erstellt, damit das script / der rsync nur einmal gestartet wird und der rsync mit niedriger Priorität gestartet.
Nach dem Backup wird das Änderungsdatum des Lockfile und des Backup-Verzeichnisses auf die Aktuelle Zeit gesetzt.
In BACKUPDIR/current befindet sich das aktuellste Backup, in BACKUPDIR/uhrzeit sind die Dateien, die seit dem letzten Backup geändert worden sind.
Der einzig große Nachteil ist: Sollte man das Backup doch einmal benötigen, muss man über die vermutlich langsame Internetanbindung die Dateien hochladen, was u.u. sehr Lange dauern kann, von daher ist noch zusätzlich ein Backup beim Hoster zu empfehlen.
Noch zu empfehlen wäre, wenn eine Datenbank mit gesichert wird, diese zu beenden und dann dieses Verzeichnis extra zu kopieren, oder einen sql-dump zu machen.
Das Script liegt im Verzeichnis /etc/cron.hourly/.