Wöchentlicher Rsync mit Anzeige in KDE

Seit meinem letzten Beitrag über Backups hat sich mein Setup etwas verändert. Mittlerweile habe ich einen dedizierten Rechner, der sich die zu sichernden Daten von allen anderen Rechnern holt. Die inkrementellen Backups werden durch Rsnapshot sichergestellt.

Bei meinem Laptop ist das leider keine Option, da ich nicht weiß, ob er zur Zeit des Backups überhaupt an ist. Daher habe ich dafür bislang die Standard-Lösung von Ubuntu Déjà Dup verwendet.

Nach dem Update auf Ubuntu 17.10 „Artful Aardvark“ habe ich allerdings auf KDE gewechselt, weil mir der Gnome-Desktop nicht gefällt. Das hat dazu geführt, dass ich extra für Déjà Dup eine ganze Reihe an Abhängigkeiten aus der Gnome-/Unity-Welt hätte behalten müssen. Das wollte ich nicht. Daher habe ich mich zu einem leicht geänderten Setup entschlossen.

Von meinem Laptop aus synchronisiere ich jetzt die zu sichernden Ordner per Rsync in regelmäßigen Abständen auf den Backup-Rechner. Dort macht Rsnapshot ein inkrementelles Backup daraus.

Damit die Synchronisation automatisiert erfolgen kann, habe ich zuerst einmal einen User auf dem Backup-Rechner angelegt, für den ich einen Public-Key-Login vom Laptop aus eingerichtet habe. (Wenn man ein vollständiges Backup mit Rechten braucht, muss hier der root-User auf beiden Systemen verwendet werden.)

Dann habe ich mir ein kleines Skript geschrieben, welches die eigentlichen Backups ausführt. Damit ich auch mitbekomme, dass etwas passiert, wird das Backup in einem Terminal in KDE angezeigt:

#!/bin/sh

# give the user time to login
sleep 30m

# open all windows on DISPLAY :0
export DISPLAY=:0

##Backups
#home
sudo -u  konsole -p "tabtitle=Backup: Home" -e rsync -rlptDxP --info=progress2 --delete --exclude ".cache" --exclude "Downloads/" --exclude "*Trash/" /home/ @:
#music
sudo -u  konsole -p "tabtitle=Backup: Music" -e rsync -rlptDxP --info=progress2 --delete /mnt/hdd/music @:

Zunächst wartet das Skript eine halbe Stunde, dass der User auch wirklich eingeloggt ist (und es somit auch ein Display :0 gibt). Dann wird dem Skript gesagt, dass es alle grafischen Ausgaben auf Display :0 leiten soll, damit der aktuelle User auch sieht, was passiert. Und schließlich wird das eigentliche Backup durchgeführt.

sudo -u sorgt dafür, dass der Befehl als Benutzer ausgeführt wird.
konsole -p „tabtitle=Backup: Home“ -e Öffnet einen Terminal (Konsole) und führt darin alles hinter dem Parameter -e aus.
Der rsync-Befehl übertragt die Daten aus dem home-Odner auf den Server. Die Parameter sorgen dabei dafür, dass rekursiv übertragen wird (-r), dass Symlinks (-l), Rechte (-p), Zeiten (-t), Devices und spezielle Dateien (-D) erhalten bleiben. -x sorgt dafür, dass keine Dateisystemgrenzen überschritten werden und -P zeigt den Fortschritt an und sorgt für den Erhalt von teilübertragenen Dateien bei einem Abbruch.
–info=progress2 macht, dass der Gesamtfortschritt angezeigt wird und nicht der Fortschritt der aktuellen Datei.
–delete führt dazu, dass Dateien, die im Quellordner fehlen auch im Zielordner gelöscht werden.
Und die –exclude-Parameter schließen einzelne Ordner von der Synchronisation aus.

Das Skript habe ich als /etc/cron.weekly/backupscript gespeichert, damit es einmal wöchentlich ausgeführt wird.

Advertisements

Rsnapshot mit externer Festplatte

Rsnapshot scheint für Backups auf Servern gedacht zu sein. Jedenfalls bekommt man ein paar Probleme, wenn der Rechner nicht immer läuft oder gar die Festplatte nicht immer eingeschaltet ist, während es versucht, seine Arbeit zu verrichten. Wenn man z.B. mehrere Cronjobs eingerichtet hat, die täglich, wöchentlich und monatlich Snapshots machen, den Rechner aber beim monatlichen Backup einmal nicht an hat, fällt das monatliche Backup komplett aus.
Dieses Problem lässt sich mit anacron lösen. Anacron führt Jobs eine gewisse Zeit nach dem Systemstart aus.

Allerdings gibt es noch ein weiteres Problem, wenn man seine Backups auf einer externen Festplatte speichern möchte: ist die Festplatte ausgeschaltet, startet Anacron den Job und sieht ihn als ausgeführt an, Rsnapshot macht allerdings nichts (weil man in der config no_create_root aktiviert hat). Das führt im schlimmsten Fall wieder dazu, dass das monatliche Backup ausfällt.

Um das zu verhindern hatte ich ursprünglich für jeden Backup-Job noch einen Warn-Job erstellt, der mir 5min vor dem Backup eine Warnung einblendet, dass ich die Festplatte einschalten sollte. Allerdings passiert es durchaus öfter mal, dass ich genau während dieser 5min nicht auf den Bildschirm gucke. Deshalb habe ich das Problem jetzt richtig™ gelöst und ein kleines Script geschrieben, welches die jeweiligen Snapshots ausführt, wenn der letzte erfolgreiche(!) Snapshot schon mehr als einen Tag, eine Woche oder einen Monat zurück liegt.

Das Skript ist hier auf Github zu finden: https://github.com/Scumpeter/rscron/blob/master/rscron.sh

Wenn das Script als /opt/rscron.sh gespeichert wird (und natürlich executable ist), kann man folgendes in /etc/anacron.conf eintragen:

1    45    rsnapshot.daily    /opt/rscron.sh

Das führt dazu, dass das Skript 45min nach dem Start des Systems (und spätestens täglich) ausgeführt wird.

Es wird vorausgesetzt, dass rsnapshot,  sudo und notify-send installiert und eingerichtet sind. Und dass man einen libnotify-kompatiblen Notification-Daemon auf seinem Desktop laufen hat (KDE, Gnome und XFCE haben so etwas eingebaut).