Rsync

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Lo scopo di rsync è quello di sincronizzare il contenuto di due directory qualsiasi in modo unidirezionale, ovvero definita una cartella sorgente ed una di destinazione si otterrà che il contenuto della seconda rispecchi quello della prima.

Questo applicativo risulta dunque non (o poco) adatto in tutti quei casi dove l'utente modifica il contenuto di entrambe le cartelle, sorgente e destinazione; in tal caso può essere più utile usare Unison.

Installazione

Tutto il necessario è disponibile da repository. Per il solo rsync, con privilegi di amministrazione:

# apt install rsync

Se si desidera invece avere un'interfaccia grafica e si ha installato un ambiente grafico:

# apt install grsync

Notare che installando grsync si installerà automaticamente anche rsync, dipendendo il primo da quest'ultimo.

Utilizzo

rsync

rsync supporta una moltitudine di parametri, di seguito si fornirà dunque un solo esempio con alcuni dei parametri più comuni:

rsync -n -r -t -p -o -g -v -i --progress --delete --exclude-from=/cartella/file_esclusioni.txt --log-file=mio_log.txt /cartella/sorgente/ /cartella/destinazione/
  • -n (--dry-run), avvia come simulazione, ovvero mostra solo quello che farebbe senza modificare realmente alcunché. Quest'opzione è FONDAMENTALE, in quanto permette di identificare eventuali comportamenti e/o risultati anomali e quindi di correggere il comando. Si ricordi che un errore nella definizione del comando può comportare la perdita dei dati nella cartella di destinazione o anche in quella sorgente se per esempio si invertono accidentalmente le due. Chiaramente una volta verificato il risultato della sincronizzazione quest'opzione andrà eliminata in modo da far effettivamente sincronizzare le directory.
  • -r (--recursive), sincronizza anche le sottodirectory e tutti i relativi file.
  • -t (--times), aggiorna anche la data di "Ultima modifica" dei file copiati nella cartella di destinazione.
  • -p (--perms), imposta per i file nella cartella di destinazione lo stesso schema di permessi di quelli sorgenti.
  • -o (--owner), imposta per i file nella cartella di destinazione lo stesso proprietario di quelli sorgenti, ove possibile.
  • -g (--group), imposta per i file nella cartella di destinazione lo stesso gruppo di quelli sorgenti, ove possibile.
  • -v (--verbose), aumenta il numero di informazioni stampate a video.
  • -i (--itemize-changes), fornisce una serie di indicazioni sulle operazioni che sta eseguendo a riguardo di un certo file o cartella. Maggiori informazioni nell'apposita sezione.
  • --progress, mostra un indicatore percentuale del progresso delle operazioni. Implica l'opzione -v, pertanto se si specifica --progress è ridondante specificare anche -v (come fatto in quest'esempio).
  • --delete, elimina nella directory di destinazione tutti i file che non sono presenti nella directory sorgente. Equivale a --delete-during se versione rsync >= 3.0.0 o --delete-before diversamente. Si ricordi che nei log e nelle informazioni stampate a video la voce deleting è associata solo e soltanto a quei file che sono presenti nella cartella di destinazione, ma non in quella sorgente; se un file è presente nella cartella di destinazione e deve essere sostituito perché quello sorgente ha subito delle modifiche, tale messaggio non compare (le modifiche apportate ad un file sono visibili tramite gli attributi, vedi più avanti).
Info.png Importante
If the sending side detects any I/O errors, then the deletion of any files at the destination will be automatically disabled. This is to prevent temporary filesystem failures (such as NFS errors) on the sending side from causing a massive deletion of files on the destination. Si sottolinea ancora una volta che i vari delete non influenzano minimanente il comportamento di rsync per quanto riguarda l'aggiornamento dei file esistenti (anche se è ovvio che un file per essere aggiornato deve essere prima eliminato). Scegliere delete-delay o peggio delete-after non garantisce una maggior tutela per quanto riguarda l'aggiornamento dei file, sono opzioni pensate per casi particolari.
    • --delete-before, elimina tutti i file che sono da eliminare prima di iniziare a trasferire anche solo un file. Serve solo se si hanno problemi di spazio. Più lento delle altre modalità (perché deve attraversare ricorsivamente due volte tutte le cartelle, la prima per determinare i file da eliminare e la seconda per aggiungere/aggiornare i rimanenti).
    • --delete-during (--del), i file da eliminare vengono eliminati un po' per volta, cartella per cartella. In sintesi quando viene processata una nuova directory elimina prima i file da eliminare e poi aggiorna/aggiunge quelli nuovi. L'unica modalità di interesse per la maggior parte degli utenti è quindi questa, salvo casi particolari per cui si rimanda al manuale di rsync.
  • --exclude-from, specifica il percorso di un file contenente un elenco di file e cartelle da non includere nelle operazioni di sincronizzazione. Maggiori informazioni nell'apposita sezione.
  • --log-file: salva la lista delle operazioni effettuate nel file di log specificato.

Altre opzioni utili:

  • -D, scorciatoia per --devices + --specials. Mantiene file speciali e (solo se eseguito come root) file dispositivo.
  • -l (--links), copia i link simbolici come file (ovvero NON processare ricorsivamente eventuali cartelle referenziate tramite questi link).
  • -L (--copy-links), è l'opposto di -l, ovvero trasforma tutti i link simbolici nei file/directory a cui puntano.
  • -a (--archive), (modalità archivio) è equivalente a impostare rlptgoD.
  • -u (--update), (modalità aggiornamento) salta tutti i file già presenti a destinazione con un tempo di modifica più recente oppure con lo stesso tempo di modifica e stessa dimensione. Quindi solo i file non presenti in destinazione oppure quelli meno recenti di quelli sorgenti saranno inviati.

Opzione -i (--itemize-changes)

Attivando quest'opzione all'inizio di ogni riga viene stampato un codice del tipo YXcstpoguax. Questo codice può essere scomposto in tre parti: Y-X-cstpoguax.

  1. Il primo carattere, identificato dalla lettera Y, può assumere i seguenti valori:
    • < indica che si sta trasferendo un file da una posizione locale ad una remota.
    • > indica che si sta trasferendo un file da una posizione remota ad una locale. Se le cartelle da sincronizzare sono entrambe in locale questo sarà l'unico simbolo associato al trasferimento di un file, a prescindere da quale cartella venga indicata come sorgente e quale come destinazione.
    • c identifica la creazione di una cartella o la modifica di un collegamento simbolico. Si noti che le cartelle a differenza dei file non vengono mai trasferite, ma solo create (e cancellate).
    • . significa che l'oggetto in questione o non verrà aggiornato del tutto o lo sarà solo a livello di attributi (definiti nella terza parte del codice). In poche parole nel caso di un file il punto sta ad indicare che la versione dello stesso presente nella cartella di destinazione non sarà sostituita (aggiornata).
    • Per h e * si veda il manuale.
  2. Il secondo carattere identificato dalla lettera X può assumere anch'esso diverso valori e identifica il tipo dell'oggetto esaminato, per esempio f identifica i file e d le directory.
  3. La terza parte è costituita da 9 caratteri che possono assumere ciascuno solo cinque valori: quello indicato dalla lettera specificata nel codice ad inizio paragrafo, un ., un +, uno spazio o un ?. Un punto indica come per la prima parte che l'attributo considerato non è cambiato, mentre un punto di domanda indica che il valore di tale attributo non è stato possibile identificarlo. Il carattere "più" compare solo nel caso di file presenti nella sorgente, ma assenti nella destinazione e sostituisce simultaneamente tutti gli attributi; in tal caso il codice risultante è quindi f+++++++++ o <f+++++++++ (creazione di un nuovo file). Se due oggetti sono identici, ai punti vengono sostituiti gli spazi. Di seguito il significato delle lettere:
    • c, nel caso di file indica che il checksum tra il file sorgente e quello nella cartella di destinazione varia.
    • s, indica che la dimensione del file sorgente è differente da quella del file di destinazione. In questo caso si ha sempre un aggiornamento del file di destinazione.
    • t, indica che la data di "ultima modifica" del file sorgente è differente da quella del file di destinazione. Perché questo attributo sia valutato occorre che nella riga di comando sia stata specificata l'opzione -t, allora la data di ultima modifica del file di destinazione sarà sincronizzata con quella del file sorgente, viceversa no. Si noti che se si è scelto di aggiornare i file in base alla sola dimensione dei file e sia la sorgente che la destinazione coincidono dimensionalmente, allora non ci sarà alcun trasferimento del file, ma solo il suddetto aggiornamento della data di "ultima modifica". Se un file viene invece trasferito evidentemente viene trasferito anche la data di "ultima modifica" a prescindere che fosse stata o meno specificata l'opzione -t nella riga di comando.
    • p, indica una discrepanza nello schema dei permessi tra file sorgente e destinazione. Perché questo attributo sia valutato occorre che nella riga di comando sia stata specificata l'opzione -p; se possibile lo schema permessi della destinazione sarà uniformato a quello del sorgente.
    • o, significa che il proprietario del file sorgente e di quello nella cartella di destinazione sono differenti. Perché questo attributo sia valutato occorre che nella riga di comando sia stata specificata l'opzione -o; se possibile il proprietario della destinazione sarà uniformato a quello del sorgente.
    • g, significa che il gruppo proprietario del file sorgente e di quello nella cartella di destinazione sono differenti. Perché questo attributo sia valutato occorre che nella riga di comando sia stata specificata l'opzione -g; se possibile il gruppo proprietario della destinazione sarà uniformato a quello del sorgente.
    • u, a, e x si rimanda al manuale.

Alcuni esempi:

  • >f+++++++++ prova.txt, il file è presente nella sorgente e non nella destinazione, quindi verrà trasferito.
  • >f..t..g... prova.txt, il file prova.txt è presente nella destinazione, ma ha data di "ultima modifica" e gruppo di appartenenza differente. Poiché non è stata attivata l'opzione --size-only il file nella cartella di destinazione sarà sostituito con quello nella cartella d'origine.
  • .f..t..g... prova.txt, il file prova.txt è presente nella destinazione, ma ha data di "ultima modifica" e gruppo di appartenenza differente. Poiché è stata attivata l'opzione --size-only il file nella cartella di destinazione non sarà sostituito con quello nella cartella d'origine, tuttavia avendo specificato le opzioni -t e -g avverrà una sincronizzazione dei suddetti attributi.

Opzione "--exclude-from"

Si parta dal seguente esempio di file testuale:

- *.*~
- .*
- Musica
+ Scaricati/
+ Scaricati/Programmi/
- Scaricati/*

Come si vede per ogni riga è stata indicata una risorsa, inoltre per ciascuna è stato premesso un - per definire un esclusione o un + per un inclusione. Sebbene il parametro serva a definire una lista di risorse da escludere il modo con cui esegue le operazioni rsync richiede che in alcuni casi si specifichino anche le risorse da includere. Questo perché rsync in caso contrario salterebbe completamente tutte le sottocartelle di una cartella esclusa; si aggiunga inoltre che scrivendo - Musica si ottiene l'effetto di saltare a pie pari tutte le cartelle di nome Musica/, ovvero ipotizzando di avere una sottocartella Documenti/Musica/ anche questa sarà esclusa dalle operazioni di sincronizzazione e non solo ad esempio ~/Musica.
Il punto è che rsync legge dall'inizio la lista delle esclusioni ogni volta che esamina una nuova directory, ecco perché ammesso di avere la sola sottocartella Programmi in Scaricati e volendo omettere dalla sincronizzazione i soli file contenuti in Scaricati è necessario adottare l'ordine e la sintassi dell'esempio.
Come intuibile il carattere * permette di includere o escludere tutti i file, l'espressione .* solo i file nascosti e quella *.*~ tutti file terminanti con il carattere tilde.

Interfacce grafiche

Grsync

uitoolkit: gtk (es. gnome)

Quest'interfaccia grafica non è molto elaborata e non fornisce alcuna significativa semplificazione rispetto alla versione testuale, ad eccezione della possibilità di poter creare diversi profili in cui personalizzare le varie opzioni e quindi di non dover perdere tempo a scrivere ogni volta l'intera stringa di opzioni e parametri.
Si noti che solo alcune opzioni possono essere selezionate graficamente spuntando apposite checkbox, mentre la maggioranza no; viene tuttavia fornito un campo testuale in cui poter scrivere manualmente le stesse opzioni di rsync. Se l'utente volesse potrebbe non spuntare nulla e scrivere manualmente tutte le opzioni in tale campo.
Le cartelle di destinazione e sorgente possono essere specificate sia digitando direttamente i percorsi negli appositi campi sia utilizzando gli appositi tasti che permetto di selezionare le cartelle graficamente. Qualora una o entrambe le directory da sincronizzare fossero collocate su unità da montare manualmente e per la suddetta operazione di montaggio si usassero file manager come Nautilus, è consigliabile verificare che le cartelle vengano effettivamente montate nella posizione che ci si aspetta; se infatti nei campi sorgenti e destinazione di grsync si è digitato manualmente il percorso delle directory e uno o entrambi non corrispondono all'effettivo punto di montaggio è sempre possibile che grsync crei autonomamente tale/i cartella/i, con la conseguenza di non andare a sincronizzare le cartelle desiderate. Se per esempio si sbaglia la cartella di destinazione e rsync ne crea una nuova (quindi vuota) si noterà che tutti i file nella cartella di destinazione vengono aggiornati senza che contestualmente nessuno venga cancellato.

luckybackup

uitoolkit: qt (es. kde)

Simile a grsync offre alcune funzionalità aggiuntive, tra cui possibilità di definire profili che includano più task (quindi eseguire automaticamente più task).

Approfondimenti

Manpages

man rsync

Sitografia

Pagina non ufficiale di faq.

Pagine correlate




Guida scritta da: Wtf 15:10, 14 set 2012 (CEST) Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 15:31, 21 set 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized