Rsync su Linux e Windows: i trucchi meno conosciuti per creare backup e sincronizzare file

Rsync è uno strumento potente per sincronizzare e copiare file su Linux, con supporto per backup incrementali, compressione dati, preservazione di permessi e gestione remota via SSH. Vediamo come funziona e qualche trucco meno conosciuto.

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

  1. Sempre testare i comandi con --dry-run prima di eseguire operazioni distruttive (--delete).
  2. Creare script di backup automatizzati con logging e notifiche via email.
  3. Monitorare spazio su disco prima dei backup incrementali.
  4. Per ambienti critici, combinare rsync con snapshot a livello di filesystem (Btrfs, ZFS) per backup coerenti.
  5. 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.

Ti consigliamo anche

Link copiato negli appunti