Come usare rsync, esempi pratici

Spesso abbiamo bisogno di sincronizzare il contenuto di due directory o copiare il contenuto di una nell’altra. Anziché usare un semplice metodo di copia (come cp), è possibile spostare solo i file differenti fra le due, risparmiando tempo e banda. Rsync (Remote sync) è il migliore strumento in Linux/Unix per effettuare backup incrementali spostando solo i file nuovi o modificati, o tenere sempre sincronizzate due cartelle, locali o remote che siano. In questo articolo capiremo prima il comando in generale, le opzioni e forniremo alcuni esempi pratici.

Prima di tutto, occorre sapere che rsync ha numerosi vantaggi:

  • Copia o sincronizza file da e verso sistemi remoti in modo efficiente
  • Supporta la copia dei permessi, timestamp e symolic links
  • È più veloce di scp (Secure Copy) perché lavora in accordo con il server che invia/riceve soltanto i file che sono cambiati
  • Permette di risparmiare banda perché utilizza un sistema di compressione

Il comando rsync

ad esempio:

Trasferiamo tutti i file contenuti nella directory sorgente ~/Desktop/devdev alla directory di destinazione /Volumes/DiscoEsterno/Backup. Alla prima esecuzione, rsync copierà l’intero contenuto, dato che la directory destinazione è vuota. Nei casi successivi, ogni file che avrà subito modifiche nella cartella sorgente verrà sovrascritto in quella di destinazione. In questo caso abbiamo usato le opzioni -vrah, vediamo cosa significano.

Opzioni comuni

-v significa verbose, avremo più informazioni a schermo

-r significa recursive, con questa opzione rsync leggerà nelle cartelle

-h trasforma in byte in un formato più leggibile (es. Mb, Gb)

-a significa archive. Questa modalità corrisponde a scrivere -rlptgoD e riporta tutte le condizioni originali del file dalla destinazione alla sorgente come timestamp, link simbolici, permessi, proprietario e gruppo

-z dice a rsync di comprimere i dati trasmessi

--delete dice a rsync di cancellare sulla destinazione i file non presenti nella sorgente

--exclude dice a rsync quali file o directory ignorare

--progress mostra a schermo il trasferimento dei file

-u imposta che i file presenti in destinazione più nuovi di quelli contenuti in sorgente vengano ignorati

Sincronizzazione tra due directory locali

In questo esempio sincronizziamo la directory ~/Desktop/Grafica con /Volume/DiscoEsterno/backup, con le opzioni verbose, recursive e archive.

La cartella di destinazione non esisteva, rsync l’ha creata automaticamente.

Visualizzare l’avanzamento del trasferimento

Se vogliamo visualizzare l’avanzamento durante il trasferimento, è sufficiente usare l’opzione --progress

Esclusione di file o directory

Con l’opzione --exclude, possiamo specificare quali file, tipi di file o directory escludere dalla sincronizzazione. In quest’esempio abbiamo scelto di ignorare i file “.DS_Store” creati dal sistema macOS usando l’opzione --exclude=.DS_Store.

L’opzione –delete

Se un file o directory non esiste nella sorgente, ma esiste già nella destinazione, con l’opzione --delete possiamo cancellarlo da quest’ultima.

Effettuare una simulazione (dry run)

Se è la prima volta che usiamo rsync, oppure vogliamo avere un’anteprima di cosa succederà una volta eseguito, è possibile simulare un comando rsync per assicurarci di non esguire operazioni errate. Aggiungiamo l’opzione --dry-run

Sincronizzare una directory remota via SSH

Con rsync, possiamo usare SSH (secure shell) come modalità di trasferimento: usare il protocollo SSH ci garantisce che i nostri dati viaggino su un canale sicuro e criptato, in modo che nessuno possa leggere i dati mentre vengono trasmessi. Per specificare che si tratta di una connessione SSH, dobbiamo includere l’opzione -e ssh ed indicare destinazione o sorgente in modo appropriato.

Inoltre il prompt dei comandi ci chiederà la password dell’utente (in esempio root) quando effettuiamo il trasferimento, che avverrà sempre in modo sicuro.

Cancellare il contenuto una volta trasferito

In qualche caso potremmo decidere di cancellare automaticamente il contenuto di sorgente una volta che il trasferimento in destinazione sia avvenuto con successo. Per farlo, specifichiamo --remove-source-files tra le opzioni

Impostare un limite di banda (bandwidth limit)

Quando effettuiamo sincronizzazioni tra directory remote, a volte è necessario impostare un limite di velocità. Pensiamo ad esempio ad un backup remoto in esecuzione mentre stiamo lavorando: limitiamo la banda in upload con l’opzione --bwlimit=KBPS, esempio:

In questo modo limiteremo la banda a 100Kb/s.

Qui la documentazione completa.

rsnapshot

http://rsnapshot.org
rsnapshot-backup-incrementale-sincronizzato dal sito MIAMMAUSALINUX

rsnapshot è un'utilità di istantanea del filesystem basata su rsync

. rsnapshot rende facile creare snapshot periodici di macchine locali e macchine remote su ssh. Il codice fa ampio uso degli hard link quando possibile, per ridurre notevolmente lo spazio su disco richiesto.
A seconda della configurazione, è possibile impostare in pochi minuti. I file possono essere ripristinati dagli utenti che li possiedono, senza coinvolgere l'utente root.
Non ci sono nastri da cambiare, quindi una volta impostato, i tuoi backup possono essere eseguiti automaticamente da mani umane. E poiché rsnapshot mantiene solo un numero fisso (ma configurabile) di istantanee, la quantità di spazio su disco utilizzata non aumenterà continuamente.
È scritto interamente in perl senza dipendenze del modulo ed è stato testato con le versioni dalla 5.004 alla 5.16.3. Dovrebbe funzionare su qualsiasi sistema operativo compatibile UNIX ragionevolmente moderno.
rsnapshot era originariamente basato su un articolo chiamato Easy Automated Snapshot-Style Backups con Linux e Rsync , di Mike Rubel.
Se questa è la tua prima esperienza con rsnapshot, ti consigliamo di leggere il rsnapshot HOWTO su http://www.rsnapshot.org/. L'HOWTO ti fornirà una panoramica dettagliata su come ottenere rsnapshot attivo e funzionante con dettagli espliciti.
rsnapshot viene fornito ASSOLUTAMENTE NESSUNA GARANZIA. Questo è un software gratuito e sei libero di ridistribuirlo a determinate condizioni. Vedi la GNU General Public License per i dettagli.