4 min read

iCloud und Google Fotos in der eigenen Nextcloud

💡
Ausgangszustand: Bilder sind in Google Fotos oder Apple Fotos gespeichert.
Zielzustand: Bilder in der eigenen Nextcloud + separates Backup

Passend zum digitalen Unabhängigkeitstag habe ich mich mal meinen Fotos gewidmet. Diese waren bisher sehr verteilt in Google Fotos und per automatischem Upload in der iCloud. Dieses Setup hat aber einige Nachteile:

  1. Abokosten - iCloud und Google Fotos sind kostenpflichtig ab bestimmten Speichermengen. Da ich beides brauchte, hatte ich doppelte Abokosten.
  2. Internetverbindung notwendig - Um meine Bilder (in voller Qualität) zu sehen, brauchte ich zwangsläufig eine funktionierende Internetverbindung.
  3. 3-2-1-Backup-Regel (3 Backups, an zwei verschiedenen Orten) basiert hier auf dem Vertrauen, dass den Dienstleistern entgegengebracht wird. Wenn mein Konto kompromittiert wird und die Bilder gelöscht werden, sind meine Bilder weg.

Eine eigene Nextcloud-Instanz nutze ich schon. Lange Zeit habe ich sie selber betrieben. Mittlerweile ist es eine managed-Variante bei Hetzner.[1]

Mein Vorgehen sah wie folgt aus:
Darstellung des Workflows für den Export der Bilder zur Nextcloud

Bilder zusammenführen

Bilder aus der iCloud

Bei Apple besteht die Möglichkeit, über den Datenschutz https://privacy.apple.com/account die Bilder in eine andere Cloud zu exportieren. Leider nicht direkt an einen eigenen WebDAV Speicherort, aber dafür zu Google Fotos. Dieser Vorgang dauert leider, abhängig von der Datenmenge, zwischen 3 und 10 Tagen. Alternativ kann man auch ein Apple Gerät mit verbundener Fotobibliothek und Nextcloud-App nutzen und Bilder darüber in die Nextcloud laden. Ich habe dabei aber die Erfahrung gemacht, dass das nicht 100%ig funktioniert und ab und an zu Fehlern führt. Daher habe ich gewartet.

Bilder aus Google Fotos

Die Bilder von Google Fotos können einfach per Google Takeout: https://takeout.google.com/ in die Google Drive geladen oder per Download-Link direkt auf das Gerät heruntergeladen werden.
Ich habe die Daten in Google Drive geladen. Diese findet man dann unter "Meine Ablage" im Ordner "Takeout".

Zwischenschritt über den eigenen Server

Ich wollte die Daten nicht in Archivformaten einzeln herunterladen. Stattdessen, habe ich meinen Server mit einem zusätzlichen Volume ausgestattet, was etwa die 2,5fache Größe des Takeout-Ordners hat. Bei 100 GB hätte ich also 250 GB für das Volume gewählt. Damit hat man genug Platz um die komprimierten Daten auf dem Server zu entpacken. Um die Bilder auf den Server zu laden, habe ich rclone genutzt.

Einrichtung rclone

Das Tool rclone kann Daten von Google Drive und WebDAV-Speichern verarbeiten, ist also gut geeignet für den Anwendungsfall. Außerdem prüft es beim Kopieren auf Duplikate anhand von MD5 Hash, Dateigröße und Änderungszeitpunkt. Zur Einrichtung sind folgende Schritte notwendig

sudo apt update && sudo apt install rclone
rclone config

Für die Google Drive kann ich diese Anleitung empfehlen: https://rclone.org/drive/
Für Nextcloud[2] muss zunächst ein neues App-Passwort erstellt werden. Dafür über das Profilbild → Einstellungen → Sicherheit → Geräte und Sitzungen → beliebigen App-Namen eingeben und auf "Neues App Passwort erstellen" klicken. Das Passwort sichern!
Anschließend brauchen wir noch den Link für WebDAV. Dafür auf "Dateien" → Dateien-Einstellungen → WebDAV → Link kopieren. Format sollte sein: https://example.com/remote.php/dav/files/USERNAME

Auf dem Server kann dann die rclone Konfiguration fortgesetzt werden:

n/s/q> n
name> nextcloud
Storage> webdav
vendor> 2 #(Nextcloud)
user> benutzername_aus_nextcloud
Password> y
password: app_passwort_eingeben
bearer_token> leer lassen
y/e/d> y

Kopieren der Daten

Um die Daten dann von der Google Drive auf den Server zu kopieren, reichen folgende Befehle:

cd /mnt/HC_Volume_123456789 #Die Zahl ist ein Identifier, der variiert
rclone copy "google:Takeout" ./ -P

Zunächst wechsle ich dabei in das neue Volume für meinen Server. Anschließend wird in diesen Pfad alles aus dem Ordner Takeout der Google Drive kopiert.
Wenn bei der Einrichtung von rclone der Name gdrive übernommen wurde, muss hier statt "google:Takeout" der Term "gdrive:Takeout" genutzt werden. Ich habe hier realistische Geschwindigkeiten von 120 - 180 MiB/s erreicht.
Alternativ kann man hier auch alle Daten direkt auf den eigenen Homeserver/NAS oder auch den Arbeitsplatz-Rechner ziehen. Durch das Windows Subsystem for Linux (WSL2) kann man rclone auch gut auf Windows-Rechnern nutzen. Der Ablauf wäre dort identisch. Anschließend kann man Immich mit Docker lokal aufsetzen und per Immich CLI die Bilder in die Bibliothek schieben. Für mich ist der charmante Vorteil dabei, dass die Bilder dadurch in ein einheitliches Namensformat gebracht werden können.

Daten entpacken und in die Nextcloud verschieben

Entpacken

Damit man die Bilder sehen kann, müssen diese zunächst entpackt werden. Das geht theoretisch auch in Nextcloud direkt, ich bevorzuge das aber hier direkt. Um die zahlreichen .zip-Archivdateien zu entpacken habe ich das Tool unzip installiert und anschließend alle Daten entpackt:

mkdir entpackt
unzip "*.zip" -d /mnt/HC_Volume_123456789/entpackt

Kopieren zur Nextcloud

Um die Daten in die Nextcloud zu kopieren habe ich zunächst den Ordner "Google Fotos" in "GoogleFotos" umbenannt:

cd entpackt/Takeout
mv Google\ Fotos/ GoogleFotos
rclone copy /mnt/HC_Volume_123456789/entpackt/Takeout/GoogleFotos "nextcloud:belieberPfad" -P

Der Vorgang dauert leider relativ lange, da die Daten noch in der Nextcloud-Datenbank aufgenommen werden müssen. Außerdem werden die MD5-Hash-Werte für jede Datei berechnet und verglichen. Dies kann einige Stunden dauern.

Daten herunterladen und Offline sichern

Daten herunterladen

Zum Herunterladen habe ich meinen Windows-Rechner genommen und dort das Windows Subsystem for Linux installiert. Anschließend habe ich mir aus dem Microsoft Appstore "Ubuntu 24.04" heruntergeladen und dort rclone erneut für meine Nextcloud eingerichtet.
Anschließend werden die Daten über den folgenden Befehl nach C:\Users\benutzername\Fotos kopiert und damit heruntergeladen.

rclone copy "nextcloud:beliebigerPfad" /mnt/c/Users/benutzername/Fotos -P

Theoretisch könnte man hier schon direkt auf eine externe Festplatte sichern. Ich wollte das aber lieber über einen Zwischenschritt umsetzen.

Daten sichern - "Backup"

Um die Daten zu sichern habe ich mir eine externe Festplatte genommen und die Daten dann per Windows Explorer 1:1 kopiert.

Zukünftige Daten sichern

Auf meinem Handy ist jetzt die Nextcloud-App installiert und sichert automatisch alle Bilder in die Nextcloud. Die managed Nextcloud macht tägliche Backups (ja, echte Backups!). In regelmäßigen Abständen kann ich zudem per rclone copy die Daten von Nextcloud auf meinen PC herunterladen. Aufgrund der Funktionsweise von rclone wird hier nur die Differenz heruntergeladen - ist also gut nutzbar.

Offene TODOs

Perspektivisch möchte ich im Homelab noch ein eigenes NAS mit der kostenlosen Software Immich betreiben. Dort sollen Daten dann noch einfacher gesichert werden. Auch dafür gibt es Smartphone-Apps, sodass alle Bilder an mindestens zwei Orten sind, mit mehreren Backups.
Außerdem müssen natürlich noch die ggf. vorhandenen Abos bei Google und Apple gekündigt oder in der Größe reduziert werden. Sonst wäre das ja ein n+1.


  1. Nextcloud Storage Share von Hetzner ↩︎

  2. Alternative Anleitung für rclone WebDAV Einrichtung ↩︎