Sincronizzazione dei dati con rsync

rsync è un versatile strumento che semplifica il trasferimento dei file in rete e accelera la sincronizzazione delle cartelle locali. Grazie all’elevata flessibilità, è un’eccellente opzione per eseguire svariate operazioni a livello di file.

Cos’è rsync?

rsync, abbreviazione di “remote synchronization”, è un flessibile strumento di sincronizzazione collegabile in rete su Linux. Il programma open source permette di sincronizzare file e cartelle in sistemi locali o in rete. A questo scopo utilizza una tecnologia di trasmissione dati differenziale che trasferisce solo le sezioni di dati effettivamente modificate. Così si riduce al minimo lo scambio di dati, accelerando notevolmente il processo di sincronizzazione. Grazie a una serie di opzioni, rsync permette di controllare con precisione il comportamento di sincronizzazione. La sintassi flessibile consente inoltre sia di creare semplici copie locali sia di eseguire complesse sincronizzazioni in rete.

La sintassi di rsync

La sintassi di comando di rsync, strutturata in modo semplice, assomiglia a quella di SSH, SCP e CP. La struttura di base si presenta come segue:

rsync [OPTION] source destination
bash

In source viene inserito il percorso di origine da cui sincronizzare i dati, mentre in destination si indica il percorso di destinazione. A questo scopo rsync offre numerose opzioni per adattare il processo di sincronizzazione alle proprie esigenze. Tra le opzioni usate più di frequente troviamo:

  • -a (archive): contiene in modo ricorsivo autorizzazioni di file, indicatori di data e ora, gruppi, utenti e proprietà particolari dei file.
  • -v (verbose): mostra informazioni dettagliate sul processo di sincronizzazione.
  • -r (recursive): sincronizza le cartelle e i relativi contenuti in modo ricorsivo.
  • -u (update): trasmette solo i file aggiornati rispetto a quelli già presenti nella cartella di destinazione.
  • -z (compress): riduce il traffico di dati in rete.
  • -n –itemize-changes: mostra una lista delle modifiche da apportare.
  • --delete: elimina dalla cartella di destinazione i file che non esistono più nella cartella di origine.
  • --exclude: esclude determinati file o cartelle dalla sincronizzazione.
  • --dry-run: simula il processo di sincronizzazione senza trasmettere realmente i file.
  • --progress: indica l’avanzamento del processo di trasmissione dei file.
  • --partial: i file trasmessi parzialmente restano nella cartella di destinazione se la trasmissione viene interrotta. Quando viene eseguita una nuova trasmissione, il processo riprende dall’ultimo stato.

Esempio di sintassi di rsync

Per spiegare la sintassi di rsync ricorriamo a un esempio pratico. Con il comando seguente vengono create la cartella dir1 con 100 file di prova vuoti e una seconda cartella dir2 vuota:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Il contenuto di dir1 può essere sincronizzato nello stesso sistema con dir2 usando l’opzione -r:

$ rsync -r dir1/ dir2
bash

In alternativa, si può usare l’opzione -a, che esegue la sincronizzazione in modo ricorsivo e contiene link simbolici, file di dispositivi speciali, data e ora di modifica, gruppi, proprietari e autorizzazioni:

$ rsync -a dir1/ dir2
bash

N.B.: la barra rovesciata (/) alla fine della cartella di origine in un comando rsync è importante perché indica che è il contenuto della cartella a dover essere sincronizzato, non la cartella stessa.

$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
…
bash

Senza la barra rovesciata dopo la cartella di origine, il contenuto di questa cartella viene copiato nella cartella di destinazione:

$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
…
bash

Nella pratica è quindi utile inserire la barra rovesciata alla fine della cartella di destinazione per assicurarsi che il processo di sincronizzazione si svolga nel modo previsto e che il contenuto della cartella di origine confluisca correttamente nella cartella di destinazione.

rsync: sincronizzazione con un sistema remoto

In generale, sincronizzare un sistema remoto con rsync non è difficile. Basta disporre dell’accesso SSH al computer remoto e conoscere i dati di autenticazione necessari. rsync utilizza spesso SSH (Secure Shell) per la comunicazione sicura con i sistemi remoti. Lo strumento deve essere installato su entrambi i lati.

Una volta verificato l’accesso SSH tra i due computer è possibile sincronizzare la cartella dir1 su un computer remoto. In questo caso deve essere trasmessa la cartella vera e propria, pertanto nel comando seguente non è presente la barra rovesciata alla fine della cartella:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Quando una cartella viene spostata da un sistema locale a un sistema remoto si parla di operazione “push”. Al contrario, l’operazione “pull” sincronizza una cartella remota con un sistema locale. La sintassi si presenta come segue:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash
Server virtuali (VPS)
Virtualizzazione totale con accesso root completo
  • Traffico illimitato e fino a 1 Gbit/s di larghezza di banda
  • Storage SSD NVMe veloce
  • Plesk Web Host Edition incluso

Utilizzo di altre opzioni in rsync

Le opzioni presentate sopra consentono di personalizzare il comportamento di rsync.

Trasmissione di file non compressi con rsync

Il carico sulla rete durante la trasmissione di file non compressi può essere ridotto con l’opzione -z procedendo come indicato di seguito:

$ rsync -az source destination
bash

Visualizzare l’avanzamento e riprendere le trasmissioni interrotte

Con -P puoi combinare fra loro le opzioni --progress e --partial. Visualizzi così una panoramica dell’avanzamento della trasmissione e allo stesso tempo puoi riprendere le operazioni interrotte:

$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
…
bash

Esegui nuovamente il comando per generare un output più breve. Grazie a data e ora delle modifiche, con rsync è possibile determinare se sono state apportate modifiche.

$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Mantenere le cartelle sincronizzate con rsync

Per assicurarsi che due cartelle restino realmente sincronizzate è necessario eliminare dalla cartella di destinazione i file che sono stati rimossi dall’origine. Tuttavia, per impostazione predefinita rsync non elimina i file dalla cartella di destinazione. Questo comportamento può essere modificato con l’opzione --delete. Questa opzione è da usare in ogni caso con cautela, perché elimina dalla cartella di destinazione i file che non sono più presenti nell’origine.

Prima di ricorrervi, si dovrebbe usare l’opzione --dry-run, che permette di eseguire una simulazione del processo di sincronizzazione senza eliminare i file effettivi. Puoi così assicurarti che vengano apportate solo le modifiche desiderate, senza perdere accidentalmente dati importanti:

$ rsync -a --delete source destination
bash

Escludere file e cartelle dalla sincronizzazione con rsync

In rsync con l’opzione --exclude è possibile escludere determinati file e cartelle dalla sincronizzazione. È utile quando non si devono sincronizzare ad esempio file temporanei, file di registro o altri contenuti.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Una volta indicato un modello per escludere file è possibile sovrascrivere l’esclusione per i file corrispondenti a un altro modello con l’opzione --include=.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Salvare i backup con rsync

L’opzione --backup offre la possibilità di salvare backup dei dati importanti. È usata insieme all’opzione --backup-dir, che indica la cartella in cui devono essere salvati i file di backup:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Per un quadro più preciso dei diversi scenari di backup, consulta il nostro articolo su come creare un backup del server con rsync.

Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top