RalfJoos IT-Systemadministrator
Projekt · August 2026

Nextcloud selbst betrieben, Sicherung zweimal zurückgespielt

Eine Datensicherung, die nie zurückgespielt wurde, ist eine Vermutung. Diese hier wurde zweimal vollständig wiederhergestellt: einmal als Test, einmal mit 1.295 echten Fotos, Schritt für Schritt nach der schriftlichen Anleitung. Am Ende stimmten 1.340 Dateien, ohne einen einzigen Fehler.

Docker Compose Nextcloud 31 PostgreSQL Redis VMware
2×vollständig zurückgespielt
1.340Dateien, 0 Fehler
5 Fehlernur durch den Test gefunden

Ausgangslage: ein fertiges Paket, das nicht gelaufen wäre

Am Anfang stand ein fertiges Paket aus einem KI-Chat: Skripte, Docker-Datei, Sicherungsstrategie, gedacht für meinen Raspberry Pi. Bevor ich etwas davon ausgeführt habe, habe ich jede Annahme am echten Gerät nachgesehen. Fünf Voraussetzungen stimmten nicht, drei davon standen im Paket als „hast du bereits“ abgehakt: Docker war nicht installiert, es gab keine SD-Karte, und die Ports 80 und 443 belegte schon der vorhandene Webserver.

Dazu drei Konstruktionsfehler in der Docker-Datei. Die gewählte Nextcloud-Variante bringt keinen Webserver mit, die nötige Konfiguration fehlte im Paket. Die Ressourcenlimits gelten nur im Swarm-Modus und wären still ignoriert worden. Und leere Ordner hätten Teile des Programms überdeckt. Die Sicherung schließlich hätte ausgerechnet die Konfiguration ausgelassen, ohne die sich nichts zurückspielen lässt.

Die Entscheidung: eine eigene VM statt des Pi

Auf dem Pi hängt die Namensauflösung für das ganze Haus. Nextcloud, PostgreSQL und Redis daneben zu stellen, wäre vom Speicher her gegangen. Aber jedes Update, jeder Neustart und jede Fehlersuche hätte den Haus-DNS mitbetroffen. Für ein Vorhaben, bei dem man absichtlich oft von vorn anfangen will, ist das die falsche Grundlage. In einer VM springt man per Snapshot in Sekunden zurück, und wenn etwas kaputtgeht, ist es nur die VM.

Die Docker-Datei habe ich neu geschrieben: ein vollständiges Nextcloud-Abbild, wirksame Limits, Passwörter nur in einer .env, die ich selbst eintippe, und ein Sicherungsskript mit Wartungsmodus, Datenbankauszug und Zeitsteuerung über systemd statt cron.

Der Test: alles zerstören und zurückholen

Vorgehen: eine Markierungsdatei in die laufende Installation legen, sichern, dann alles löschen, auch die Datenträger der Container, zurückspielen und vergleichen. Die Markierung kam Zeichen für Zeichen identisch zurück. Auf dem Weg dahin zeigten sich vier Fehler, die auf dem Papier unsichtbar waren:

  1. Docker benennt Datenträger nach dem Ordner. Die Anleitung nannte einen anderen Namen. Docker hätte beim Zurückspielen still einen neuen, leeren Datenträger angelegt und Erfolg gemeldet. Jetzt sind die Namen fest vorgegeben.
  2. Der Datenbankauszug enthielt den Datenbankbenutzer nicht. Nach dem Zurückspielen fehlte er, und Nextcloud antwortete mit einem Serverfehler, obwohl alle Daten da waren. Jetzt werden die Benutzer getrennt gesichert und vor der Datenbank eingespielt.
  3. Der Wartungsmodus steckt in der Sicherung. Gesichert wird im Wartungsmodus, also wird er mitgesichert. Der Schritt, ihn nach dem Zurückspielen abzuschalten, ist damit Pflicht und nicht Kosmetik.
  4. Alte Datenträger blieben liegen. Nach dem Umbenennen lagen die alten noch da, und es sah so aus, als käme alles zurück. Der Test war erst etwas wert, nachdem ich sie von Hand entfernt hatte.

Mit echten Daten: der fünfte Fehler

Danach kamen 1.295 eigene Fotos in die Cloud, zusammen 7,3 GB. Damit zeigte sich ein Fehler, den der Test mit ein paar hundert Megabyte nicht zeigen konnte. Die Aufbewahrungsregel lautete „lösche alles, was älter als 30 Tage ist“. Das klingt vernünftig, löscht aber vor Tag 31 gar nichts. Bei 7,5 GB je Sicherung wäre die Platte nach etwa acht Tagen voll gewesen, bevor das Aufräumen ein einziges Mal gegriffen hätte.

VorherJetzt
Aufbewahrung nach Alter, 30 Tagenach Anzahl, die letzten 7 Stände
Platzbedarf hängt von der Datenmenge abrechenbar: Anzahl mal Größe
volle Platte bricht mitten im Schreiben abPlatzprüfung vor dem ersten Schreiben

Der letzte Punkt ist wichtiger, als er aussieht: Eine Sicherung, die mitten im Schreiben an einer vollen Platte scheitert, hinterlässt ein halbes Archiv, das im Verzeichnis aussieht wie ein gültiges.

Die zweite Rückspielung, nach Anleitung

Die zweite Wiederherstellung habe ich mit den echten Fotos gemacht und dabei nur der schriftlichen Anleitung gefolgt, so wie es jemand täte, der das System nicht kennt. Beim Einspielen der Datenbankbenutzer kam eine Fehlermeldung, die in der Anleitung nicht stand. Sie ist harmlos, aber wer sie nicht erwartet, bricht an dieser Stelle ab. Sie steht jetzt in der Anleitung, mit Erklärung.

Was ich gelernt habe

Kapazitätsregeln müssen mit echten Datenmengen geprüft werden, mit einem leeren System sieht jede Regel richtig aus. Und eine Anleitung zeigt ihre Lücken erst, wenn sie jemand Schritt für Schritt abarbeitet, statt sie zu kennen.

Technik

TeilWomit
Umgebungeigene VM unter VMware mit Ubuntu, Snapshots als Rückweg
AnwendungNextcloud 31 mit PostgreSQL und Redis, drei Container über Docker Compose
SicherungShell-Skript mit Wartungsmodus, Datenbank- und Benutzerauszug, systemd-Timer, Aufbewahrung nach Anzahl, Platzprüfung
Abnahmestatus.php, occ user:list, occ files:scan, Markierungsdatei

Fragen zur Datensicherung?

Das Sicherungsskript und die Rückspiel-Anleitung zeige ich gern im Gespräch.