HowTo: Backup von Android Handy auf eigene Server

In meinen Bestrebungen alles auf eigenen Servern zu haben, habe ich nun auch das Backup meines Nexus 5 Smartphones erfolgreich dorthin ausgelagert. Dafuer habe ich auf dem Smartphone die folgenden drei Dinge gemacht:

  1. Rooten des Smartphones. Ich verweise an dieser Stelle einfach auf die Auto-Root Geschichten von chainfire. Die sind einfach und funktionieren. Man sollte ruhig die paar Euros in die Vollversion von SuperSU investieren, damit man die Rootrechte auch nach einem OTA Update behaelt.
  2. Titanium Backup gekauft und installiert. Ich habe einfach die Standard Zeitplaene uebernommen.
  3. FolderSync gekauft und installiert.

Anschliessend habe ich in FolderSync einen neuen SFTP-Account hinzugefuegt. Dabei habe ich Server-Adresse und Port sowie Benutzernamen und Passwort entsprechend eingegeben. Danach habe ich ein neues Ordnerpaar hinzugefuegt. Dafuer habe ich als Account den SFTP-Account ausgewaehlt und als lokalen Ordner /storage/sdcard0/TitaniumBackup. Die Synchronisations-Art ist „Zu Remote-Ordner“, und es ist eine taegliche, planmaessige Synchronisation.

Der SFTP-Account hat auf Serverseite als Shell /usr/lib/sftp-server und ist Mitglied der Gruppe sftp-allow:

chsh -s /usr/lib/sftp-server androidbackup
addgroup sftp-allow
adduser androidbackup sftp-allow

Die Gruppe sftp-allow ist in der /etc/ssh/sshd_config unter AllowGroups aufgefuehrt:

AllowGroups ssh-allow sftp-allow

Fuer Mitglieder der Gruppe sftp-allow ist in der /etc/ssh/sshd_config weiter folgendes konfiguriert:

Subsystem sftp internal-sftp
Match group sftp-allow
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp
  PasswordAuthentication yes

Auf dem Server habe ich noch das unten stehende Skript laufen, dass alte Backups loescht. Dieses habe ich bewusst so gewaehlt, so habe ich auf dem Smartphone immer das letzte komplette Backup, und auf dem Server kann ich aber den kompletten letzten Monat aufbewahren. Das Skript sieht wie folgt aus:

  • /etc/cron.daily/cleanupOldAndroidBackups
#!/bin/bash
 
KEEP_DAYS=30
BACKUPDIR=/home/android/Backups/
 
if [ "$(find ${BACKUPDIR} -type f -mtime +${KEEP_DAYS})" != "" ]; then
        echo "Cleaning up the following Android Backup files:"
        find ${BACKUPDIR} -type f -mtime +${KEEP_DAYS}
fi
 
find ${BACKUPDIR} -type f -mtime +${KEEP_DAYS} -delete

Das ganze hat seinen ersten Praxistest vor ein paar Tagen auch bestanden als ich ausversehen mein Smartphone zurueckgesetzt habe. Ich habe dann Foldersync und Titanium Backup installiert, Synchronisations-Art in Foldersync andersherum eingerichtet (Zu lokalem Ordner) und mit Titanium Backup alles wieder eingespielt. Hat zu meinem eigenen Erstaunen funktioniert!