Backup mit rsync

Dass Backups wichtig sind ist keine Frage.
Die Frage die sich nur immer stellt ist: Wie?

Nachdem in einem der letzten Beiträge schon der SSH-Schlüsseltausch erklärt wurde, können wir hier auch noch gleich drauf aufbauen.
Und zwar nutzen wir das Tool ‚rsync‘ welches alles über das Linux-SSH Protokoll macht.
Der Vorteil ist dass wir damit gleich alles schön verschlüsselt haben, nicht wie z.B. bei (normalem) FTP, außerdem nutzen wir den bei quasi allen Linux-Systemen vorhandenen SSH-Dienst. Das installieren zusätzlicher Software ist also nicht nötig. Als kleines Sahnetüpfelchen obendrauf können wir auch über Schlüssel authentifizieren (siehe Link oben) und brauchen somit noch nichtmal ein Passwort.

In dem folgenden Beispiel kopieren wir unseren aktuellen Server komplett auf den Server ‚pi.de‘ und zwar in den Home-Ordner des Users ‚piuser‘ und dort in einen Unterordner ’serverbackup‘.
Und so sieht das Kommando aus:

rsync --delete --stats --progress -av -e 'ssh -p 123' --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found} / piuser@pi.de:/serverbackup

Und jetzt dröseln wir auf was wir hier eigentlich tun:

--delete:

Dateien die in der Quelle nicht mehr vorhanden sind sollen beim Ziel auch gelöscht werden (!)

--stats:

Zeigt am Ende des Ablaufs Statistiken an was getan wurde

--progress:

Zeigt während es Ablaufs den Fortschritt an

-a:

   -a fasst folgende Optionen zusammen:
       -r kopiert Unterverzeichnisse
       -l kopiert symbolische Links
       -p behält Rechte der Quelldatei bei
       -t behält Zeiten der Quelldatei bei,
       -g behält Gruppenrechte der Quelldatei bei
       -o behält Besitzrechte der Quelldatei bei (nur root)
       -D behält Gerätedateien der Quelldatei bei (nur root)

v:

Ausführliche Ausgabe was rsync tut

-e 'ssh -p 123':

Zielshell ist ssh mit Port 123


--exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found}:

Die angegebenen Ordner werden ignoriert.
/dev sind Systemdevices
/proc sind aktuell laufende Prozesse
/sys ebenso wie /prov Schnittstellen zum Kernel
/tmp ist nur temporär, wird evtl. beim Systemstart sowieso geleert
/run Zustand des Systems
/mnt + /media werden verwendet um andere Filesysteme zu mounten (z.B. CD-Roms)
/lost+found ist Dateisystemabhängig

/:

Alle Dateien ab /
(einschließlich versteckter Dateien und Ordner die mit '.' anfangen. Steht hier ein /* werden diese im Hauptverzeichnis NICHT kopiert)

Der erste Aufruf dauert natürlich ein ganz schönes Stück – aber danach geht jeder weitere Aufruf schnell da nur noch Dateien übertragen werden die sich geändert haben.

Ein Nachteil dieser Methode ist natürlich dass der Besitzer der Dateien auf dem Zielsystem komplett der User ‚piuser‘ ist. Mit einem (zugegebenermaßen etwas schmutzigen!) Workaround kann man die Dateirechte beibehalten. Die Dateien haben dann auf dem Zielsystem die richtigen UserIDs – auch wenn es die User auf dem Zielsystem nicht gibt.
Der Nachteil der Methode: Der Zieluser muss mittels ’sudo‘ Superuser-Rechte bekommen können. Damit schafft man natürlich Sicherheitslücken…

So, und wie geht es nun?
Aus

rsync --delete --stats --progress -av -e 'ssh -p 123' --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found} / piuser@pi.de:/serverbackup

wird:

rsync --delete --stats --progress -av -e 'ssh -p 123' --rsync-path="sudo rsync" --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found} / piuser@pi.de:/serverbackup

Damit wird das Ziel-rsync als Super-User ausgeführt.
Der Zieluser muss dazu in der Datei ‚/etc/sudoers‚ Superuser-Rechte bekommen können. Es reicht diese nur für das Programm ‚rsync‘ zu geben indem man folgende Zeile einfügt:

piuser ALL=NOPASSWD:/usr/bin/rsync

Und als letztes Schmankerl: rsync kann auch die aktuelle Sicherung mit einer alten Sicherung vergleichen und bei Dateien die sich nicht verändert haben einfach einen Hard-Link auf die vorherige Datei setzen.
Somit hat man alles komplett gesichert, und das mehrmals, obwohl nicht veränderte Dateien nur einmal wirklich existieren. Dazu muss man den Ordner der vorherigen Sicherung mit dem Parameter ‚–link-dest=‚ angeben.

Und bei Ubuntuusers gibts noch ein paar Details zu: rsync

 

 


Kommentare

5 Antworten zu „Backup mit rsync“

  1. gut erklärt, danke!

    1. Thomas

      Danke auch 🙂

  2. Werner

    wie würde eine saubere ssh Lösung mit dem rsync dämon aussehen ?
    Dieser hätte große Geschwindikeitsvorteile beim Vergleich aller Files – richtig ?

    1. Thomas

      Hallo Werner,

      rsync ist ein normales Programm und kein Daemon. Was genau willst du denn erreichen?

      Thomas

  3. Frank

    was hier interessant wäre ist wie man einen so erstellen rsync Backup restored wenn z.B mal die SD Karte abraucht. Ganz so einfach geht das nämlich nicht, denn der Raspi bootet anschließend nicht mehr. Meine SD war defekt und ich wollte aus der wie oben beschriebenen rsync Sicherung den kompletten pi wieder herstellen. Hatte mir auf der neuen SD Karte dazu eine vfat Partition und eine ext4 erstellt, nach /mnt gemountet und per rsync restored. Nichts funktionierte mehr, nicht mal booten wollte er.

    Ich denke man muss erst einmal ein minimal Basissystem aufsetzten was schwierig wird, da es bis zum rsync Backup ja schon einige Updates gab. Dann das Basissytstem z.B nach /mnt mounten und per rsync die /boot und /root Sicherung restoren damit man die excludeten Verzeichnisse /proc /var /sys hat. Problem dabei ist das man nicht genau das gleiche Basissytem bekommt wie das in der Sicherung und der pi danach mit den unterschiedlichen Kernelmodulen (Basis Image vs. rsync Sicherung ) Probleme bekommt. Ich musste jedenfalls alles neu installieren trotz Backup. Ein paar Konfigdateien konnte ich übernehmen aber das wars dann auch. Fazit für mich. rsync eignet sich mit dem pi nur für Dateien zu sichern aber nicht um einen kompletten pi daraus wieder herzustellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload CAPTCHA.