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/rclone
Code-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.conf
Code-Sprache: Bash (bash)
Um später auch die Ausgabe des rclone
-Prozesses zu speichern, erstelle ein logs
-Verzeichnis in deinem Dataset.
mkdir /mnt/rclone/logs
Code-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.
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.conf
Code-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.p
Code-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.