rclone und unraid, nächste Iteration

Das in Howto: rclone unraid edition verwendete Docker-Image binhex-rclone hat den Nachteil nur einzelne Unterverzeichnisse synchronisieren zu können und ist sehr eingeschränkt, was die Verzeichnisstruktur angeht. Deshalb starte ich einen zweiten Versuch mit rclone von Waseh.

Nach der Installation des Plugins wird automatisch das Executable runtergeladen und ein Wrapper angelegt:

$ cat /usr/sbin/rclone
#!/bin/bash
config=/boot/config/plugins/rclone/.rclone.conf
        rcloneorig --config $config "$@";
$ ls -la /usr/sbin/rcloneorig 
-rwxr-xr-x 1 root root 60776600 Mar 24 14:06 /usr/sbin/rcloneorig*

Die Konfigurationsdatei wie hier beschrieben erstellt und übernommen werdden: Howto: rclone mit Nextcloud-Remote

Ausgehend vom Nextcloud-Root-Verzeichnis sollen standardmäßig alle Ordner synchronisiert werden, mit einigen Ausnahmen auf verschiedenen Ordner-Tiefen – das entspricht in etwa dem Standard-Verhalten des Nextcloud-Desktop-Clients in dem der Sync einiger Ordner deaktiviert wurde:

- Ordner1
  - Ordner1.1 (exclude)
  - Ordner1.n
- Ordner2 (exclude)
- Ordner3
  - Ordner3.1 (exclude)
  - Ordner3.2
  - Ordner3.3

Das exclude-Statement sieht dann folgendermaßen aus:

--exclude "/Ordner1/Ordner1.1/" --exclude "/Ordner2/" \
--exclude "/Ordner3/Ordner3.1/"

Man beachte hier das führende “/”. Damit ist sichergestellt, dass exakt dieser Ordner vom Wurzelverzeichnis aus gematched wird. Ein einfaches “Ordner1.1/” würde dazu führen das aus Versehen ein gleichnamiger Ordner in einem andern Verzeichnis exkludiert werden würde. Das abschließende “/” matched den kompletten Ordner-Baum und sorgt dafür, dass nicht unnötigerweise rekursiv gesucht wird. Die rclone-Dokumentation beschreibt die Filter-Möglichkeiten ausführlich.

Die Angabe der exclude-Statements macht die Commandline unübersichtlich, deshalb kommen sie in eine eigene Datei die mit --exclude-from referenziert wird. Beim Speicherort für diese Datei entscheide ich mich dafür, ein eigenes Verzeichnis im appdata – Share anzulegen:

$ cat /mnt/user/appdata/waseh-rclone/config/excludes.txt
/Ordner1/Ordner1.1/
/Ordner2/
/Ordner3/Ordner3.1/

rclone kennt ein praktisches ncdu – ähnliches Command mit dem man leicht überprüfen kann, ob der exclude-Mechanismus wie gewünscht funktioniert:

rclone ncdu nextcloud: --exclude-from /mnt/user/appdata/waseh-rclone/config/excludes.txt

Läuft das Ganze unbeaufsichtigt ist es sinnvoll eine Log-Datei zu schreiben. Deshalb gibt es in dem “waseh-rclone” – Ordner noch einen Unterordner “logs” und der Aufruf erweitert sich um folgendes:

--log-file=/mnt/user/appdata/waseh-rclone/logs/log.txt --log-level INFO

Der ganze Aufruf inklusive Log-Parameter wandert in die ausführbare Datei /mnt/user/appdata/waseh-rclone/run_rclone.sh:

#!/usr/bin/env bash

rclone --dry-run sync nextcloud: /mnt/user/myshare/my_nextcloud \
  --exclude-from /mnt/user/appdata/waseh-rclone/config/excludes.txt \
  --log-file=/mnt/user/appdata/waseh-rclone/logs/log.txt --log-level INFO

Nach dem initialen Testen, kann das “–dry-run” entfernt werden.

Damit das ganze automatisiert abläuft, kann man den Aufruf von run_rclone.sh mit Hilfe des user scripts plugin als cron-Job anlegen: