back to top

Sincronizzare file e cartelle con rsync

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.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Linux: recuperare una partizione con GNU Parted o Gpart

A volte, nell'uso quotidiano del computer, possono capitare dei...

Differenze tra su e sudo in Linux

su e sudo, vengono considerati a torto due comandi...

Creare una lista dei programmi installati su Ubuntu (per effettuarne il ripristino)

In questo breve post vedremo come visualizzare tutto il...

Come svuotare la memoria Cache in Linux?

La memoria cache è stata creata perché, anche quando...

Installare un’interfaccia grafica su Ubuntu Server

Indipendentemente dalla versione di riferimento, il ramo principale della...

Creiamo un file server con Samba

La finalità di una rete locale di computer (LAN)...
Pubblicitร