I siti web Netdesign utilizzano cookies. Maggiori informazioni alla pagina Informativa Cookies. Continuando la navigazione accetti il loro utilizzo. Se non desideri i Cookie vai alla pagina Opt out Cookies

Buon Mercoledì da Netdesign -Vieni a trovarci su Facebook o Twitter, scrivici a info@netd.it o chiamaci ai numeri 095 293 18 11 / 338 94 23 302

Rsync, copie incrementali alla velocità della luce

rsync è un potentissimo software a riga di comando per la sincronizzazione di file e cartelle in ambiente Unix, rispolveriamone le potenzialità.

ATTENZIONE! Il contenuto di questo articolo necessita di revisione perché redatto più di un anno fa. I comandi e la sintassi utilizzata potrebbero non funzionare in seguito a cambiamenti o aggiornamenti del software. Scrivici a Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo. se hai bisogno di assistenza.

Articolo pubblicato il 28/10/2012

rsync fa parte del coltellino svizzero di ogni amministratore di sistema, permette di sincronizzare file e cartelle in modo efficiente sfruttando un algoritmo di una leggerezza ed efficienza praticamente uniche al mondo. Rsync è ormai incluso in tutte (o quasi) le distribuzioni GNU/Linux ed è entrato di fatto tra gli strumenti standard degli ambienti UNIX (e non solo). Esistono versioni di rsync per quasi tutti i sistemi operativi conosciuti dall'uomo, e la sua portabilità ne ha sicuramente incrementato la diffusione.

Un po' di storia

Il progetto rsync è nato il 22 Giugno del 1996 (questa è la data del primo commit) dalle sapienti mani di Andrew Tridgell, che all'epoca rivestiva ruoli di Amministratore UNIX e ricercatore nell'ambito dei supercomputer presso la Australian National University (considerato il miglior istituto di istruzione superiore dell'Australia).

Lo stesso Tridgell ne aveva annunciato il primo rilascio il 19 giugno dello stesso anno con un messaggio nel quale discuteva le caratteristiche fondamentali di rsync, come l'utilizzo della codifica delta, il supporto ai trasferimenti crittografati tramite ssh ed opzioni per la copia di collegamenti simbolici, permessi, proprietà e timestamp.

Le caratteristiche appena elencate lo rendevano una validissima alternativa al vecchio rcp il quale, oltre ad avere un approccio più semplicistico nella copia dei file - rcp copia e basta, rsync sincronizza - era assolutamente insicuro dal momento che il trasferimento poteva avvenire solamente in chiaro.

Buona parte del lavoro svolto da Tridgell durante la progettazione e lo sviluppo di rsync, ha dato vita alla sua tesi di dottorato (Ph.D.) dal titolo "Efficient Algorithms for Sorting and Synchronization" (Visualizza il pdf in Google Docs) terminata nel Febbraio del 1999.

Ancora prima di dar vita a rsync, lo stesso Tridgell aveva seguito e sviluppato parecchi progetti software nel corso del suo dottorato presso la ANU. Durante il loro sviluppo, l'attesa da affrontare per il trasferimento dei codici sorgenti attraverso la linea analogica dell'epoca (1992-1995 c.ca) da una parte all'altra del pianeta era notevole, a tal punto da essere l'ispirazione per la nascita di rsync:

3.1 Inspiration

The rsync algorithm was developed out of my frustration with the long time it took to send changes in a source code tree across a dialup network link. I have spent a lot of time developing several large software packages during the course of my PhD and constantly finding myself waiting for source files to be transferred through my modem for archiving, distribution or testing on computers at the other end of the link or on the other side of the world. The time taken to transfer the changes gave me plenty of opportunity to think about better ways of transferring files.

Le idee alla base di rsync erano molto chiare, era necessario poter contare su uno strumento software in grado di sincronizzare file o directory, indipendentemente dalla loro natura e in tempi ragionevoli, minimizzando la quantità di dati da trasferire (cruciale per i trasferimenti via rete) ed utilizzando efficaci tecniche di analisi nei casi in cui fossero coinvolti, nel trasferimento, differenti versioni dello stesso file. Tutto questo cercando di utilizzare il minor numero di cicli di CPU possibile.

Gli obiettivi preposti sono stati raggiunti per intero e, con il passare degli anni, rsync ha raggiunto un ottimo livello di stabilità ed affidabilità.
L'ultima major relase, la 3.0.0, è stata rilasciata nel Marzo del 2008 apportando, come si evince dall'annuncio via mail e dal changelog, alcune importanti migliorie al design interno di rsync, migliorie che lo hanno reso ancora più efficiente e veloce soprattutto nel sincronizzare grosse quantità di dati.

L'algoritmo alla base di rsync

L'algoritmo di rsync parte dal presupposto che, nel caso in cui sia necessario copiare un file F da un computer sorgente A ad una destinazione B, e la destinazione (B) abbia già una versione simile ma non identica del file F, risulta molto conveniente trasferire soltanto le differenze tra le due versioni e non l'intero file. Questa semplice affermazione è l'origine del lavoro di Tridgell, il quale, per lo sviluppo di rsync, ha speso la maggior parte delle sue energie nel rendere le fondamentali operazioni di analisi e confronto il più veloci ed efficienti possibile.

3.2 Designing a remote update algorithm

Say you have two computers A and B connected by a low-bandwidth high-latency link. At the start of the transfer you have a file with bytes ai on A and a file with bytes bi on B. Assume for the sake of discussion that 0 ≤ i < n so that each file is n bytes long. The aim of the algorithm is for B to receive a copy of the file from A. The basic structure of a remote update algorithm will be:

  1. B sends some data S based on bi to A
  2. A matches this against ai and sends some data D to B
  3. B constructs the new file using bi , S and D

The questions then is what form S will take, how A uses S to match on ai and how B reconstructs ai. Even with this simple outline we can already see that the algorithm requires a probabilistic basis to be useful. The data S that B sends to A will need to be much smaller than the complete file in order for there to be any significant speedup.
This means that S cannot uniquely identify all possible files bi which means that the algorithm must have a finite probability of failure. We will look at this more closely after the algorithm has been fleshed out some more.

La prima strategia seguita dall'algoritmo è stata quella di spezzare il file (sia sorgente che destinazione) in blocchi di larghezza L, calcolando per ogni blocco una firma (checksum) debole con un basso consumo di CPU (rolling hash). Il basso consumo di CPU offerto da questo approccio permette di ottenere un algoritmo leggero ma col difetto di poter produrre falsi positivi (blocchi che producono un match pur possedendo delle differenze).

Per ovviare ai limiti intrinsechi della firma debole e CPU-friendly, rsync calcola un secondo checksum (MD4 hash), più complesso ed affidabile soltanto per i blocchi che producono un match, riducendo al minimo la quantità di firme complesse da calcolare e massimizzando l'affidabilità dell'intero algoritmo. Nella logica interna di rsync, l'algoritmo di rolling hash debole lavora quindi come un filtro, riducendo di fatto la quantità di firme complesse MD4 hash da calcolare.

3.2.3 Two signatures

The solution (and the key to the rsync algorithm) is to use not one signature per block, but two. The first signature needs to be very cheap to compute for all byte offsets and the second signature needs to have a very low probability of collision. The second, expensive signature then only needs to be computed by A at byte offsets where the cheap signature matches one of the cheap signatures from B.

[...]

3.2.5 Selecting the fast signature

The role of the fast signature in rsync is to act as a filter, preventing excessive use of the strong signature algorithm. The most important features is that it needs to be able to be computed very cheaply at every byte offset in a file.

Dalla versione 3.0.0 gli sviluppatori di rsync hanno rimpiazzato l'algoritmo MD4 con il più recente MD5 migliorando notevolmente l'affidabilità e la velocità dell'intera procedura di analisi e di match. L'MD5 possiede effettivamente parecchie differenze rispetto all'MD4 che lo rendono più veloce nel produrre L'effetto Avalanche.

Usare rsync localmente

È spesso utile dover sincronizzare due directory - o filesystem diversi - che risiedono localmente (sul medesimo host) con l'obiettivo di ottenere delle copie di backup o di condividere - ad esempio su un supporto di storage USB - un'intera struttura di directory con un'altra persona.
In questi casi rsync diventa la chiave di volta e può essere usato con i seguenti flag:

rsync -avz /path/to/source /path/to/destination
/*
-a modalità "archivio" (copia ricorsivamente tutti i file, permessi e timestamp ricorsivamente)
-v modalità "verbose", offre un output verboso
-z comprime i dati usando l'algoritmo gzip
*/

Nel blocco di codice appena visto, rsync copia le differenze dai file presenti nel path sorgente a quelli presenti nel path di destinazione ricorsivamente, mantenendo inalterati permessi, timestamp e collegamenti simbolici e considerando come versione aggiornata, la versione dei file presenti nella directory sorgente.

Nel caso in cui le directory sorgente e destinazione fossero eterogenee (contengano cioè entrambe delle versioni aggiornate di alcuni files), è necessario aggiungere l'opzione -u pensata per preservare tutti i file nella directory di destinazione, a patto che abbiano un timestamp più recente dello stesso file nella directory sorgente. In questo caso, il comando diventa:

rsync -auvz /path/to/source /path/to/destination
/*
-a modalità "archivio"
-u evita la copia per i file che risultano più recenti nella directory di destinazione
-v modalità "verbose"
-z comprime i dati
*/

 

Hai trovato utile questo articolo?
Lasciaci un tuo sincero feedback

Pubblicati di recente

Articoli e documenti pubblicati di recente su questo sito web

  1. Netdesign a Catania con il MED alla Feltrinelli
    online dal 30.10.2018
    ultima modifica il 13.11.2018


  2. Online il nuovo Fareweb news
    online dal 28.10.2018
    ultima modifica il 29.10.2018


  3. Doposcuola Montessori
    online dal 26.09.2018
    ultima modifica il 17.11.2018


  4. Volcano Excursions
    online dal 24.09.2018
    ultima modifica il 24.09.2018


  5. Vacanze finite? Riparti con Netdesign!
    online dal 12.09.2018
    ultima modifica il 12.09.2018


  6. Chiusura per ferie 2018
    online dal 23.07.2018
    ultima modifica il 23.07.2018


Ulteriori articoli recenti