Raspberry Pi-Backup auf OneDrive mit Rclone und Restic

Ich verbringe immer mehr Zeit mit meinem Raspberry Pi, der in meinem Outdoor-Office im Gartenschuppen zum Einsatz kommt. Der Raspberry Pi ist mehr als ein minimaler Schreibcomputer (ich schreibe meine Texte mit der NEO-Tastaturbelegung in Markdown, synchronisiere die Website per GIT in Bitbucket und schiebe dann die mit Hugo erstellte Website per rsync-Deploy auf meinen Uberspace). Hört sich kompliziert an, ist aber ein wunderbar einfacher und schneller Workflow - wenn er einmal läuft.

Das Besondere am Raspberry Pi ist, dass der Mini-Computer sehr günstig ist und nur von einer SD-Karte der einem USB-Stick angetrieben wird. Schön minimal und genau richtig für meine Schreibsachen. Den Rest kann ich ja auf meinem iMac (noch in Deutschland), Windowsrechner oder meinem iPad erledigen. Sollte der Raspberry mal abrauchen, dann kann ich ihn (oder den USB-Stick) schnell ersetzen und sofort weitermachen. Das Teil ist transportabel und ich benutze den Raspberry auch gerne per ssh von einem andere Computer aus.

Ich will nicht allzu paranoid klingen, aber mein Ziel ist es, so flexibel und unabhängig wie möglich von technischen Krisen zu sein. Deswegen habe ich in den letzten Monaten verschiedene Backup-Strategien durchgespielt. Einige davon habe ich ja schon in den Notizen gesammelt. Dabei will ich möglichst redundant arbeiten: 2 lokale Backups auf unterschiedlichen Medien und eins Online. Wichtig ist, dass ich im Fall der Fälle sofort weiterarbeiten kann (zur Not auch ohne Internetzugang).

Und das sind meine drei Backup-Wege:

Ich bin ein großer Fan vom “Klonen”. Dabei wird die komplette Festplatte oder der USB-Stick eins-zu-eins kopiert. Wenn also der USB-Stick nicht mehr funktioniert, ersetze ich den defekten USB-Stick mit dem Klon und alles ist gut. Voraussetzung dafür ist, dass die Klon-USB einigermaßen aktuell ist.

Genau das ist der Nachteil des Klonens. Es dauert lange, das macht man nicht jeden Tag. Ich erstelle eine .img-Datei auf meinem Windows-PC mit Win32 Disk Imager und schreibe die .img-Datei (die genauso groß ist wie der 64GB-USB-Stick) mit Balena Etcher auf einen anderen USB-Stick. Das dauert insgesamt ein bis zwei Stunden. Ich klone meinen USB-Stick immer Anfang des Monats, weil ich nun ein stabiles System habe, das ich nur noch kaum verändere (mal abgesehen von den Updates). Ich habe also immer einen USB-Stick in der Schreibtischschublade, mit dem ich sofort weiterarbeiten. Ich ziehe einfach meine aktuellen Versionen und Texte per Git Pull auf den Stick und los gehts.

Die erstellte .img-Datei kopiere ich dann auch auf eine externe Festplatte die ich in einem anderen Zimmer aufbewahre (in meiner “Es-kommt-ein-Buschfeuer-ich-muss-alles-wichtige-mitnehmen-Tasche). Eigentlich sollte ich die .img-Datei in die Cloud legen, aber ich bekomme die Datei auf dem Windows-Rechner nicht vernünftig komprimiert, so dass es hier mit der langsamen Internetverbindung einfach zu lange dauert.

Was mache ich aber nun mit meinen Daten? Eigentlich arbeite ich ja mit GIT-Repositories, also geht es mir hier eher um das optimierte System. Die Klon-Variante oben dauert einfach zu lange, deswegen führe ich täglich nach getaner Arbeit zur Sicherheit noch ein inkrementelles Backup mit [Restic] in die Cloud durch. Restic ist open source und ein Backup lässt sich mit einem kurzen Befehl im Terminal starten. Die Daten werden verschlüsselt übertragen und das dauert in der Regel nur ein paar Minuten.

Mit Restic kannst Du Deine Daten per SFTP auf Deinen Server oder zum Beispiel auf ein Google Drive kopieren. Leider bietet Restic nicht das Speichern auf ein OneDrive an und so wird es nun etwas komplizierter, denn Du musst zunächst rclone installieren und dann in rclone OneDrive einbinden. Danach kannst Du dann mit einem Restic-Befehl per rclone inkrementelle Backups fahren.

Ich bin so vorgegangen:

  1. Rclone installieren: Ich bin dieser Anleitung gefolgt, das hat gut funktioniert.

  2. Per Rclone mit OneDrive verbinden: Das ist etwas aufwändiger. Aber letztendlich musst Du nur ein paar Fragen richtig beantworten. Eine gute Anleitung habe ich hier gefunden. Der Autor hat anscheinend eine ältere Rclone-Version benutzt, Du solltest dem Rezept nicht mechanische folgen (bei mir war OneDrive die Nummer 17 und ich habe meine Verknüpfung „onedrive“ genannt.). Du startest den Vorgang mit

    rclone config

  3. OneDrive-Verbindung mit Rclone testen: Ich könnte nun mit Rclone meinen Raspberry auf OneDrive kopieren. Da aber immer das komplette System übertragen wird, ist das nicht empfehlenswert. Es dauert einfach zu lange. In diesem Beispiel klone ich mein Raspberry Home-Verzeichnis mit dem Verzeichnis „raspberry“, das ein in meinem onedrive im Verzeichnis „backup“ liegt. Wenn Du magst, kannst Du es mal ausprobieren:

    rclone copy /home onedrive:backup/raspberry-pi4

  4. Restic installieren und mit Rclone verbinden: Jetzt kommt Restic dazu. Damit klonen wir nur, was sich wirklich verändert hat. Wir müssen also zunächst Restic installieren:

    apt install restic

    Als nächstes legst Du ein „Repository“ an. Hierhin klont Restic dann:

    restic -r rclone:onedrive:/backup/raspberry-pi4 init

    Und dann kannst Du das Backup starten. Beim ersten Mal dauert es etwas länger. Danach schaut Restic nach dem „Snapshot“ der letzten Sicherung und speichert nur die Veränderungen:

    restic -r rclone:onedrive:/backup/raspberry-pi4 backup –verbose /home

    Ab und zu solltest Du prüfen, ob das Backup fehlerfrei gespeichert ist. Das geht so:

    restic -r rclone:onedrive:/backup/raspberry-pi4 check

    Sollte etwas schief gehen, kannst Du Dein Backup mit diesem Befehl wiederherstellen. In diesem Fall spiele ich das gesamte Home-Verzeichnis in ein temporäres Verzeichnis aus:

    restic -r rclone:onedrive:/backup/raspberry-pi4 restore latest –target /tmp/restore

    Wenn Du restic erst einmal verstanden hast, kannst Du allerhand Sachen machen. Ich speichere beispielsweise wichtige Verzeichnisse meiner Nextcloud in OneDrive (restic -r rclone:onedrive:/backup/nextcloud backup –verbose Nextcloud/)und überlege gerade, ob ich nicht auch den umgekehrten Weg gehe und wichtige Verzeichnisse im OneDrive lokal klone. Sicher ist sicher. Da der Befehl etwas sperrig ist, habe ich den in eine Bash-Datei gelegt, den ich dann mit „./backup” täglich ausführen kann. Natürlich könnte ich auch noch einen cron-Job dafür anlegen, aber ich mag einfach dieses manuelle tägliche Auschecken.

    nano backup.sh

    Dann das einfache Bash-Script eintragen:

    #!/bin/bash

    restic -r rclone:onedrive:/backup/raspberry-pi4 backup –verbose /home

    Bevor Du es mit „./backup.sh“ starten kannst, musst Du es noch ausführbar machen:

    chmod u+x backup.sh

Das liest sich vielleicht etwas kryptisch und ich habe auch viel Zeit damit verbracht. Aber nun ist es unkompliziert. Ich mache jeden Monat ein System-Klon auf einen USB-Stick und täglich Backups. Vielleicht mache ich auch noch restic-Backups auf eine externe Festplatte wie hier beschrieben. Aber ich glaube, das wäre vielleicht zu viel. Auf diese Weise habe ich das Gefühl und auch die Gewissheit, dass ich sofort weiterarbeiten kann, wenn mal was schiefläuft. Und ab jetzt: Never change a running system!