Rsync è uno degli strumenti più potenti e flessibili per la sincronizzazione e la copia di file su Linux. Nato nel 1996, rsync è diventato lo standard per backup, migrazioni, deploy e sincronizzazioni di sistemi locali e remoti, grazie alla sua efficienza, affidabilità e versatilità. A differenza dei comandi tradizionali di copia (cp
, scp
), rsync trasferisce solo le differenze tra sorgente e destinazione (ad esempio i file nuovi o modificati), riducendo tempi e banda.
Sulla maggior parte delle distribuzioni Linux, rsync risulta preinstallato. In caso contrario, può essere installato tramite il gestore di pacchetti di riferimento: con il comando rsync --version
si può controllare la versione eventualmente presente.
Nel seguito non vogliamo ammorbarvi proponendovi qualcosa di simile a una delle tante guide generiche su rsync facilmente reperibili online. D’altra parte c’è anche il comando man
: non è complicato verificare la sintassi del comando e adattarla alle proprie esigenze. Il nostro intento, in questo caso, è provare a far emergere dettagli poco conosciuti di rsync, confrontando lo strumento con altri tool alternativi.
Le caratteristiche di rsync in breve
- Sincronizzazione incrementale: trasferisce solo file modificati o nuovi.
- Compressione dei dati: riduce il volume di dati trasferiti.
- Supporto per connessioni remote: tramite SSH o rsync daemon.
- Preservazione dei metadati: permessi, timestamp, proprietari e gruppi.
- Gestione file efficiente: rsync si comporta brillantemente anche con file di grandi dimensioni.
rsync per esempi: alcuni comandi di base
La sintassi che permette di avviare un semplice copia di dati locale è la seguente:
rsync -av /home/utente/documenti/ /backup/documenti/
-a
(archive) preserva permessi, timestamp, link simbolici e ricorsione.
-v
(verbose) mostra i dettagli dell’operazione.
La barra finale /
è importante: indica di copiare il contenuto della directory, non la directory stessa: il primo percorso è la sorgente, il secondo la destinazione.
Usando l’opzione --exclude
si può eventualmente specificare di ignorare file o pattern specifici. Aggiungendo l’opzione --delete
si possono rimuovere dalla destinazione i file eliminati dalla sorgente.
Fondamentale per mantenere backup identici e risparmiare spazio.
rsync permette però di richiedere anche una sincronizzazione dati remota via SSH:
rsync -avz -e ssh /home/utente/documenti/ utente@server:/backup/documenti/
L’opzione -z
abilita la compressione dati mentre -e ssh
specifica il protocollo SSH per la connessione remota.
Un modello di comando rsync utilizzabile “per tutte le stagioni”
Uno dei modi più intelligenti di invocare rsync è il seguente, sia su cartelle locali che via SSH:
rsync -Pavh --dry-run /sorgente/ /destinazione/
-P
è la combinazione di due opzioni: --partial
e --progress
. La prima mantiene file parzialmente trasferiti in caso di interruzione, evitando di ricominciare da zero; la seconda mostra l’avanzamento del trasferimento per ogni file.
--dry-run
è molto importante: in questo modo rsync simula l’operazione richiesta, senza fare modifiche reali. È utile per verificare cosa succederebbe, quali file verrebbero copiati o eliminati, senza rischiare di sovrascrivere o cancellare dati.
Dopo aver eseguito un comando rsync con l’opzione --dry-run
, non succede nulla ai file reali. L’opzione --dry-run
serve proprio a simulare l’operazione, mostrando cosa rsync farebbe se fosse eseguito realmente, senza copiare, modificare o eliminare alcun file. Una volta verificato l’output, basta togliere l’opzione e rsync eseguirà il comando realmente, preservando file, permessi e timestamp come previsto.
Automazione con cron
Ovviamente, le attività svolte con rsync possono essere automatizzate. Nell’esempio seguente, rsync effettua un backup alle 2 di notte:
0 2 * * * rsync -av --delete /home/utente/documenti/ /backup/documenti/
Per approfondire, suggeriamo di fare riferimento al nostro articolo su cron e crontab. Inoltre, i log possono essere indirizzati a un file per monitorare errori e avvisi.
Consigli pratici e trucchi avanzati con rsync
Come accennato in precedenza, vi è una differenza cruciale tra l’includere o meno la barra finale nella directory sorgente. Ad esempio, il comando seguente copia solo il contenuto di /sorgente
dentro /destinazione
:
rsync -av /sorgente/ /destinazione/
In questo secondo caso, invece, rsync copia l’intera directory sorgente dentro /destinazione
, creando /destinazione/sorgente
.
rsync -av /sorgente /destinazione/
Uso di checksum per file critici
Rsync normalmente confronta dimensione e timestamp per decidere se trasferire un file. In scenari in cui l’integrità assoluta è essenziale, si può usare ad esempio:
rsync -avc /sorgente/ /destinazione/
La novità consiste nell’aggiunta dell’opzione -c
che forza il confronto tramite checksum (schema SHA1-like, quindi basato su hash, interno a rsync), garantendo che anche file identici nella dimensione ma modificati nel contenuto siano comunque aggiornati. Il rovescio della medaglia è che questo approccio aumenta i tempi di trasferimento su directory molto grandi.
Sincronizzazione sicura su server remoti
La sincronizzazione di file e cartelle tra server remoti utilizza il protocollo SSH come standard nel caso di rsync.
Al comando visto in precedenza per la connessione via SSH, si può eventualmente aggiungere un’opzione per la porta da usare (ad esempio, -p 2222
), ma soprattutto specificare una chiave privata per un collegamento passwordless (-i ~/.ssh/id_rsa
).
Rsync può inoltre funzionare come daemon dedicato, utile in reti interne chiuse:
rsync rsync://utente@host/modulo /destinazione/
Configurabile attraverso il file /etc/rsyncd.conf
, permette l’autenticazione tramite password o file secrets.
Consigli finali da esperti
- Sempre testare i comandi con
--dry-run
prima di eseguire operazioni distruttive (--delete
). - Creare script di backup automatizzati con logging e notifiche via email.
- Monitorare spazio su disco prima dei backup incrementali.
- Per ambienti critici, combinare rsync con snapshot a livello di filesystem (Btrfs, ZFS) per backup coerenti.
- Considerare la compressione lato filesystem (gzip, bzip2) solo quando rsync non basta per ridurre lo spazio.
Rsync in reti ibride: Linux, Windows e sistemi remoti
In un contesto aziendale moderno, le reti sono spesso ibride, cioè composte da computer Linux e Windows, con server locali e sistemi remoti accessibili via Internet, anche tramite VPN.
Windows non include rsync nativamente, ma è possibile utilizzarlo ad esempio tramite l’ottimo Windows Subsystem for Linux (WSL): è oggi la soluzione più stabile e compatibile, specialmente in scenari di automazione.
Nelle configurazioni ibride, quindi, rsync può sincronizzare file tra Linux e Windows ma vanno tenute in debita considerazione alcune differenze chiave:
- Permessi e attributi: Windows non gestisce permessi Linux (uid, gid, chmod) nativamente. A questo proposito, si possono usare le opzioni
--no-perms
e —chmod=ugo=rwX
per evitare conflitti di permessi. - Fine riga dei file di testo: Linux usa LF, Windows usa CRLF.
- Caratteri nel nome file: Windows ha restrizioni su caratteri come :, *, ?. È quindi indispensabile evitare la gestione di file con nome non compatibile o usare opzioni di filtro con
--exclude
.
Rsync su cartelle Windows condivise via Samba/SMB
Windows permette di condividere cartelle in rete tramite SMB la cui implementazione aperta si chiama Samba. Anche se rsync non supporta nativamente il protocollo SMB, è possibile sincronizzare una cartella Windows montandola su Linux come filesystem locale. In pratica, rsync tratta la cartella condivisa come se fosse locale, applicando tutte le sue funzionalità.
Prima di usare rsync, è necessario montare la cartella condivisa. Esempio:
sudo mkdir -p /mnt/windows_share
sudo mount -t cifs //WINDOWS-PC/NomeCondivisione /mnt/windows_share \
-o username=utente,password=miaPassword,uid=$(id -u),gid=$(id -g),vers=3.0
Una volta montata la condivisione, rsync la tratta come una directory locale. Esempio:
rsync -av --progress /home/utente/documenti/ /mnt/windows_share/
Come accennato in precedenza, tuttavia, Windows non supporta i permessi Linux e rsync ignorerà queste differenze (si può usare --no-perms
per evitare warning). Dal punto di vista delle prestazioni, SMB è più lento di SSH su LAN per grandi quantità di file.
Confronto delle funzionalità di rsync su Linux e su cartelle Windows condivise via Samba
Funzionalità / Opzione rsync | Linux (ext4, xfs, ecc.) | Windows via Samba (SMB/NTFS) | Note pratiche |
---|---|---|---|
Permessi (chmod) | Preservati con -a | Non preservati | Usare –no-perms per evitare warning; Samba applica permessi secondo create mask e directory mask |
Proprietario / gruppo (chown) | Preservati con -a | Ignorati | La proprietà su share SMB viene determinata dall’utente con cui si monta la share |
Timestamp (-t) | Preservati | Generalmente preservati | Funziona nella maggior parte dei casi, utile per backup incrementali |
Link simbolici (-l) | Preservati | Copiati come file regolari o ignorati | NTFS supporta link simbolici solo in casi particolari; meglio evitare su share |
Link hard (-H) | Preservati | Non supportati | NTFS supporta hard link limitati, ma Samba spesso non li mantiene |
File speciali (device, FIFO, socket) | Preservati | Ignorati | Share SMB non supporta questi file, rsync li salta |
Backup incrementale / –delete | Perfettamente funzionante | Funziona solo sui file copiati | Rsync mantiene struttura e contenuto; cancellazioni applicate solo ai file copiati |
Compressione (-z) | Funziona | Funziona | Dipende dalla rete; utile su LAN lenta o WAN |
Esecuzione sicura su remoto | SSH nativo | No SSH diretto; usare share montata | Non è un vero trasferimento remoto, ma un mount locale che rsync legge come directory |
Rsync via SSH verso Windows
Anche se Windows non ha un server SSH nativo come Linux, oggi è possibile ottenere qualcosa di molto simile grazie a OpenSSH Server installabile come componente opzionale in Windows 10 e Windows 11.
La sintassi classica di rsync rimane la stessa di Linux. Tuttavia, rsync via SSH su Windows preserva contenuti e timestamp, ma non permessi e proprietà come su Linux.
La struttura delle directory è conservata e sovrapponibile con quanto accade sul “pinguino”: è quindi possibile organizzare backup e sincronizzazioni incrementali. Inoltre, non ci sono limitazioni di accesso come SMB; SSH fornisce connessione sicura cifrata anche sulla rete Internet.
Funzionalità / Opzione rsync | Risultato su Windows via SSH | Note pratiche |
---|---|---|
Permessi (chmod) | Ignorati | Windows non gestisce UID/GID nativi; rsync genera warning se usi -a |
Proprietario / gruppo (chown) | Ignorati | L’utente Windows che esegue SSH diventa proprietario dei file |
Timestamp (-t) | Preservati | Funziona generalmente, OpenSSH scrive correttamente le date |
Link simbolici (-l) | Limitati | Windows supporta link simbolici solo con permessi amministrativi e flag speciali |
Link hard (-H) | Non supportati | NTFS li supporta solo localmente; rsync li ignora via SSH |
File speciali | Ignorati | Device, FIFO e socket non hanno corrispondenti su Windows |
Compressione (-z) | Funziona | Riduce banda su connessioni WAN |
Backup incrementale / –delete | Funziona | Rsync aggiorna solo file modificati e può eliminare file nella destinazione |
C’è un comando equivalente a rsync su Windows?
Su Windows non esiste un vero e proprio rsync nativo che funzioni esattamente come su Linux preservando permessi, proprietà, timestamp, link simbolici e file speciali, perché Windows gestisce i permessi e gli attributi in modo diverso (ACL su NTFS, senza UID/GID). Tuttavia, esistono strumenti equivalenti o simili che possono replicare gran parte delle funzionalità di rsync, in particolare per backup completi con preservazione dei dettagli dei file.
Il comando più vicino a rsync su Windows è Robocopy (Robust File Copy), incluso in tutte le versioni recenti di Windows. La sintassi di base è quella che segue:
robocopy "C:\Sorgente" "D:\Destinazione" /MIR /COPYALL /R:3 /W:5 /LOG:C:\backup.log
/MIR
Replica la struttura della directory, incluse le cancellazioni (equivalente a –delete di rsync)
/COPYALL
Copia tutti gli attributi: dati, permessi (ACL), timestamp, proprietà, auditing e così via
/R:3
Numero di tentativi di retry in caso di errore
/W:5
Attesa tra retry (secondi)
/LOG:file
Salva log dettagliato dell’operazione
/XO
Esclude file più vecchi nella destinazione (equivalente a backup incrementale)
Robocopy preserva permessi NTFS e timestamp, supporta mirror di directory come rsync con --delete
, può gestire reti SMB e percorsi UNC (\\Server\Share
).
Confronto dettagliato tra rsync e Robocopy
Caratteristica / Funzionalità | rsync (Linux/Unix) | Robocopy (Windows) | Note pratiche |
---|---|---|---|
Preservazione permessi | Sì (chmod con -a) | Sì, ACL NTFS (/COPYALL) | Rsync preserva permessi Linux; Robocopy preserva permessi NTFS |
Preservazione proprietario / gruppo | Sì (-o -g con permessi adeguati) | Sì, se permessi NTFS lo permettono (/COPYALL) | Su Windows il proprietario sarà l’utente che esegue Robocopy |
Preservazione timestamp | Sì (-t) | Sì (/COPYALL) | Funziona in entrambe le piattaforme |
Link simbolici | Sì (-l) | Limitati (/SL) | Robocopy gestisce solo alcuni link; rsync li preserva perfettamente su Linux |
Link hard | Sì (-H) | No | NTFS supporta hard link solo localmente; Robocopy li ignora |
File speciali (device, FIFO, socket) | Sì (-D) | No | Robocopy ignora dispositivi e pipe; rsync li preserva su Linux |
Sincronizzazione remota | Sì via SSH (-e ssh) | Limitata | Robocopy lavora via UNC (SMB), non SSH; rsync può lavorare anche via WAN sicuro |
Backup incrementale | Sì (con timestamp o checksum) | Sì (/MIR, /XO, /XN) | Entrambi aggiornano solo file modificati |
Eliminazione file nella destinazione | Sì (–delete) | Sì (/MIR) | Rsync più flessibile su filtri e esclusioni |
Compressione durante il trasferimento | Sì (-z) | No (solo rete locale o compressione a monte) | Robocopy non comprime i dati |
Logging avanzato | Sì (–log-file) | Sì (/LOG:file) | Entrambi permettono audit dettagliato |
Cross-platform / compatibilità | Linux / Unix / WSL su Windows | Windows / Rete SMB | Rsync funziona anche su WSL; Robocopy non nativamente su Linux |
Velocità su grandi quantità di piccoli file | Buona, ottimizzato differenziale | Molto buona su LAN | Rsync invia solo delta dei file; Robocopy copia tutto (ma è ottimizzato per Windows) |
Gestione errori / retry | –partial, –ignore-errors | /R:n, /W:n | Robocopy ha retry automatici configurabili; rsync deve essere combinato con script per retry avanzati |
L’alternativa multipiattaforma a rsync: Syncthing
A differenza di strumenti tradizionali come rsync, che operano in modalità client-server e richiedono trasferimenti manuali o pianificati, c’è un’apprezzata utilità open source (distribuita sotto licenza MPL v2.0) che mantiene aggiornati in tempo reale tutti i dispositivi collegati, senza necessità di un server centrale.
Si chiama Syncthing, è multipiattaforma, disponibile nativamente su Linux, macOS, Windows e dispositivi mobili Android, con applicazioni sperimentali anche per altri sistemi. Uno strumento sempre più apprezzato per ambienti eterogenei e per quegli utenti che vogliono sincronizzare file tra PC, laptop, NAS o smartphone.
La sicurezza è garantita da cifratura end-to-end e autenticazione basata su ID univoco dei dispositivi. Syncthing garantisce il versioning dei file e la gestione automatica dei conflitti, funzionalità assenti in rsync.
Tuttavia, il funzionamento in background comporta un maggiore consumo di risorse e può richiedere più tempo per indicizzare grandi volumi di file rispetto a rsync, che resta estremamente efficiente per trasferimenti batch o backup incrementali.
In un altro articolo abbiamo visto nel dettaglio come funziona la sincronizzazione file veloce e sicura con Syncthing: qui ci limitiamo a mettere in evidenza le principali differenze rispetto a rsync.
Aspetto | rsync | Syncthing |
---|---|---|
Tipo di sincronizzazione | Client-server (unidirezionale) | Peer-to-peer decentralizzato (bidirezionale) |
Persistenza | Copia i file a richiesta | Sincronizzazione continua in background |
Direzionalità | Unidirezionale | Bidirezionale |
Frequenza | Manuale o schedulata | Automatica e in tempo reale |
Cifratura in transito | Solo con SSH | Sempre cifrato con TLS e autenticazione reciproca |
Interfaccia | Solo CLI | GUI web, CLI e API REST |
Uso tipico | Backup, deploy, migrazioni di file | Sincronizzazione continua tra dispositivi multipiattaforma |
Versioning e conflitti | Non nativo, l’ultimo che scrive sovrascrive | Versioning integrato e gestione automatica dei conflitti |
Consumo di risorse | Minimo, solo durante l’esecuzione | Maggiore, servizio residente con indicizzazione continua |
Multipiattaforma | Linux/macOS/Windows via Cygwin o WSL | Linux, macOS, Windows nativo, Android/iOS, NAS |
Quando usarlo | Backup programmati, migrazioni controllate | Sincronizzazione continua e sicura tra dispositivi multipiattaforma |
In sintesi, rsync è perfetto per backup programmati, migrazioni controllate e script automatizzati su server; Syncthing è la scelta ideale quando si desidera una sincronizzazione continua, sicura e bidirezionale tra dispositivi multipiattaforma, senza dipendere da server esterni o interventi manuali. La scelta tra i due strumenti dipende quindi dall’obiettivo: efficienza e controllo per rsync, flessibilità e automazione per Syncthing.