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).

Android Notifier

Android Notifier ist eine App für Android, die es ermöglicht, über verschiedene Ereignisse (z.B. Anrufe oder SMS) an seinem PC (oder Mac) informiert zu werden. Das ist besonders praktisch, wenn man sein Telefon in einem Raum am Ladekabel hängen hat (was bei meinem Akku-Wunder eigentlich ständig der Fall ist) und in einem anderen Raum am Rechner sitzt.

Zunächst braucht man die App auf seinem Telefon:

Android Notifier im Market

Und dann die dazugehörige Desktop-Anwendung auf seinem Linux– oder Windows-PC bzw. auf seinem Mac.

Diese startet man dann (sowohl die App auf dem Telefon, als auch die Anwendung auf dem Desktop) und geht zunächst in die Settings. Dort ist eigentlich das meiste selbsterklärend. Was man nicht versteht braucht man wahrscheinlich auch nicht ändern.

Man kann auch auswählen, worüber man sich benachrichtigen lassen möchte. Zur Auswahl stehen: Klingeln, SMS, MMS, Batteriestatus, Voicemail, Ping und „Third-party“.

Third-party Apps müssen allerdings schon explizit Android Notifier unterstützen. Bislang sind mir keine bekannt, die das auch machen.

Nachrichten verschlüsseln

Ich würde jedoch empfehlen, die Notifications zu verschlüsseln. Weil sie sonst jeder im Netzwerk mitlesen kann (und zwar in jedem Wlan, in dem man mit seinem Telefon ist). Es ist auch nicht allzu schwer, die Verschlüsselung zu aktivieren.

Im Telefon geht man dazu in den Einstellungen auf „Security“ und macht einen Haken bei „Encrypt notifications“ und tippt danach auf „Passphrase“. Darauf poppt ein Fenster auf, in das man den Schlüssel eintragen kann. Das kann eine beliebige Zeichenkette sein. Man sollte sie sich allerdings merken, weil man sie gleich noch am Computer eintragen muss.

Am Rechner macht man quasi das gleiche: In den Einstellungen einen Haken bei „Decrypt notifications“ machen und bei „Passphrase“ den Schlüssel von eben eintragen.

In den Einstellungen am Telefon kann man jetzt noch „Send test notification“ wählen um das Ganze zu testen.