Automatischer Bi-Sync von ownCloud oder Nextcloud auf ein lokales NAS (NFS/SMB), inkl.:
- rclone bisync (Cloud ↔ NAS) mit Deletes (Löschungen werden in beide Richtungen synchronisiert)
- Remote gewinnt bei Konflikten: Bei Datei-Konflikten wird die Cloud-Version bevorzugt und die lokale Konfliktversion verworfen.
- 3+ Accounts (beliebig viele) über eine Konfig-Datei
- Telegram Alerts (Sync-Fehler inkl. betroffener Datei, Remote nicht erreichbar, Low Disk Space)
- Low Disk Space Alarm (Default: < 20 GiB frei)
- ClamAV täglicher Vollscan + Quarantäne (infizierte Dateien werden verschoben)
- systemd Timer (statt Cron)
- Logrotate für Logs
Ziel: Datenfluss Cloud ↔ NAS. Lokale Änderungen werden zurück in die Cloud synchronisiert.
- Ubuntu 24.04 minimal (VM oder Bare Metal)
- NAS ist unter
/mnt/nasgemountet- Daten:
/mnt/nas/daten - Quarantäne:
/mnt/nas/quarantine
- Daten:
- ownCloud/Nextcloud Zugangsdaten (am besten App-Passwort)
- Telegram Bot Token + Chat ID
Für ownCloud ist häufig diese URL korrekt:
https://<HOST>/remote.php/webdav/
Alternativ / je nach Setup funktioniert auch:
https://<HOST>/remote.php/dav/files/<USERNAME>/
Tipp zum Testen (ohne rclone):
curl -u USER:PASS -X PROPFIND "https://<HOST>/remote.php/dav/files/<USER>/" -sS -i | headKlonen des Repositories und Starten des Installers:
git clone https://github.com/dataklo/nextcloud-nas-pull-sync.git
cd nextcloud-nas-pull-sync
chmod +x install.sh update.sh uninstall.sh
sudo ./install.shFalls du stattdessen ein ZIP-Archiv verwendest:
unzip nextcloud-nas-pull-sync.zip
cd nextcloud-nas-pull-sync
sudo ./install.shDer Installer fragt dich interaktiv nach:
- Telegram Token & Chat ID
- Mount-Pfad (Default:
/mnt/nas) - Low-Space Threshold (Default: 20 GiB)
- Accounts (Instance Name, rclone remote, Zielpfad)
- optional: rclone Remotes anlegen (WebDAV URL, Vendor owncloud/nextcloud, User, App-Passwort)
Danach laufen die Timer automatisch.
systemctl list-timers | grep nc-
systemctl status nc-pull@<instance>.timer
journalctl -u nc-pull@<instance>.service -n 100 --no-pagerFormat:
INSTANZ|RCLONE_REMOTE|ZIELPFAD
Beispiel:
oc-sync-1|oc1|/mnt/nas/daten/oc-sync-1
oc-sync-2|oc2|/mnt/nas/daten/oc-sync-2
oc-sync-3|oc3|/mnt/nas/daten/oc-sync-3
TG_TOKEN="123456:ABC..."
TG_CHAT_ID="7174123807"
Hier kannst du Intervalle/Thresholds ändern:
MIN_FREE_GIB(Default 20)SYNC_INTERVAL(Default2h)SPACE_CHECK_INTERVAL(Default15min)SPACE_ALERT_COOLDOWN(Default6h)MAX_DELETE(Default50, Prozentgrenze für rclone bisync)RCLONE_TRANSFERS,RCLONE_CHECKERS,RCLONE_TIMEOUT,RCLONE_CONTIMEOUT
Wenn rclone meldet, dass frühere Path-Listings fehlen, startet nc_pull automatisch genau einen Recovery-Lauf mit --resync --resync-mode path1. Dabei gilt die Cloud-Seite (REMOTE: / Path1) als maßgeblich; lokale Abweichungen werden entsprechend überschrieben bzw. abgeglichen.
Du solltest trotzdem prüfen, warum der vorherige Lauf kritisch abgebrochen ist, z. B. Stromausfall, volles Dateisystem, unterbrochener Mount oder Remote-Ausfall. Die Logs liegen unter /var/log/nc-sync/bisync-<instanz>-<zeit>.json; der Recovery-Lauf schreibt zusätzlich ...-resync.json.