rsync fa parte delle utilità indispensabili del buon amministratore di sistema. Grazie ad rsync, infatti, è possibile gestire (in modo facile e velocissimo) la sincronizzazione di file e cartelle sia localmente che tra due diversi sistemi connessi in Rete.
rsync è un tool nato e maturato in ambiente UNIX (la prima release è datata 1996) che si basa su un sofisticato algoritmo sviluppato dal programmatore australiano Andrew Tridgell che garantisce allo stesso tempo velocità ed integrità dei dati. Oltre al suo potente algoritmo, rsync dispone di altre interessanti funzionalità come, ad esempio, il supporto per il protocollo ssh (fondamentale per incronizzazioni da remoto) nonchè la possibilità di utilizzare diversi sistemi di compressione dei dati (come ad esempio gzip).
Installare rsync
Una precisazione: la popolarità di rsync è tale che praticamente ogni sistema GNU/Linux ne integra una copia, ma non solo: pur essendo un tool per sistemi UNIX, oggi è possibile trovare versioni di rsync per qualsiasi sistema operativo (compreso Windows) cosa che rende ancor più interessante ed indispensabile questo straordinario strumento.
rsync su GNU/Linux
Come detto rsync è installato di default su quasi tutti i sistemi basati su architettira UNIX. Se sul vostro sistema non fosse presente la sua installazione è un gioco da ragazzi.
Su Debian e Ubuntu:
apt-get install rsync
Su RedHat, CentOS, Fedora:
yum install rsync
rsync su Windows
Come detto rsync è un tool originario dei sistemi UNIX, tuttavia anche su Windows è possibile utilizzarlo installando il pacchetto Cygwin (una libreria che consente di utilizzare in ambiente Windows i più famosi tools di Linux) oppure cwRsync.
rsync su Mac
rsync è installato di default su tutte le versioni più recenti di Mac OS X a partire dalla 10.4. Per le versioni più datate è possibile installare rsync eseguendo la procedura descritta in questa guida.
Usare rsync per una sincronizzazione in locale
Come detto, grazie a rsync è possibile sincronizzare file e cartelle in modo facile e sicuro. Supponendo di voler sincronizzare due cartelle in locale (ad esempio per creare un backup o una copia "esportabile" su una chiavetta USB) potremmo usare una sintassi del genere:
rsync -avz /path/to/source /path/to/destination
Vediamo nel dettaglio le opzioni utilizzate:
- a => modalità "archivio" (copia ricorsivamente tutti i file, preservando permessi, timestamp, link simbolici, owner e gruppi);
- v => modalità "verbose", offre un output a video circa il risultato dell’elaborazione;
- z => comprime i dati usando l’algoritmo gzip;
Non sovrascrivere i file modificati di recente
Si faccia attenzione: utilizzando la sintassi vista sopra, rsync andrà ad allineare il contenuto del path di destinazione con quello del path sorgente! Se nella cartella di destinazione si hanno dei file più recenti rispetto alla cartella sorgente e li si vuole preservare si dovrà aggiungere il comando -u, in caso contrario, infatti, la cartella di destinazione viene allineata con la sorgente a prescindere che i files in essa contenuti siano più recenti o meno.
rsync -auvz /path/to/source /path/to/destination
Sincronizzare un solo file
Volendo è possibile utilizzare rsync per effettuare il backup di un singolo file specificandone il nome in qualità di sorgente:
rsync -avz /path/to/source/filename /path/to/destination
Sincronizzare solo la struttura della directory
E’ possibile decidere di sincronizzare solo la struttura della directory sorgente nella destinazione remota. Per farlo useremo l’opzione -d in questo modo:
rsync -avd /path/to/source/filename /path/to/destination
Eliminare i file non presenti nella posizione sorgente
Supponiamo di avere dei files nella cartella di destinazione che non sono presenti nella cartella sorgente. Come si comporta rsync in questa situazione? Normalmente ignora questi file e li lascia dove sono. Se, tuttavia, preferiamo eliminarli possiamo utilizzarel’opzione –delete in questo modo:
rsync -avd --delete /path/to/source/filename /path/to/destination
Sincronizzare solo i file già presenti nella cartella di destinazione
E’ anche possibile dire ad rsync di sincronizzare esclusivamente i files già presenti nella folder di destinazione evitando cioè di crearne di nuovi qualora nella sorgente siano presenti files non rinvenibili nella directory target. Per una simile eventualità si utilizzerà l’opzione –existing in questo modo:
rsync -avd --existing /path/to/source/filename /path/to/destination
Usare rsync per una sincronizzazione da remoto
Come detto una delle principali caratteristiche di rsync è la possibilità di eseguire trasferimenti cifrati tramite protocollo ssh grazie al quale è possibile gestire sincronizzazioni files e cartelle di due sistemi connessi alla Rete.
La grande potenzialità di Rsync over SSH consiste, appunto, in questo: nella possibilità di eseguire sincronizzazioni tra macchine remote in modo sicuro ed efficente.
Una simile procedura si rivela molto utile, ad esempio, per eseguire dei backup su server remoti piuttosto che per trasferire grandi moli di dati in vista della migrazione di un sito web da un server ad un altro.
Vediamo di seguito la sintassi per importare dati da un server remoto:
rsync -auvz user@host:/path/to/source /path/to/destination
Questa sintassi, ad esempio, potrebbe essere utilizzata per salvare in locale un backup di un server remoto.
Viceversa per esportare dati da locale verso un server remoto:
rsync -auvz /path/to/source user@host:/path/to/destination
Questa istruzione potrebbe essere utilizzata da un server per esportare, su un altro server, un backup dei dati.
Come potete vedere le opzioni sono le medesime viste per la sincro in locale, l’unica differenza tra le sintassi riguarda l’indicazione di un’accoppiata user@host a precedere la cartella sorgente o di destinazione.
E’ evidente che una volta lanciato il comando il sistema remoto richiederà l’inserimento della password prima di procedere all’esecuzione dei compiti impostati.
Si noti che con questa sintassi rsync utilizza una connessione SSH agganciandosi alla porta di default (TCP 22); se invece il server remoto utilizzasse una porta diversa da quella di default sarà necessario specificare gli argomenti da passare ad SSH direttamente nel flag –rsh in questo modo:
rsync -auvz --rsh="ssh -p PORTA" user@host:/path/to/source /path/to/destination
Dove PORTA, ovviamente, può essere qualsiasi porta dalla quale ci sia un server ssh in ascolto.
Vedere lo stato di avanzamento del download/upload
Per vedere lo stato di avanzamento della sincro è sufficiente aggiungere il flag –progress in questo modo:
rsync -auvz --progress user@host:/path/to/source /path/to/destination
Escludere dalla sincro i file molto grandi
E’ possibile impostare un filtro sulle dimensioni dei file in modo da escludere dalla sincronizzazione, ad esempio, i file troppo grandi o troppo piccoli. Per farlo si utilizzano i flag –max-size e –min-size in questo modo:
rsync -auvz --max-size='500K' user@host:/path/to/source /path/to/destination
Conclusioni
Chiunque si trovi ad avere a che fare, anche non abitualmente, con i sistemi informatici deve conoscere rsync: il suo utilizzo, infatti, semplifica tutte le operazioni di backup e trasferimento dati rendendo estremamente semplici e sicure quelle effettuate da o verso postazioni remote.