☁️rclone – „rsync für Cloud-Speicher“

rclone spricht mit über 70 Speicherdiensten über eine gemeinsame Oberfläche: Objektspeicher (S3, B2, Azure …), Cloud-Laufwerke (Google Drive, OneDrive, Dropbox), WebDAV/Nextcloud, SFTP und lokale Platten. Statt Byte-Deltas überträgt rclone ganze Dateien – dafür parallel, mit Hash-Prüfung und optional verschlüsselt.

🔌Remotes: Name + Backend + Zugangsdaten

# ~/.config/rclone/rclone.conf  (nur Platzhalter!)
[nas]
type = sftp
host = nas.example.org
user = backup
key_file = ~/.ssh/id_ed25519_backup

[b2]
type = b2
account = <KEY_ID>
key = <APPLICATION_KEY>

[nextcloud]
type = webdav
url = https://cloud.example.org/remote.php/dav/files/<BENUTZER>/
vendor = nextcloud
user = <BENUTZER>
pass = <MIT rclone obscure VERSCHLEIERT>

[tresor]
type = crypt
remote = b2:mein-backup-bucket/verschluesselt
filename_encryption = standard
directory_name_encryption = true
password = <MIT rclone obscure VERSCHLEIERT>
password2 = <SALT, EBENFALLS VERSCHLEIERT>

Anlegen mit rclone config (Assistent). Alle Werte hier sind Platzhalter.

Syntax: remote:pfad – z. B. b2:mein-backup-bucket/fotos,nas:/srv/daten, nextcloud:Dokumente. Ohne Doppelpunkt ist es ein lokaler Pfad. Mit rclone listremotes sieht man alle Remotes, mit rclone lsd remote: die obersten Ordner.
⚠️ Passwörter in rclone.conf
pass/password sind nur verschleiert (rclone obscure, AES-CTR mit festem Schlüssel) – nicht sicher. Die ganze Datei lässt sich mit rclone config encryption set verschlüsseln; das Passwort kommt dann aus RCLONE_CONFIG_PASS.
💡 Auch ohne Datei
Jedes Remote geht per Umgebungsvariable (RCLONE_CONFIG_B2_TYPE=b2 …) oder als Verbindungszeichenkette::sftp,host=nas.example.org,user=backup:/srv/daten.

🗄️Backends im Vergleich

Wie rclone vergleicht, hängt davon ab, was ein Speicher kann: welcher Hash gespeichert wird und ob die Änderungszeit (ModTime) gelesen und geschrieben werden kann.
BackendtypeHashModTimeServer-CopyGroß/klein egalBesonderheit
Lokales DateisystemlocalalleDR/W✖✖Kein Remote nötig: normale Pfade wie /srv/daten. Hashes werden bei Bedarf berechnet.
Amazon S3 & kompatible (MinIO, Wasabi …)s3md5R/W✔✖MD5 = ETag bei einfachen Uploads; bei Multipart-Uploads speichert rclone die MD5 in den Metadaten. Mtime steht in den Metadaten (X-Amz-Meta-Mtime).
Backblaze B2b2sha1R/W✔✖SHA-1 je Datei; alte Versionen bleiben je nach Bucket-Lebenszyklus erhalten.
WebDAV (Nextcloud, ownCloud …)webdavsha1, md5R/W✔✖Reines WebDAV kennt weder Mtime noch Hashes – erst mit vendor = nextcloud/owncloud/fastmail unterstützt rclone SHA-1/MD5 und Änderungszeiten.
SFTPsftpmd5, sha1DR/W✔✖Hashes nur, wenn per SSH-Shell md5sum/sha1sum ausgeführt werden dürfen.
Google Drivedrivemd5, sha1, sha256DR/W✔✖Erlaubt doppelte Dateinamen im selben Ordner (→ rclone dedupe). Google-Docs haben keine echte Größe.
Microsoft OneDriveonedrivequickxorDR/W✔✔Eigener QuickXorHash; Groß-/Kleinschreibung wird nicht unterschieden, einige Zeichen werden ersetzt.
DropboxdropboxdropboxR/W✔✔Eigener Dropbox-Content-Hash.
Crypt (Hülle um ein anderes Remote)crypt—wie darunter✔✖Verschlüsselt Inhalt (und optional Namen). Hashes des Klartexts sind nicht verfügbar – Vergleich über Größe + Mtime; `rclone cryptcheck` prüft trotzdem.

ModTime: R/W = lesen und nachträglich setzen, DR/W = auch für Verzeichnisse, R = nur beim Hochladen setzbar, – = nur Upload-Zeit. Quelle: rclone.org/overview (Stand rclone 1.7x).

💡 Prüfsummen vs. ModTime
Standard: Größe + ModTime. Weicht nur die ModTime ab und ist ein gemeinsamer Hash vorhanden, prüft rclone den Hash – bei gleichem Inhalt setzt es nur den Zeitstempel neu. --checksum vergleicht Größe + Hash und ist ideal zwischen zwei Remotes mit gleichem Hash (z. B. S3 → S3), weil dort keine Daten gelesen werden müssen.
✅ Server-seitig kopieren
rclone copy s3:alt s3:neu lädt nichts herunter – der Anbieter kopiert selbst. Das klappt nur, wenn Quelle und Ziel dasselbe Remote sind und das Backend „Copy“ unterstützt. Sonst: herunterladen und wieder hochladen.

⌨️Die wichtigsten Befehle

📋rclone copy

Kopiert neue/geänderte Dateien ins Ziel. Löscht nie etwas.

rclone copy /srv/daten b2:backup-bucket/daten -P
🔁rclone sync

Macht das Ziel identisch zur Quelle – löscht im Ziel Überzähliges (standardmäßig erst nach allen Transfers).

rclone sync /srv/daten b2:backup-bucket/daten --dry-run
🚚rclone move

Wie copy, löscht danach die Quelldateien. Mit --delete-empty-src-dirs auch leere Quellordner.

rclone move /srv/eingang nextcloud:Archiv --min-age 30d
↔️rclone bisync

Zwei-Wege-Abgleich. Erster Lauf mit --resync, danach ohne. Sicherheitsbremse --max-delete (Standard 50 %).

rclone bisync ~/Dokumente nextcloud:Dokumente --resync --dry-run
✅rclone check

Vergleicht Größe und Hash, ändert nichts. Für Crypt-Remotes: cryptcheck.

rclone check /srv/daten b2:backup-bucket/daten --one-way
🗂️rclone mount

Remote per FUSE als Laufwerk einhängen. Für normale Programme meist --vfs-cache-mode writes oder full nötig.

rclone mount nextcloud: ~/cloud --vfs-cache-mode writes --daemon
📡rclone serve

Ein Remote über ein Protokoll bereitstellen: http, webdav, sftp, ftp, s3, nfs, dlna, restic, docker.

rclone serve webdav tresor: --addr 127.0.0.1:8080 --user demo --pass <PASSWORT>
📊rclone ncdu

Belegten Platz eines Remotes interaktiv im Terminal erkunden (wie ncdu).

rclone ncdu b2:backup-bucket

Wie rclone sync intern vorgeht, zeigt der Schritt-Debugger „rclone sync“.

🔐Crypt-Remote: verschlüsselt in der Cloud

Ein Crypt-Remote ist eine Hülle um ein anderes Remote. Was man hineinschreibt, landet verschlüsselt im darunterliegenden Speicher – der Anbieter sieht nur Datenmüll.

📦 Dateiinhalt: Header + 64-KiB-Chunks

Byte Klartext
Header
„RCLONE\0\0“ 8 B
Nonce 24 B
Tag
16 B
Chunk 1
13 B
13
Klartext
61
verschlüsselt
+48
369 % Aufschlag

Formel: 32 + Klartext + 16 × ⌈Klartext / 65 536⌉. Jeder Chunk ist eine NaCl-SecretBox (XSalsa20 + Poly1305), die Nonce wird je Chunk hochgezählt. Aus der Objektgröße lässt sich die Klartextgröße exakt zurückrechnen – die Länge ist also nicht geheim (auch die Änderungszeit nicht).

🏷️ Dateinamen: filename_encryption

im Crypt-Remoteliegt beim Anbieter als
liste.txtl3rqh16a02kg71smbp5ug3sj28
fotosue69aehlulqrtsqr4st2jojddg
fotos/berg.jpgue69aehlulqrtsqr4st2jojddg/asjvo9qpm19tc1jm8ur5tthb9k
fotos/neu.jpgue69aehlulqrtsqr4st2jojddg/jcecaa5j2fjb6aaqsbb3qegjas
urlaub.jpgtkv1u9fpibf9oebh6mv3aiqdd0
urlaub.jpegrscr6gqdha806r5ucsocr57m1s
  • Jedes Pfadsegment einzeln: PKCS#7-Padding, AES-256 im EME-Modus, dann Base32 nach RFC 4648 (Alphabet 0–9 und a–v, kleingeschrieben, ohne „=“) – funktioniert auch bei Anbietern, die Groß-/Kleinschreibung nicht unterscheiden.
  • Deterministisch: gleicher Name → gleicher verschlüsselter Name (sonst könnte rclone nichts wiederfinden). „fotos“ ergibt immer ue69….
  • Kein gemeinsamer Präfix: „urlaub.jpg“ und „urlaub.jpeg“ sehen völlig verschieden aus.
  • Namen bis etwa 143 Zeichen sind überall unproblematisch.

Echte Ausgaben von rclone cryptdecode --reverse (v1.75.1) mit dem Beispielpasswort „beispielpasswort“ und Salz „beispielsalz“. Schlüssel: scrypt (N=16384, r=8, p=1) aus password + password2 → 80 Byte Schlüsselmaterial.

# Beispiel: NAS → B2, verschlüsselt
[b2]
type = b2
account = <KEY_ID>
key = <APPLICATION_KEY>

[tresor]
type = crypt
remote = b2:mein-backup-bucket/verschluesselt
filename_encryption = standard
password = <VERSCHLEIERT>
password2 = <VERSCHLEIERT>

$ rclone sync /srv/daten tresor:daten --dry-run
$ rclone cryptcheck /srv/daten tresor:daten
⚠️ Passwort weg = Daten weg
Der Schlüssel wird aus Passwort und Salz (password2) abgeleitet. Ein Passwortwechsel für vorhandene Daten ist nicht möglich – man muss alles über ein neues Crypt-Remote neu hochladen. rclone.conf (oder zumindest die beiden Passwörter) deshalb getrennt sicher aufbewahren.

🧩Chunker und Union

🧱 chunker – große Dateien zerlegen

Teilt Dateien über chunk_size (Standard 2 GiB) in Stücke namensDATEI.rclone_chunk.001, .002 … – für Anbieter mit Größenlimit pro Datei. Nach außen sieht man wieder eine Datei.

[gross]
type = chunker
remote = nextcloud:Archiv
chunk_size = 1Gi

🧺 union – mehrere Remotes als eins

Fasst „Upstreams“ zu einem Dateibaum zusammen. Richtlinien entscheiden, wohin geschrieben wird: Standard create_policy = epmfs(vorhandener Pfad, meister freier Platz), action_policy = epall, search_policy = ff.

[alles]
type = union
upstreams = /mnt/platte1 /mnt/platte2 b2:bucket:ro

🎛️Nützliche Flags

--dry-run / -nnichts ändern, nur protokollieren, was passieren würde
--interactive / -ivor jeder ändernden Aktion nachfragen
--transfers 4parallele Übertragungen (Standard 4)
--checkers 8parallele Vergleiche (Standard 8)
--checksum / -cGröße + Hash statt Größe + ModTime vergleichen
--size-onlynur die Größe vergleichen
--modify-window 2sZeitabweichung tolerieren (z. B. FAT)
--filter-from regeln.txtFilterregeln (+/-) aus Datei, von oben nach unten
--bwlimit "08:00,512k 18:00,30M 23:00,off"Bandbreite, auch als Zeitplan; Einheit Byte/s (KiB/s ohne Suffix)
--backup-dir b2:alt/2026-09-24überschriebene/gelöschte Dateien dorthin verschieben
--max-delete 100höchstens so viele Löschungen
--fast-listrekursives Listing in wenigen Aufrufen (spart API-Aufrufe, braucht RAM)
-P / --progressFortschritt live anzeigen
--log-file rclone.log -vProtokoll in eine Datei
regeln.txt für --filter-from
# erste passende Regel gewinnt
- .DS_Store
- *.tmp
- /Papierkorb/**
+ /Dokumente/**
+ /Fotos/**
- *
⚠️ Filter-Unterschiede zu rsync
  • --include/--exclude nicht mischen – rclone ordnet nach Flag-Typ, nicht nach Position. Besser: --filter bzw. --filter-from.
  • --include hängt automatisch - ** an.
  • Ordnerinhalt ausschließen: - /ordner/**; eine Verzeichnisregel - /ordner/ erspart rclone zusätzlich das Auflisten des Ordners.
  • Test: rclone ls quelle: --filter-from regeln.txt bzw. -vv --dump filters.

🚦Rückgabecodes

0Erfolg
1Nicht näher eingeordneter Fehler
2Syntax- oder Bedienfehler
3Verzeichnis nicht gefunden
4Datei nicht gefunden
5Vorübergehender Fehler (weitere Versuche könnten helfen)
6Weniger schwere Fehler (NoRetry)
7Fataler Fehler (z. B. Konto gesperrt)
8Übertragungsgrenze --max-transfer erreicht
9Erfolgreich, aber nichts übertragen (nur mit --error-on-no-transfer)
10Zeitgrenze --max-duration erreicht

Quelle: rclone.org/docs, „List of exit codes“.