Datensicherung / Backup: Android-Gerät und rsync – gute Kombination

18 Kommentare Autor: Jürgen (jdo)

rsync for Android Logo 150x150Ich bin ja seit Urzeiten ein großen Fan von rsync. Für mich das beste Backup-Tool, unglaublich flexibel und gehört eigentlich zum Inventar einer jeden Linux-Distribution. Im Android-Market hab ich mein geliebtes rsync gefunden. Die Applikation verwendet Binärdateien, die im Download nicht enthalten sind. Allerdings macht es die App dem Anwender leicht. Beim Erststart wird man gefragt, ob die Binärdateien nachgeladen werden sollen. Zusätzlich gibt es dafür eine Schaltfläche im Menü. Die Applikation braucht keinen root-Zugriff, kann von daher auch nur Daten sichern, die auch ohne root lesbar sind. In meinem Fall bin ich am Ordner /sdcard/ interessiert und diesen möchte ich sichern.

Warum rsync? Dieses Tool kopiert nicht einfach stupide Daten auf den Server, sondern macht eine exhte Synchronisation. Dabei wird es in der Regel so genutzt, dass nur veränderte Dateien abgeglichen werden. Bei kleinen Datenmengen ist ein Backup oftmals nur eine Sache von wenigen Sekunden. rsync kann aber weit mehr. Wer sich mit rsync beschäftigen möchte und etwas Zeit hat, sollte sich die Manpage der Software zu Gemüte führen. Du wirst erstaunt sein, zu was rsync in der Lage sein kann.

rsync for Android OI Dateimanager

OI Dateimanager

Wer nicht tippen möchte, sondern die Ordner lieber per Dateimanager aussucht, braucht außerdem noch OI Dateimanager auf dem System. Ist nicht unbedingt notwendig, erleichtert aber das Aussuchen – vor allen Dingen, wenn man nicht die ganze Karte sichern möchte. Ich stelle hier eine Schritt-für-Schritt-Anleitung zur Verfügung, wie man mit dem Schweizer Taschenmesser des Backups (rsync) sein Android-Gerät auf einen Linux-Server sichern kann. Diese Methode kostet Dich übrigens keinen Cent und Du musst für keine App bezahlen.

Linux-Server / -Rechner vorbereiten

rsync for Android Server authorized_keys

.ssh und authorized_keys

Um die Daten auf einen Linux-Rechner via rsync for Android zu sichern, brauche ich dort idealerweise den OpenSSH-Server. Der sollte in eigentlich jedem Repository der bekannten Distributionen vorhanden sein. Unter Ubuntu oder Linux Mint heisst das Paket zum Beispiel openssh-server.

Du kannst die Software entweder über das Software Center, Synaptic oder einfach manuell und via Konsole einspielen. Letzteres ist wohl die schnellste Option: sudo apt-get install openssh-server

Danach musst Du im Home-Verzeichnis des Anwenders nachsehen, ob ein Verzeichnis .ssh vorhanden ist. Falls nicht – erstellen: mkdir .ssh. In diesem legen wir nun eine Datei authorized_keys an, die wir später wieder brauchen, damit wir das Backup ohne Passwort-Eingabe durchführen können: touch authorized_keys

Ebenfalls solltest Du Dich vergewissern, dass rsync auf dem Rechner vorhanden ist. Sollte das nicht der Fall sein, musst Du es nachinstallieren. Für Ubuntu wäre das zum Beispiel apt-get install rsync. Nun lassen wir den Linux-Rechner erst einmal beiseite und widmen uns dem mobilen Gerät.

Update: Wenn es bei der Synchronisation einen Fehler bei Ubuntu 15.04, 15.10, 16.04 und so weiter geben sollte, dann muss am Ende der Datei sshd_config diese zeile eingefügt werden: PubkeyAcceptedKeyTypes=+ssh-dss.

Das liegt an Änderungen in OpenSSH und der Schlüsseltype wird per Standard nicht mehr wird akzeptiert. Danke für den Hinweis in den Kommentaren!

Android-Gerät vorbereiten und Authentifizierung einrichten

Wie bereits erwähnt brauchen wir Die App rsync backup for Android. Die Software kannst Du übrigens auch auf Deutsche Sprache umstellen. Ich hab es in der Beschreibung hier auf Englisch gelassen, weil die App per Standard so ausgeliefert wird.

rsync for Android Binärdateien herunterladen

Binärdateien herunterladen

rsync for Android Schlüsselpaar generieren

Schlüsselpaar generieren

Nach dem ersten Start laden wir die Binärdateien nach, schließlich wollen wir die App auch benutzen. Die Binärdateien sind übrigens nicht enthalten, um die GPL nicht zu verletzen. Bevor Du nun ein Profil erstellst, lass Dir gleich das Schlüsselpaar generieren. Du findest die Schaltfläche im Menü rechts oben unter Generate keys. Ist das geschehen, könntest Du Dir den öffentlichen Schlüssel auch zusenden lassen. Ansonsten liegen privater und öffentlicher Schlüssel unter /sdcard/dss_key und /sdcard/dss_key.pub.

Den Inhalte von dss_key.pub musst Du nun in die Datei authorized_keys auf dem Linux-Rechner einsetzen. Achte darauf, dass es eine einzige Zeile ist, sonst wird die Authentifizierung schief gehen. Ist die Datei authorized_keys leer, könntest Du auch die Datei dss_key.pub in den Ordner ~/.ssh auf den Linux-Rechner kopieren und sie dann einfach in authorized_keys umbenennen.

rsync backup for Android benutzen und Profile erstellen

rsync for Android Profil anlegen

Profil anlegen

Nun ist es an der Zeit, die App selbst zu benutzen und ein Backup-Profil zu erstellen. Angenehm an rsync backup for Android ist, dass Du mehr als ein Profil erstellen kannst. Somit ist es möglich, gezielte Datensicherungen vorzunehmen. Ich habe genug Platz auf meinem Server und will einfach die ganze SD-Karte sichern. Von daher reicht mir ein einziges Profil.

Die entsprechenden Felder füllst Du folgendermaßen aus:

  • Profile Name – Name des individuellen Profils
  • Local file or directory (on this device) – Verzeichnis auf dem Android-Gerät, das gesichert werden soll
  • Username (login) – (SSH)-Anmeldename für den Linux-Server / -Rechner
  • Server (IP or hostname) – IP-Adresse des Servers oder der entsprechende Name
  • Port – in der Regel horcht SSH auf Port 22
  • Dropbear SSH private key (generated by dropbearkey tool) – das ist die bereits angesprochene Datei dss_key, die per Standard unter /sdcard/ liegt
  • Additional rsync options – Hier könntest Du noch weitere rsync-Optionen angeben. Wenn Du zum Beispiel Dateien und Ordner nicht sichern möchtest mit dem –exclude-Parameter (Beispiel hierfür am Ende des Beitrags)

Von den vier Schaltflächen am unteren Ende möchte ich auf die beiden wichtigen eingehen.

  • Delete remote files that are no longer in source directory (rsync’s –delete-after option) – Du könntest –delete-after auch einfach in die rsync-Kommandozeile schreiben, um den selben Effekt zu erzeugen. Es bedeutet, dass auf dem Server alles gelöscht wird, was auf dem zu sichernden Verzeichnis nicht mehr vorhanden ist. Dies geschieht nach dem Synchronisations-Vorgang. Möchtest Du es vor einer Datensicherung ausführen, reicht ein –delete.
  • rsync in reverse direction (from server to this device) – Dies aktiviert dreht die Richtung der Datensicherung um. Es würden also Daten vom Server mit denen auf dem Android-Gerät abgeglichen.

Nun kann ich meine Daten einfach per Knopfdruck sichern und diese landen sicher auf meinem Server. Auch wenn Backup etwas für Feiglinge ist – ich schlafe besser, eines zu haben!

Tipps und Hinweise

Ich hab mich gut 30 Minuten herumgeplagt und wollte herausfinden, warum das Backup nicht funktioniert. Ich bekam immer die Fehlermeldung, dass /sdcard/<komisches Zeichen> nicht existiert. Ich hab <komisches Zeichen> aber nicht eingegeben und konnte es auch nicht finden. Auch ein Löschen der Zeile und nochmaliges Tippen brachte keinen Erfolg. Das scheint wohl ein Bug zu sein. Abhilfe brachte, das zickige Profil einfach zu löschen und die ganze Sache dann noch mal einzugeben. Also neues Profil angelegt, genau die selben Parameter verwendet und dann hat es plötzlich getan. Falls einer in das selbe Problem läuft … neues Profil könnte die Lösung sein.

Sollte ein Fehler bei der Verbindung mit dem Server auftreten, könnte die Firewall einen Strich durch die Rechnung machen. Stelle also sicher, dass bei der hier beschriebenen Methode Verbindungen über Port 22 (SSH) zulässig sind. Das könnte unter Ubuntu mit der uwf zum Beispiel so aussehen: sudo ufw allow 22

–exclude-Funktion einsetzen

Ein Einsatz von –exclude hat im Prinzip zwei Gesichter. Mit –exclude=<Pattern> kann ich einzelne Dateien oder Ordner von der Sicherung ausschließen. Möchte ich mehr als einen Ordner, Dateityp oder was auch immer ausschließen, dann ist diese Methode etwas umständlich. Einfacher ist dann die Benutzung von –exclude-from=<Dateiname>. <Dateiname> könnte zum Beispiel kein_backup.txt heißen und dort hinterlegst Du die Verzeichnisse und Dateien, die Du ausschließen möchtes. Achte darauf, dass in jeder Zeile nur ein Muster steht.

Sagen wir zum Beispiel, dass ich die Verzeichnisse /sdcard/Android/data und /sdcard/opera/cache nicht sichern möchte, würde das in meiner Datei so aussehen:

Android/data

opera/cache

Voraussetzung hierfür ist aber, dass wird /sdcard/ sichern. rsync ist hier etwas eigen bei der Behandlung von Pfaden. Diese werden unter anderem bei der Verwendung der exclude-Funktion nicht absolut, sondern relativ zum Ausgangspfad angegeben. Das Phänomen ist in der Manpage unter dem Kapitel INCLUDE/EXCLUDE PATTERN RULES beschrieben – Stichwort: root of the transfer

Schlusswort / Fazit

Daten von Android auf einen Linux-Rechner zu sichern, ist wirklich nciht schwer und kostet nichts. Mit nur einem Druck auf das entsprechende Profil kann ich nun ein Backup meiner gewünschten Daten realisieren. Man kann das Szenario natürlich weiterspinnen. Solltest Du von außen SSH-Zugriff auf Deinen Linux-Server haben, kannst Du mit entsprechender Internet-Verbindung die Datensicherung anwerfen, wann immer Du möchtest.




 Alle Kommentare als Feed abonnieren

18 Kommentare zu “Datensicherung / Backup: Android-Gerät und rsync – gute Kombination”

  1. Andreas G. says:

    Danke für den Tip. Ich habe für das Backup als Ziel mein QNAP NAS auserkoren. Funktioniert sehr gut.

  2. Toadie says:

    Seit Wochen habe ich rsync auf meinem Handy aber noch nicht getestet.
    Werde mir die Tage deinen Artikel die Tage genau rein ziehen, sparrt bestimmt Zeit.
    Danke schon mal!

  3. Fragen says:

    Fragen:
    Läuft rsync auf dem Android als Root? Ansonsten hat es doch weder Zugang zu den interessanten Datenbanken der Telefongespräche/SMS/MMS noch zu den Daten anderer Apps.
    Der SSH-Private Key wird von rsync auf der SD-Karte des Androids gespeichert? Schrecklicher geht's ja nicht mehr, die SD-Karte ist fat32 formatiert, kennt somit keine Dateiberechtigungen. D.h. jede App kann auf den Key zugreifen, bzw jeder Finder des Handys kann sich den Key von der Karte holen und sich dann auf dem Linux-Server einloggen....

    • jdo says:

      Nein es läuft nicht als root, das steht aber auch so in dem Artikel. Die App kann Dir das Gerät nicht rooten - das musst Du schon selbst machen. rsync kann halt nur auf das zugreifen, was es auch als Nutzer lesen kann. Mit einem gerooteten Gerät hast Du unter /usr/bin sowieso Zugriff auf rsync - da kannst Du Dir dann auch ein kleines Script schreiben, was die selbe Aufgabe erledigt und alles mitsichert.

      Der private Schlüssel wird per Standard auf der SD-Karte gespeichert. Den kannst Du aber hinschieben, wo Du möchtest und dann in der Applikation angeben, wo er liegt.

      "SD-Karte ist fat32 formatiert, kennt somit keine Dateiberechtigungen" ... äh und? Wenn einer Deine SD-Karte findet und in ein Linux-System stopft kann er die Dateiberechtigungen so oder so ändern ... chown ich.ich Datei ... also dass die Datei auf der SD-Karte nicht am besten aufgehoben ist - ok - aber das fat32-Argument ist nichtig ...

      Solltest Du Dein Gerät verlieren und löscht den Public Key auf Deinem Server wieder, hat die Applikation keinen Zugriff mehr darauf. Von daher ist das kein in Stein gemeiselter Generalzugriff.

      Grüße,
      Jürgen

  4. cithrix says:

    Danke für die Anleitung. Funktioniert wunderbar.

  5. Toadie says:

    Habe ein komisches Phänomen.
    Vom Linux Rechner zum Handy klappts ohne Probleme, anders rum wird leider nichts kopiert.
    Rsync bleibt einfach stehen nach dem es die File Liste gesendet hat.

    Gruß
    Toadie

  6. Christian says:

    Der gleiche Fehler tritt auch bei mir auf

  7. fuchur says:

    Hallo zusammen,
    ich sags gleich - bin absoluter Neuling.
    Ich habe eine wahrscheinlich blöde Frage - was gebe ich als Server an im Profil? Ich möchte einfach nur meine Handydaten auf meinen Linux-PC sichern. Habe ich was überlesen?

  8. Christof says:

    Ich möchte mein Smartphone gerne auf meine Qnap sichern. Aber was soll ich mit diesem Dss-Key machen? Ich kann den an der Qnap nirgends eingeben und will das eigentlich auch gar nicht. Da das ganze nur in meinem internen Netzwerk stattfindet, interessiert mich eine Verschlüsselung überhaupt nicht. Leider finde ich im Netz nirgendwo eine Beschreibung, wie ich mit rsync for Android auf eine Qnap sichern kann.

    • jdo says:

      Ich habe leider kein Qnap, sondern nur ein Synology. Ich weiß, dass die beiden ähnlich sind, kann es Dir aber leider nicht genau sagen.

      Wenn Du auf dem Smartphone ein Laufwerk einbinden könntest, dann wäre ebenfalls eine Synchronisation mit rsync möglich.

  9. AcO says:

    Hallo Jürg

    Super Anleitung Danke!
    Wenn ich –exclude=cache
    Eingebe werden alle cache Ordner in sdcard ignoriert oder muss einzeln einstellen.
    DANKE

  10. Thomas says:

    Im PlayStore ist das Tool leider nicht mehr zu finden.
    Weiß jemand zufällig warum?

    Habe es früher oft benutzt und wollte es jetzt wieder nutzen.

  11. Alex says:

    Hier noch ein Hinweis:
    Bei beim Sync auf Linux der neueren Generation, bei mir auf Ubuntu 16.04 muss un der sshd_config der dss-key erlaubt werden, sonst schlägt der Login fehl.

    Folgende Zeile muss unten angefügt werden:

    "PubkeyAcceptedKeyTypes=+ssh-dss" #Ohne Anführungszeichen

    Quelle:https://www.digitalocean.com/community/questions/ssh-refused-sshd-2444-userauth_pubkey-key-type-ssh-dss-not-in-pubkeyacceptedkeytypes-preauth

    An den Autor: Bitte im Artikel aufnehmen! Habe stundenlang nach der Ursache gesucht.

    Gruß Alex

  12. tuxedo says:

    Das mit PubkeyAcceptedKeyTypes=+ssh-dss würde ich nicht machen da dss nicht mehr Stand der Technik ist, siehe dazu auch:
    https://www.gentoo.org/support/news-items/2015-08-13-openssh-weak-keys.html

    Es lassen sich aber problemlos neue (> OpenSSH 7) konforme Schlüssel erzeugen auf einem Linux Host mit dropbearkey -t ecdsa und diese dann auf das Android übertragen (auf einem sicheren Weg natürlich).

    Leider habe ich inzwischen aber eher das Problem das unter Android Oreo (8.1) das Tool gar nicht mehr läuft - wohl wegen noexec mountoptionen der SD-Karte.

    Das Tool rsync4android wird offensichtlich leider seit 2011 nicht mehr weiterentwickelt, und so wie es scheint auch nicht Quellenoffen gelegt, nur der rsync Teil davon 🙁

    • jdo says:

      Ich brauche das Tool seit Ewigkeiten nicht mehr, um ehrlich zu sein. Seitdem die ownCloud und nun Nextcloud App gut funktioniert, reicht mir das völlig. Bilder werden gleich hochgeladen, Kalender und Kontakte synchronisiert. Andere Dateien lade ich manuell hoch, wenn es wirklich sein muss. Rsync nutze ich immer noch viel, aber für Server Backups.

  13. david says:

    Hallo, habt ihr schon eine Lösung oder rsync-Alternative für Android 8 gefunden? Leider hat mein NAS nur smb und ssh, und jedesmal per samba alles zu kopieren (und auf --delete zu verzichten) ist auch nicht das wahre.

    Grüße

    • jdo says:

      Ich habe ehrlich gesagt nicht mehr geguckt, weil sich mein Nutzerverhalten geändert hat. kalender und Kontakte synchronisieren sich mit meiner Nextcloud, E-Mails sind sowieso IMAP und Fotos laden sich automatisch in die Nextcloud hoch. Andere Dateien schiebe ich bei Bedarf ebenfalls in meine Nextcloud.

      Alles andere ist mir nicht wichtig und tut nicht weh, wenn es verloren geht.

      Sorry, dass ich an dieser Stelle nicht weiterhelfen kann.