rclone — synchronizacja z chmurą, szyfrowanie i mount
Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Backup
rclone to "rsync dla chmury" — narzędzie CLI które mówi natywnymi protokołami ponad 70 dostawców obiektowego storage i plików: AWS S3, Google Cloud Storage, Google Drive, Dropbox, OneDrive, Backblaze B2, Wasabi, Azure, MinIO, SFTP, WebDAV, Mega, pCloud i wiele innych. Obsługuje kopiowanie, synchronizację, szyfrowanie end-to-end, mountowanie jako FUSE filesystem oraz serwowanie własnego endpointa (WebDAV, SFTP, FTP, HTTP).
Instalacja
# Jednolinijkowy installer (najnowsza wersja) curl https://rclone.org/install.sh | sudo bash # Alternatywa - z repo dystrybucji sudo apt install rclone # Debian / Ubuntu sudo dnf install rclone # RHEL / Rocky # Weryfikacja rclone version
Konfiguracja remote — interaktywny kreator
rclone config # Kroki: # n - new remote # name: moj-s3 # Storage: s3 # provider: AWS (lub MinIO, Wasabi, Backblaze B2, inne) # env_auth: false # access_key_id: TWOJ_KLUCZ # secret_access_key: TWOJ_SEKRET # region: eu-central-1 # endpoint: (puste dla AWS, URL dla MinIO) # location_constraint: eu-central-1 # ACL: private # y - zapisz # Lista skonfigurowanych remotes rclone listremotes # Plik konfiguracyjny (zaszyfrowany opcjonalnie) ls -la ~/.config/rclone/rclone.conf
Typowe backendy i konfiguracja
| Backend | Provider | Wymagania |
|---|---|---|
| s3 | AWS S3, MinIO, Wasabi, B2 (S3), DO Spaces | access_key + secret_key |
| drive | Google Drive | OAuth (przeglądarka), scope drive lub drive.file |
| gcs | Google Cloud Storage | service account JSON albo OAuth |
| dropbox | Dropbox | OAuth (własny app albo shared) |
| onedrive | OneDrive Personal / Business / SharePoint | OAuth |
| b2 | Backblaze B2 (native) | application_key_id + application_key |
| sftp | Dowolny serwer SFTP | host, user, klucz SSH lub hasło |
| webdav | Nextcloud, ownCloud, dowolny WebDAV | URL, user, hasło |
| crypt | Wrapper szyfrujący inny remote | hasło + salt, backend do zaszyfrowania |
Podstawowe operacje
# Lista bucketow / katalogow rclone lsd moj-s3: # Lista plikow w buckecie rclone ls moj-s3:backups # Tree view rclone tree moj-s3:backups # Rozmiar rclone size moj-s3:backups # Copy - kopiuje pliki (nie usuwa z celu) rclone copy /var/www/uploads moj-s3:media/uploads --progress # Move - jak copy, ale po sukcesie usuwa ze zrodla rclone move /tmp/oldfiles moj-s3:archive/ --progress # Sync - robi z celu lustrzane odbicie zrodla (USUWA pliki w celu!) rclone sync /var/www/public moj-s3:cdn-mirror --progress # Delete - usuwa pliki ze zdalnego rclone delete moj-s3:backups/old-2025/ # Mkdir rclone mkdir moj-s3:new-bucket
Flag ostrożności: przed sync do ważnego celu zawsze uruchom z --dry-run — zobaczysz co zostanie usunięte bez faktycznej zmiany.
Filtry — włączanie i wykluczanie plików
# Wykluczenia przez --exclude (glob)
rclone copy /var/www moj-s3:backup \
--exclude "*.log" \
--exclude "cache/**" \
--exclude "node_modules/**"
# Tylko okreslone rozszerzenia
rclone copy /home moj-s3:photos \
--include "*.jpg" \
--include "*.png" \
--include "*.raw"
# Filtr z pliku
cat > /etc/rclone-filter.txt <<'EOF'
- *.tmp
- /cache/**
- /node_modules/**
+ *.php
+ *.html
+ *.css
- *
EOF
rclone sync /var/www moj-s3:site --filter-from /etc/rclone-filter.txt
# Pliki starsze niz 7 dni
rclone copy /logs moj-s3:archive --min-age 7d
# Pliki wieksze niz 100 MB
rclone copy /data moj-s3:big --min-size 100M Crypt — zaszyfrowany remote
Crypt to wrapper wokół innego remote — pliki są szyfrowane lokalnie przed uploadem. Dostawca
chmury widzi tylko nieczytelne blob i zaszyfrowane nazwy plików. Tworzysz go w
rclone config:
rclone config # n - new remote # name: secure # Storage: crypt # remote: moj-s3:encrypted-bucket/ (istniejacy S3 remote + sciezka) # filename_encryption: standard # directory_name_encryption: true # password: wygeneruj-losowe-dlugie-haslo # password2 (salt): wygeneruj-drugie-haslo # Teraz uzywaj tak samo jak zwykly remote rclone copy /secret-data secure: --progress # Plik konfiguracyjny - ZABEZPIECZ chmod 600 ~/.config/rclone/rclone.conf # Mozesz tez zaszyfrowac caly config hasłem (rclone config password)
Mount — cloud jako lokalny filesystem
# Zainstaluj fuse
sudo apt install fuse3
# Utworz punkt montowania
mkdir ~/cloud
# Mount
rclone mount moj-s3:backups ~/cloud \
--daemon \
--vfs-cache-mode writes \
--dir-cache-time 1h \
--buffer-size 32M \
--log-file /var/log/rclone-mount.log
# Teraz mozesz czytac jak zwykly filesystem
ls ~/cloud/
cp ~/cloud/db-backup.tar.gz /tmp/
# Umount
fusermount3 -u ~/cloud vfs-cache-mode: off (default, tylko read), minimal,
writes (write-through cache), full (pełny cache lokalny). Dla aplikacji
które piszą używaj co najmniej writes, dla media serwera
full.
Serve — rclone jako serwer
# Serwuj remote jako WebDAV (np. dla klienta Windows)
rclone serve webdav moj-s3:public \
--addr 0.0.0.0:8080 \
--user admin \
--pass tajne-haslo
# HTTP browser (tylko read)
rclone serve http moj-s3:public --addr 0.0.0.0:8080
# SFTP
rclone serve sftp moj-s3:data \
--addr 0.0.0.0:2022 \
--user myuser --pass mypass
# Restic REST server (dla backupu restic na zwykly S3)
rclone serve restic moj-s3:restic-repo --addr :8000 Automatyzacja — cron + systemd timer
#!/bin/bash
# /usr/local/bin/rclone-backup.sh
set -euo pipefail
LOG=/var/log/rclone-backup.log
echo "Start: $(date)" >> $LOG
rclone sync /var/www/uploads secure:uploads \
--log-file $LOG \
--log-level INFO \
--transfers 8 \
--checkers 16 \
--bwlimit 20M \
--exclude "cache/**"
echo "End: $(date)" >> $LOG # Crontab - codziennie o 4:00 0 4 * * * /usr/local/bin/rclone-backup.sh # Albo systemd timer w /etc/systemd/system/rclone-backup.timer [Unit] Description=Daily rclone backup [Timer] OnCalendar=*-*-* 04:00:00 Persistent=true [Install] WantedBy=timers.target
Przydatne flagi
-
--progress/-P— pokazuje real-time transfer progress -
--transfers N— liczba równoległych transferów (default 4) -
--checkers N— liczba równoległych operacji sprawdzania (default 8) -
--bwlimit 10M— limit bandwidth (np. 10 MB/s), można harmonogramem:--bwlimit "08:00,1M 20:00,10M" -
--fast-list— używaj list bulk (szybsze dla S3, więcej RAM) -
--dry-run— pokaż co zostanie zrobione, nie zmieniaj -
--retries 5— liczba retry po błędzie -
--checksum— porównuj po checksum zamiast po modtime+size (wolniejsze, ale pewniejsze)