Datensicherung mit restic, rclone und OneDrive

Heute habe ich mir eine Microsoft 365 Lizenz besorgt, die neben den bekannten Office Produkten auch 1 TB OneDrive Speicherplatz beinhaltet. Eigentlich sind meine wichtigen Daten schon gut gesichert, da sie sowohl redundant auf dem jeweiligen Server als auch zusätzlich physikalisch weit entfernt gesichert werden. So werden die Daten meines vServers von netcup in Nürnberg auf meinem Server zuhause in Kiel gesichert und umgekehrt. Da ich für den OneDrive Speicherplatz ansonsten jedoch keine Verwendung habe, recherchierte ich kurzerhand, ob meine Backup-Lösung auch mit OneDrive kompatibel ist - eine weitere Redundanz kann ja nicht schaden 😎

Zur Datensicherung verwende ich seit geraumer Zeit restic, das von Haus aus schon einige Protokolle und Provider unterstützt (z.B. SFTP, Amazon S3, Microsoft Azure Blob Storage, Google Cloud Storage und Backblaze B2). Vor einiger Zeit haben sich die Entwickler von restic und rclone zusammengetan und eine Integration für die beiden Tools implementiert (siehe Using rclone as a restic Backend). rclone selbst ist ein Programm zur Daten-Synchronisation mit über 40 unterstützten Protokollen und Anbietern - darunter glücklicherweise auch OneDrive.

rclone und restic installieren

Zunächst müssen restic als auch rclone auf dem zu sichernden Server installiert werden. Da das Vorgehen je nach Betriebssystem unterschiedlich ist, verweise ich einfach auf die entsprechenden Installationsanleitungen:

rclone einrichten

Es wird mit der Konfiguration von rclone begonnen, da restic später über rclone auf OneDrive Zugriff erhält. Gib

rclone config

ein und es erscheint (sofern noch keine rclone Konfiguration existiert) die folgende Abfrage:

No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> 

Wähle n zur Anlage einer neuen Konfiguration und drücke Enter. Bei

name>

wird ein beliebiger Name für die Konfiguration vergeben. Ich habe hier onedrive eingegeben. Danach folgt die Auswahl des Speicher-Typs (Ausgabe gekürzt):

Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
[...]
23 / Microsoft OneDrive
   \ "onedrive"
[...]
Storage> 

Gib onedrive gefolgt von Enter ein. Die nächsten drei Fragen einfach mit Enter bestätigen:

Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n>

In dieser Anleitung gehe ich von der Einrichtung eines entfernten Servers aus, weshalb bei der folgenden Abfrage n zu wählen ist:

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n>

Es erscheint folgende Anweisung:

For this to work, you will need rclone available on a machine that has
a web browser available.

For more help and alternate methods see: https://rclone.org/remote_setup/

Execute the following on the machine with the web browser (same rclone
version recommended):

	rclone authorize "onedrive"

Then paste the result below:
result>

Wie beschrieben, muss rclone nun auf einem Computer mit Zugriff auf einen Browser gestartet werden. Ich habe mir dazu rclone von der rclone Download-Seite für Windows heruntergeladen und wie folgt per Kommandobefehlszeile gestartet:

C:\Users\Patrick\Desktop>rclone.exe authorize onedrive
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=<state>
Log in and authorize rclone for access
Waiting for code...

Jetzt sollte der Browser automatisch eine Anmeldeseite von Microsoft öffnen. Sobald du dich angemeldet und die Rechtefreigabe durchgeführt hast, kann der Browser geschlossen werden. Auf der Kommandobefehlszeile erscheint nun die folgende Ausgabe (sensible und dynamische Daten wurden durch Platzhalter ersetzt):

Got code
Paste the following into your remote machine --->
{"access_token":"<access_token>","token_type":"Bearer","refresh_token":"<refresh_token>","expiry":"<expiry>"}
<---End paste

Kopiere das Ergebnis in die Zwischenablage und gib es auf dem einzurichtenden Server ein. Danach wird abgefragt, um welchen Speichertyp es sich genau handelt:

Choose a number from below, or type in an existing value
 1 / OneDrive Personal or Business
   \ "onedrive"
 2 / Root Sharepoint site
   \ "sharepoint"
 3 / Type in driveID
   \ "driveid"
 4 / Type in SiteID
   \ "siteid"
 5 / Search a Sharepoint site
   \ "search"
Your choice>

Gib hier onedrive ein. Es werden die zur Verfügung stehenden Speicher ermittelt:

Found 1 drives, please select the one you want to use:
0:  (personal) id=<drive_id>
Chose drive to use:>

Für gewöhnlich sollte hier nur ein Speicher erkannt werden, sodass 0 ausgewählt wird. Die Sicherheitsabfrage

Found drive 'root' of type 'personal', URL: https://onedrive.live.com/?cid=<drive_id>
Is that okay?
y) Yes (default)
n) No
y/n>

wird mit Enter bestätigt, danach folgt eine Zusammenfassung der Konfiguration...

--------------------
[onedrive]
type = onedrive
token = {"access_token":"<access_token>","token_type":"Bearer","refresh_token":"<refresh_token>","expiry":"<expiry>"}
drive_id = <drive_id>
drive_type = personal
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d>

...die wiederum mit Enter bestätigt wird. Die Konfiguration ist nun abgeschlossen und kann per q beendet werden:

Current remotes:

Name                 Type
====                 ====
onedrive             onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>

Um den Zugriff auf OneDrive zu testen, wird folgender Befehl ausgeführt:

rclone lsd <name>:

Wenn die Konfiguration korrekt ist, werden nun alle Ordner auf oberster Ebene des Speichers aufgelistet. <name> muss hierbei durch den von dir vergebenen Namen ersetzt werden.

restic konfigurieren

Der komplizierteste Teil ist geschafft, jetzt muss nur noch restic eingerichtet werden. Mit dem Befehl

restic -r rclone:<name>:<path> init

wird ein neues Repository für die Datensicherung angelegt. <name> muss hierbei durch den von dir bei rclone vergebenen Namen ersetzt werden und <path> gibt den zu verwendenden Pfad im OneDrive an. Sofern der Name onedrive verwendet wird und die Daten im Ordner /backup/server gesichert werden sollen, wird bspw. folgender Befehl eingegeben:

restic -r rclone:onedrive:/backup/server init

Es folgt eine Passwortabfrage...

enter password for new repository:
enter password again:
created restic repository <id> at rclone:onedrive:/backup/server

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

...und schon kann mit der Datensicherung losgelegt werden.

Daten sichern und wiederherstellen

Sofern die im vorherigen Abschnitt genannten Parameter gleich bleiben, kann das /home-Verzeichnis z.B. wie folgt gesichert werden:

restic -r rclone:onedrive:/backup/server backup --verbose /home

Zur Wiederherstellung aller Daten aus der letzten Sicherung nach /tmp/restore, wird hingegen folgender Befehl benötigt:

restic -r rclone:onedrive:/backup/server restore latest --target /tmp/restore

Da eine ausführliche Beschreibung von restic den Rahmen dieses Artikels sprengen würde, verweise ich nun einfach auf die hervorragende restic Dokumentation 😉