TrueNAS SCALE: OneDrive-Cloud-Sync-Task erstellen

Nach der Migration von TrueNAS Core zu TrueNAS SCALE fiel mir auf, dass die OneDrive-Cloud-Sync-Tasks nicht mehr funktionieren. Das liegt darin begründet, dass die vormals verwendete OneDrive-Implementierung entfernt wurde, weil sie veraltet war und nicht mit der Python-Version funktionierte, die mit TrueNAS SCALE Bluefin mitgeliefert wird.

Da die Implementierung allerdings auf rclone basiert, das auch Teil von TrueNAS SCALE ist, können wir unsere eigene Implementierung erstellen. rclone hat einen interaktiven Konfigurationsassistenten für eine einfachere Einrichtung unterstützter Anbieter.

Stelle zuerst sicher, dass du ein Datenset konfiguriert hast, auf dem du die rclone-Konfiguration und -Protokolle speichern kannst. Andernfalls ist es nicht zwingend sicher, dass die Daten persistent sind und einen Neustart oder eine Aktualisierung überleben. Besser Vorsicht als Nachsicht.

Melde dich danach via SSH an und wechsle zu diesem Datenset. In meinem Beispiel heißt das Datenset rclone, also ist es unter /mnt/rclone erreichbar.

ssh root@10.10.10.2
cd /mnt/rcloneCode-Sprache: Bash (bash)

Jetzt musst du Microsoft OneDrive als Anbieter in rclone konfigurieren. Bitte folge dieser Anweisung mit einer Ausnahme (siehe unten): https://rclone.org/onedrive/

An dem Punkt, an dem du die Anbieter-Konfiguration via Webbrowser einrichten sollst, stelle sicher, dass du N wählst, da du innerhalb von TrueNAS SCALE standardmäßig keinen Zugriff auf einen Webbrowser hast. Du musst dann auf deinen eigenen Computer wechseln, um dort die Zugangsdaten zu erhalten. Stelle also sicher, dass du auch dort rclone installiert hast (du kannst es danach wieder deinstallieren, wenn du es anderweitig nicht benötigst).

Datenverschlüsselung

Wenn du deine Daten auch verschlüsseln willst, die du zu Microsoft OneDrive hochlädst (empfohlen), erstelle eine neue Konfiguration mit dem Speichertyp crypt, wie hier beschrieben: https://rclone.org/crypt/

Diese Methode ist zu der bekannten Verschlüsselung von TrueNAS Core kompatibel.

Hier wirst du nach einem „Remote to encrypt/decrypt“ gefragt. Du benötigst das Format myremote:path/to/dir hier. Statt myremote gib den Anbieternamen an, den du zuvor konfiguriert hast (wenn du der Anleitung gefolgt bist, ist er onedrive). Gib als Pfad / ein. Der vollständige Wert lautet demnach onedrive:/. Ich habe den Verschlüsselungsanbieter onedrive-crypt genannt.

Wenn du bereits vorher die Verschlüsselung für deinen OneDrive-Cloud-Sync-Task aktiviert hattest, wähle „Encrypt the filenames“ und „Encrypt directory names“ und gib dein eigenes Passwort und deinen eigenen Salt als zweites Passwort ein.

Da ich nur einen OneDrive-Anbieter mit dem Pfad / erstellt habe, verwendet die Verschlüsselung nun auch verschlüsselte Verzeichnisnamen auf der ersten Ebene, was beim Cloud-Sync-Task vorher nicht der Fall war. Um demnach die vorherigen Daten zu synchronisieren, starte ich den rclone-Prozess, wie im Cron-Job unten definiert, einmal manuell und breche ihn nach ein paar Sekunden mit der Tastenkombination Steuerung + C ab. Auf diesem Wege wurde der verschlüsselte Ordnername auf erster Ebene erstellt. Danach kopiere ich dessen Namen, entferne den Ordner und benenne das Original entsprechend um.

Konfiguration vorbereiten

Damit die Konfiguration persistent ist, kopiere sie vom Standardspeicherort zu deinem Dataset und mache sie privat. Sie sollte standardmäßig unter /root/.config/rclone/rclone.conf zu finden sein, aber du kannst den genauen Pfad auch mit dem Befehl rclone config file anzeigen.

cp /root/.config/rclone/rclone.conf /mnt/rclone/
chmod 400 /mnt/rclone/rclone.confCode-Sprache: Bash (bash)

Um später auch die Ausgabe des rclone-Prozesses zu speichern, erstelle ein logs-Verzeichnis in deinem Dataset.

mkdir /mnt/rclone/logsCode-Sprache: Bash (bash)

Cron-Job konfigurieren

Da du nicht die Cloud Sync Tasks im Bereich „Data Protection“ in TrueNAS SCALE verwenden kannst, musst du einen Cron-Job einrichten, um rclone auszuführen. Gehe dafür zu System Settings > Erweitert > Cron Jobs und füge einen neuen Cron-Job hinzu. Ich verwende mehrere Cron-Jobs für mehrere Ordner, weshalb alle meine Beschreibungen den Ordnernamen enthalten.

Formular, um einen Cron-Job zu erstellen

Für meine Seafile-Daten verwende ich die Beschreibung „rclone OneDrive Seafile“.

Als Befehl verwende ich folgenden:

rclone -v copy /mnt/data/seafile/ onedrive-crypt:/Seafile --log-file=/mnt/rclone/logs/seafile.log  --config="/mnt/rclone/rclone.conf"Code-Sprache: Bash (bash)

Als „Als Benutzer ausführen“ wähle ich meinen eigenen Benutzer.

Konfiguriere den Zeitplan so, wie du möchtest.

Deaktiviere das Auswahlkästchen für „Standardausgabe ausblenden“. In meinem Fall wurde die Standardausgabe zwar sowieso immer mit ausgegeben, aber auch hier: lieber auf Nummer sicher gehen.

Speichere die Konfiguration und du bist bereit.

Protokoll-Rotation

Da rclone in dieser Konfiguration immer dieselbe Protokolldatei verwendet, ist es empfehlenswert, diese regelmäßig zu rotieren, um die Dateigröße zu verringern. Glücklicherweise kommt TrueNAS SCALE bereits mit logrotate integriert, das du genau dafür verwenden kannst.

Erstelle zuerst die logrotate.conf in /mnt/rclone/logrotate.conf:

/mnt/rclone/logs/*.log {
	su matze matze
	rotate 7
	copytruncate
	daily
	compress
	missingok
	notifempty
}

Passe den Benutzernamen in Zeile zwei entsprechend deiner Konfiguration an.

Um die Protokoll-Rotation regelmäßig auszuführen, füge einen neuen Cron-Job mit folgendem Befehl hinzu:

logrotate /mnt/rclone/logrotate.confCode-Sprache: Bash (bash)

Du kannst diesen Befehl auch zuerst manuell nach einem Tag ausführen, um sicherzustellen, dass alles funktioniert.

Da rclone nicht sonderlich gut mit logrotate zusammenarbeitet (siehe die Diskussion hier), empfehle ich einen individuellen Zeitplan. Dafür verwende ich die Voreinstellung „Daily“, aber ändere die Minuten auf 55, sodass ich ziemlich sicher sein kann, dass die rclone-Aufgabe bis dahin bereits abgeschlossen ist, bevor die Protokolldatei rotiert wird. Das genügt für meine stündlichen Aufgaben. Wenn du deine Aufgaben seltener ausführst, kannst du die Protokolle einfach ein paar Minuten vor deren Ausführung rotieren lassen.

Verschlüsseln der Konfiguration

Wenn du deine rclone-Konfigurationsdatei verschlüsseln möchtest (empfohlen), kannst du das über rclone config machen. Wähle dazu den Eintrag „Set configuration password“ und folge den Anweisungen.

Vergiss nicht, die Konfigurationsdatei wieder in dein Dataset zu konfigurieren, nachdem du sie verschlüsselt hast (und natürlich nach jeder Änderung)!

Danach musst du jedes Mal das Passwort eingeben, wenn rclone versucht, auf die Konfigurationsdatei zuzugreifen. Also auch für Cron-Jobs, was für deren automatische Ausführung hinderlich ist. Um das zu ändern, gibt es zwei Möglichkeiten. Die erste ist die Verwendung der Variable RCLONE_CONFIG_PASS direkt in deinem Cron-Job-Befehl, indem du diesen Code vor dem eigentlichen rclone-Befehl hinzufügst:

export RCLONE_CONFIG_PASS=your-password;Code-Sprache: Bash (bash)

Allerdings mag ich nicht, dass so das Passwort direkt in der Webansicht von TrueNAS angezeigt wird.

Für die zweite Methode, speichere das Passwort in der Datei /mnt/rclone/rclone.conf.p:

nano /mnt/rclone/rclone.conf.p
chmod 400 /mnt/rclone/rclone.conf.pCode-Sprache: Bash (bash)

Dann kannst du den Parameter password-command von rclone verwenden, um Zugriff auf das Passwort in deinem Cron-Job-Befehl zu bekommen, indem du ihn damit erweiterst:

--password-command "cat /mnt/rclone/rclone.conf.p"Code-Sprache: Bash (bash)

Fazit

Auch wenn es nicht in der schönen Webansicht und sich nicht an derselben Stelle wie andere Cloud Sync Tasks befindet, so ist es dennoch möglich, dieselbe Funktionalität wie vorher zu erhalten und deine Daten via rclone zu Microsoft OneDrive von deinem TrueNAS SCALE aus zu synchronisieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert