Nie wieder Daten verlieren | c't 3003

vor 45 Minuten 1

Backups sind das langweiligste Pflichtthema überhaupt – bis sie einmal wirklich gebraucht werden. c't 3003 zeigt, wie ein vollautomatisches Backup-Setup für den Homeserver in drei Schritten entsteht: Docker-Volumes konsistent sichern, deduplizierte Snapshots mit Restic oder Kopia anlegen und eine verschlüsselte Offsite-Kopie per Rclone in die Cloud schieben. Vier Tools, ein System, das wirklich funktioniert und nachts von alleine läuft.

(Hinweis: Dieses Transkript ist für Menschen gedacht, die das Video oben nicht schauen können oder wollen. Der Text gibt nicht alle Informationen der Bildspur wieder.)

Guckt mal hier: Mein Homeserver macht das gerade vollautomatisch. Backups. Von allem. Keine Benachrichtigungen, kein manueller Trigger. Ich liege im Bett und trotzdem werden gerade alle meine Daten gesichert. Nextcloud, Fotos, Dokumente, Docker-Container, wirklich alles. Und wenn heute Nacht mein Haus abbrennt, ein Blitz einschlägt oder ich morgen früh auf die falsche Mail klicke und mir Ransomware einfange, ich verliere nichts. Nicht eine einzige Datei.

Und ich sage euch ganz ehrlich: Vor ein paar Monaten hätte ich das nicht sagen können. Ich hatte zwar irgendwas, das ich Backup genannt habe, aber es war halbgar, ungetestet und im Ernstfall wäre ich damit aufgeschmissen gewesen. Ich habe mich dann einmal wirklich intensiv damit beschäftigt, alles neu aufgebaut und das Ergebnis ist so gut, dass ich es euch in diesem Video zeigen will.

Weil Backups kein langweiliges Pflichtthema sind, Backups sind der Unterschied zwischen "Mist, alles weg" und "Kein Problem, in ein paar Minuten ist alles wieder da". Und genau dieses System läuft danach komplett von alleine, das bauen wir heute zusammen auf. Also, bleibt dran.

Liebe Hackerinnen, liebe Internet-Surfer, herzlich willkommen hier bei …

So, bevor wir loslegen, ganz kurz die Ausgangslage: Wenn ihr einen Homeserver betreibt, egal ob das ein fettes NAS ist, ein kleiner Mini-PC oder ein Raspberry Pi, dann sammelt sich da mit der Zeit einfach unfassbar viel an. Bei mir läuft da zum Beispiel Nextcloud, meine Fotobibliothek mit Immich, ein Paperless-NGX für meine ganzen Dokumente, ein paar Datenbanken, Smart-Home-Kram. Ich glaube, ich habe da aktuell so ein Dutzend Docker-Container am Start und die wollen genauso wie der ganze andere Kram richtig gesichert werden. Und auch wenn ihr RAID auf eurem NAS verwendet, das ist halt kein Backup.

Was wir stattdessen wollen, ist die gute alte 3-2-1-Regel. Also drei Kopien eurer Daten auf zwei verschiedenen Medien und eine davon außer Haus. Und genau daran hangeln wir uns jetzt entlang. Wir bauen das in drei Schritten. Schritt 1, wir sichern die Basis, also alle eure Docker-Container. Schritt 2, wir bauen das richtig fette, deduplizierte Backup. Und Schritt 3, wir schaffen eine verschlüsselte Kopie davon aus dem Haus in die Cloud oder auf einen kleinen Raspi, der bei euren Eltern steht. Vier Tools, drei Schritte und am Ende schlaft ihr deutlich besser.

Das gilt übrigens genauso für euren Desktop-Rechner. Egal, ob Windows, macOS oder Linux, Restic und Kopia laufen auf allen drei Systemen nativ. Ihr könnt also eure Desktop-Daten mit denselben Tools und in dieselben Repositories sichern, die wir gleich aufbauen.

Fangen wir ganz unten an, beim Fundament. Wenn euer Homeserver mit Docker-Containern läuft, und das tun ja die meisten, dann liegen die ganzen wichtigen Daten eurer Container in sogenannten Volumes. Also die Datenbank von eurer Nextcloud, die Konfiguration von eurem Smart Home, die Einstellungen von 20 verschiedenen Diensten. Und die lassen sich einfach mit einem Tool sichern: docker-volume-backup. Das ist ein winziger Docker-Container, der gesellt sich einfach zu eurem bestehenden Setup dazu und sichert im Hintergrund eure Volumes weg.

Es gibt für die meisten Homeserver bzw. NAS-Systeme auch spezielle Lösungen. Also hier zum Beispiel für mein Unraid-System kann ich einfach AppData Backup aus dem App Store installieren und habe dann direkt hier grafisch alle wichtigen Einstellungen. docker-volume-backup funktioniert aber halt auf allen Homeservern, ist also eine Universal-Lösung und das Schöne: Ihr konfiguriert das komplett über eure docker-compose-Datei, also genau da, wo ihr eh alle eure anderen Docker-Container definiert habt. Ihr legt einen neuen Service an, nennen wir ihn Backup, gebt ihm das Image offen/docker-volume-backup und dann mountet ihr da einfach alle Volumes rein, die gesichert werden sollen.

Den Zeitplan macht ihr über einen ganz normalen Cron-Ausdruck. Ihr schreibt also in eure Config die Zeile BACKUP_CRON_EXPRESSION und als Wert den Cron-Ausdruck für 3 Uhr nachts, also eine 0, eine 3 und dann dreimal ein Sternchen. Und zack, läuft euer Backup jede Nacht um drei. Da seid ihr eh im Bett wahrscheinlich, da ist auf dem Server nichts los, perfekt.

Und jetzt kommt der Teil, der das Tool richtig clever macht und der euch vor einem ganz fiesen Anfängerfehler bewahrt. Stichwort: Datenkonsistenz. Stellt euch vor, docker-volume-backup fängt an, eure Nextcloud-Datenbank zu sichern und mittendrin schreibt die Datenbank gerade neue Daten rein. Was ihr dann sichert, ist so ein halbgarer Zwischenzustand, im Fachjargon ein "inconsistent backup". Und das fällt euch halt erst auf, wenn ihr es wiederherstellen wollt und die Datenbank sich weigert zu starten.

docker-volume-backup löst das ganz elegant. Ihr packt einfach an den Container, der gesichert werden soll, ein kleines Label dran. Das heißt docker-volume-backup.stop-during-backup und ihr setzt das auf true. Und dann stoppt das Tool genau diesen Container kurz vor dem Backup, sichert in Ruhe das Volume und startet ihn danach automatisch wieder. Damit das funktioniert, müsst ihr dem Backup-Container noch den Docker-Socket reinreichen, also die Datei docker.sock, und zwar so, wie es ist.

Kleiner Hinweis für alle, die das besonders sauber machen wollen: Docker-Socket-Zugriff bedeutet im Prinzip Root-Zugriff auf den Host. Wer das einschränken will, der schaut sich mal Tecnativas docker-socket-proxy an, der lässt nur die API-Endpunkte durch, die das Backup-Tool auch wirklich braucht. Die paar Sekunden Downtime mitten in der Nacht kriegt eh keiner mit und dafür habt ihr dann garantiert saubere Daten.

Aber falls ihr eine Datenbank gar nicht stoppen wollt, geht das auch eleganter. docker-volume-backup kann nämlich auch Befehle ausführen, bevor das Backup losgeht. Ihr könnt also zum Beispiel sagen: "Mach mir kurz einen sauberen MySQL-Dump" und sichert dann diesen Dump statt der rohen Datenbank-Dateien. Beide Wege führen zum Ziel.

Bleibt die Frage, wohin schreibt das Ding die Backups? Und da ist das Tool angenehm flexibel. Standardmäßig packt es eure Volumes in eine tar.gz-Archiv-Datei, also schön komprimiert, das kann lokal in einen Ordner gehen, auf ein Netzwerklaufwerk per NFS oder SMB oder, und das ist ziemlich nice, direkt in einen S3-kompatiblen Cloud-Speicher. Es kann sogar WebDAV, Dropbox oder Google Drive. Und alte Backups räumt es auf Wunsch auch gleich selbst, damit euch nicht nach drei Monaten die Platte überläuft. Dafür gibt es die Retention-Einstellung. Wer mag, lässt das Archiv direkt vom Tool auch per GPG verschlüsseln. Die ganze Dokumentation zu dem Tool verlinke ich euch unten in der Beschreibung.

Hier holen wir uns ein Backup, das richtig was kann. Bisher haben wir die Docker-Volumes gesichert, jetzt sichern wir wirklich alle Daten, die auf unserem Homeserver oder NAS gespeichert sind. Und bevor ich euch die zwei Tools gleich zeige, müssen wir ganz kurz über zwei Zauberwörter reden. Weil die beide Werkzeuge erst so genial machen: Deduplizierung und Snapshots.

Fangen wir mit Deduplizierung an. Stumpfe Backups wie unser tar.gz-Archiv von eben sichern jeden Tag alles komplett neu. Auch die 50.000 Fotos, die sich seit gestern kein Stück verändert haben. Also voll der Quatsch. Deduplizierung dreht das um. Die Tools zerlegen eure Daten in kleine Blöcke und speichern jeden einzigartigen Block nur ein einziges Mal. Wenn sich morgen nur eine einzige Datei ändert, landet auch nur dieser eine geänderte Block im Backup. Das spart viel Zeit und Speicherplatz.

Und dann Snapshots. Jedes Mal, wenn so ein Backup läuft, entsteht ein Snapshot, also ein eingefrorener Zustand eurer Daten zu genau diesem Zeitpunkt. Das Geniale: Weil dedupliziert wird, kostet euch jeder weitere Snapshot fast nichts extra, ihr könnt also problemlos hunderte Snapshots aufheben und jederzeit in der Zeit zurückreisen. Wie sah dieser Ordner am 3. März aus? Ein Befehl später seid ihr da.

So, und genau dieses Prinzip beherrschen unsere zwei Kandidaten für Schritt 2. Es ist im Kern dasselbe Konzept, nur die Verpackung ist komplett unterschiedlich. Fangen wir mit dem Tool an für die Terminal-Fraktion, Restic. Restic ist ein reines Kommandozeilen-Tool. Kein Fenster, keine Buttons, keine Klickibunti-Oberfläche, nur ihr und die Shell. Restic arbeitet mit einem sogenannten Repository. Das ist einfach der Ort, an dem eure Backups liegen. Das kann ein Ordner auf eurem NAS sein, eine zweite Festplatte, ein SFTP-Server oder S3. Ziemlich egal. Ihr legt das einmal an mit dem Befehl restic, dann der Pfad zum Repository und dahinter das Wort init.

Und jetzt kommt der wichtigste Punkt überhaupt und der Grund, warum ich Restic so mag: Restic verschlüsselt. Immer. Von Haus aus, es gibt gar keine Option, das Backup unverschlüsselt anzulegen. Beim Anlegen vergebt ihr ein Passwort und ab dann ist jedes einzelne Byte in eurem Repository mit AES-256 verschlüsselt. Das gilt zurzeit sogar noch als quantensicher. Das heißt, selbst wenn euch jemand die ganze Backup-Platte klaut oder euer Cloud-Anbieter gehackt wird, eure Daten sind dann nichts als Datenmüll für die. Riesig wichtig, gerade beim Homeserver finde ich.

Ein Backup zu machen ist dann schon fast langweilig einfach. Ihr tippt restic, den Pfad zum Repository, dann das Wort backup und dahinter die Ordner, die gesichert werden sollen. Beim ersten Mal dauert das, klar, da muss alles einmal durch, aber jeder weitere Lauf ist dann ziemlich schnell, weil Restic eben nur noch die Änderungen abgleicht. Eure ganzen Sicherungsstände seht ihr mit dem Befehl restic snapshots. Das ist eine schöne Liste mit Datum und Uhrzeit.

Und jetzt das Feature, das ich richtig feiere: Ihr gebt restic mount ein plus einen Ordner, in den gemountet werden soll. Und Restic hängt euch sein komplettes Repository als ganz normales Verzeichnis ins System ein. Ihr klickt euch da durch wie auf einem Netzlaufwerk: ein Ordner pro Snapshot, sucht euch die Datei von vor drei Wochen raus und zieht sie einfach raus. Kein kompliziertes Restore-Kommando, nichts, einfach Copy-Paste aus der Vergangenheit.

Restic ist also schnell, sicher, schlank und plattformunabhängig und Open Source. Der einzige Haken: Es ist und bleibt halt Kommandozeile. Ihr müsst euch das selber per Cron-Job oder mit einem kleinen Skript automatisieren und ihr müsst euch in der Shell wohlfühlen. Und genau für alle, die das nicht tun, kommt jetzt die Alternative:

Kopia ist technisch quasi der gleiche Schlag Tool wie Restic: clientseitige Ende-zu-Ende-Verschlüsselung mit AES-256, Deduplizierung, dazu von Haus aus Komprimierung mit modernen Algorithmen wie zstd, Open Source. Aber, und das ist der ganze Witz, Kopia bringt eine richtige grafische Oberfläche mit, die KopiaUI. Und das fühlt sich einfach komplett anders an. Statt restic init zu tippen, klickt ihr hier im Fenster auf Repository erstellen und wählt aus einer langen Liste euer Speicherziel aus. Und diese Liste ist lang. Lokaler Ordner, ein Netzlaufwerk, SFTP, Google Drive, AWS S3, Backblaze B2 und so weiter. Ihr vergebt euer Passwort, fertig ist das Repository. Wenn ihr ein lokales Backup machen möchtet, dann müsst ihr beim Erstellen des Containers die Backup-Festplatte direkt angeben.

Backups laufen in Kopia über sogenannte Policies, also Regeln, und auch die klickt ihr euch einfach zusammen. Ihr sagt, sichere mir diesen Ordner und stellt mit ein paar Schiebereglern und Dropdowns ein, wann das passieren soll und wie viele Snapshots aufgehoben werden. Das ist exakt die Aufbewahrungslogik, die wir bei Restic mühsam als forget-Befehl eintippen mussten, nur eben als Häkchen.

Was ich an Kopia außerdem mag: die Ignore-Regeln. Es gibt ja immer Kram, den ihr nicht mitsichern wollt, irgendwelche Cache-Ordner, temporäre Dateien, dieser ganze Krempel. In Kopia legt ihr dafür ganz simpel Ausschlussmuster fest. Das hält euer Backup schön schlank und das Wiederherstellen genauso entspannt. Ihr klickt in der Oberfläche auf einen Snapshot, browst durch euren Ordner wie im normalen Dateimanager und holt euch raus, was ihr braucht. Die Zeitreise von Restic, nur eben mit der Maus.

Also die ganz ehrliche Einordnung zwischen den beiden: Eigentlich können beide praktisch das Gleiche und beide sind wirklich gut. Restic ist mein Tool, wenn ich Dinge sauber skripten und automatisieren will und eh schon im Terminal lebe. Kopia ist das Tool, das ich jedem empfehle, der einen Homeserver hat, aber kein Kommandozeilen-Nerd ist. Oder der das einfach in einer schicken Oberfläche im Blick behalten will. Nehmt das, womit ihr euch wohlfühlt.

Das Szenario, das wir jetzt abdecken, ist das unangenehmste von allen. Euer Haus brennt ab oder es wird eingebrochen und der ganze Server ist weg. In dem Fall sind ja alle Kopien, die brav nebeneinander zu Hause lagen, gleichzeitig futsch. Deshalb braucht eine davon einen anderen Ort. Und anderer Ort heißt für die meisten von uns die Cloud. Oder eben die Wohnung von euren Eltern, Freunden oder so.

Und das Tool dafür heißt Rclone. Rclone wird gerne als rsync für Cloud-Speicher beschrieben und das trifft es ziemlich gut. Es ist ein Kommandozeilenprogramm, dessen einziger Job es ist, Dateien zwischen eurem Rechner und über 70 verschiedenen Cloud-Anbietern hin- und herzuschaufeln. Backblaze B2, AWS S3, Wasabi, OneDrive, Dropbox, Google Drive, Mega, pCloud, eine andere Nextcloud, ganz normales WebDAV. Die Liste ist absurd lang.

Und ganz wichtig, damit ihr die Rolle von Rclone richtig versteht, Rclone ist nicht euer Backup-Tool. Rclone ist ein Logistik-Dienstleister. Das eigentliche Backup haben wir schon, das hat Restic oder Kopia in Schritt 2 gebaut. Rclones Job ist es, genau dieses fertige Backup zu nehmen und quasi aus dem Haus zu schaffen. Es ist quasi der Paketdienst für eure Daten. Eingerichtet wird das mit dem Befehl rclone config, das ist ein interaktiver Assistent, der euch Schritt für Schritt durch die Verbindung zu eurem Cloud-Anbieter führt.

Und jetzt der Punkt, der Rclone für den Homeserver so wertvoll macht und bei dem ihr unbedingt aufpassen müsst. Wenn ihr ein Backup zu irgendeinem Cloud-Anbieter schiebt, dann liegen eure Daten ab dann auf einem fremden Server. Also wollt ihr die verschlüsseln. Rclone hat dafür das Crypt-Remote. Damit legt ihr quasi eine Verschlüsselungsschicht über euren Cloud-Speicher. Ihr richtet euer Cloud-Ziel ein, in dem Fall hier habe ich mal meinen Google Drive verbunden, und dann packt ihr ein Crypt-Remote oben drauf. Ab dann verschlüsselt Rclone jede Datei lokal auf eurem Server, also schon bevor sie das Haus verlässt und erst die fertig verschlüsselten Brocken gehen hoch. Es verschlüsselt auf Wunsch sogar die Dateinamen und die Ordnerstrukturen mit. Beim Cloud-Anbieter liegt dann nur noch unlesbarer Datensalat. Das heißt aber auch, dass ihr euer Crypt-Passwort wirklich gut sichern müsst, denn ohne gibt es keinen Zugriff auf das Backup mehr.

Der eigentliche Upload ist dann fast schon unspektakulär. Ein einziger Befehl reicht aus: rclone sync, dann euer lokaler Backup-Ordner und dahinter euer Crypt-Ziel in der Cloud. Und Rclone gleicht dann euren lokalen Backup-Ordner mit der Cloud ab. Wieder gilt: Es überträgt nur, was sich geändert hat. Es ist extrem bandbreiteneffizient und falls eure Leitungen beim Upload nicht in die Knie gehen sollen, drosselt ihr das einfach mit der Option bwlimit, zum Beispiel auf 10 MB pro Sekunde. Den Befehl packt ihr wieder in einen nächtlichen Cron-Job und ab dann passiert das komplett von alleine.

So, jetzt haben wir alles. Aber ganz wichtig, testet das auch mal produktiv. Also probiert unbedingt mal eine Datei oder einen Docker-Container aus eurem Backup wieder in euer Produktivsystem einzuspielen, weil ein Backup, das ihr nicht ab und zu auch mal ausprobiert, ist irgendwie auch mehr Hoffnung als Sicherheit. Also zieht alle paar Monate mal eine Datei aus eurem Restic-Mount und spielt einmal einen Docker-Container aus dem Volume-Backup zurück. Das dauert 10 Minuten und ihr wisst, dass euer System wirklich funktioniert.

Und jetzt würde mich wirklich interessieren, wie sichert ihr euren Kram? Haben wir was übersehen? Seid ihr Team Restic, knallhart auf der Kommandozeile oder Team Kopia mit der schönen Oberfläche? Oder macht ihr noch gar nichts und habt jetzt beim Zuschauen so ein leicht flaues Gefühl im Magen bekommen? Auch völlig okay. Schreibt es einfach in die Kommentare und wenn ihr ein Backup-Setup habt, an das wir hier gar nicht gedacht haben, immer her damit.

Wenn euch das Video geholfen hat, dann lasst gerne ein Abo da, hört auch mal bei unserem Podcast rein, macht eure Backups, testet euren Restore und habt noch einen schönen Resttag. Tschüss!

c't 3003 ist der YouTube-Channel von c't. Die Videos auf c’t 3003 sind eigenständige Inhalte und unabhängig von den Artikeln im c’t Magazin. Die Redakteure Jan-Keno Janssen, Lukas Rumpler, Sahin Erengil und Pascal Schewe veröffentlichen jede Woche ein Video.

(rum)

Gesamten Artikel lesen