Cerca

Il comando rsync permette di sincronizzare files e directory localmente (sulla stessa macchina) o su macchine remote collegate in rete. E’ veloce ed efficiente, e copia solamente i file che sono stati modificati.

Sintassi:

rsync   <opzioni>   <sorgente>   <destinazione>

Cominciamo a vedere le opzioni più interessanti:

--list-only

Simula, visualizza i file che verrebbero sincronizzati.

-a

I files vengono trasferiti in modalità "archivio" per assicurare che vengano mantenuti i symbolic links, i devices, gli attributi, i permessi, owner e group e che le directory vengano copiate compreso il loro contenuto.

-e ssh

impone l’utilizzo di una connessione sicura per l’eventuale accesso remoto

--stats

stampa alcune informazioni statistiche sull’esito dell’operazione di copia

--delete

cancella nel path di "destinazione" quei files che non sono più presenti nel path "sorgente"

--exclude

per escludere eventuali cartelle o file (sono ammessi i caratteri speciali, ad esempio *)

ATTENZIONE!!! escludendo una directory verra' esclusa qualsiasi directory con lo stesso nome lugo tutta la path e non solo la prima, esempio:

 --exclude dir1

escludera' /root/dir1 e /root/other/path/dir1

--delete-excluded

cancella eventuali file che sono stati esclusi nella copia ma che sono presente comunque nella destinazione (quando si usa l'optizione --exclude)

--progress
--info=progress2 (piu' informazioni)

durante il trasferimento, rsync mostra una riga con i bytes trasferiti, la percentuale trasferita, la velocita' di trasferimento e il tempo rimanente presunto

--copy-links

Quando rsync incontra un sym link, copia l'effettivo contenuto.

--safe-links

Dice a rsync di ignorare qualsiasi sym link che punti fuori l'albero di directory che si sta copiando. Con questa opzione vengono anche ignorati i symlink con percorso assoluto.

--inplace 

non crea file temporanei, ma fa le modifiche direttamente sul file originario.

--partial 

in caso di interruzzione il trasferimento parziale non viene cancellato.

--min-size --max-size

esclude file di dimensione minima/massima (es. --min-size=100K --max-size=1M)

-u

aggiorna i file di destinazione se meno recenti di quelli sorgenti

-n

solo simulazione, nessuna modifica reale

Modalità backup: Nella modalita' backup verranno aggiornati i files che sono cambiati dall'ultimo backup, utilizzando la stessa directory del precedente backup, ma dei files vecchi verra' tenuta traccia a seconda dell'opzione che viene passata insieme a bakup.

--backup

Abilita la modalità backup. Fa il backup della directory, tenendo traccia dei files cancellati o variati dall'ultimo backup.

--suffix=SUFFIX

E' il suffisso che viene aggiunto al file di cui viene fatto il backup. Di default ~.

--backup-dir=DIR

Puo' essere specificato insieme al suffisso ed indica la sottodirectory in cui verranno spostati i files di backup, ad esempio, $(date +%Y-%m-%d). Nel caso venga omessa l'opzione --suffix, i files avranno lo stesso nome dei files originali. I path sorgente e destinazione possono essere indicati in almeno due modi.

path

indica un percorso locale

host:path

indica un percorso remoto, esempio:

rsync -a -e ssh --stats --delete -v --exclude "*bak" /mnt/E root@192.1.1.10:/mnt/backup

rsync -a --stats --delete -v --exclude *.zip --delete-excluded /mnt/E/1/Programmi/ /mnt/lB/disk/E/1/Programmi/

NOTE: rsync va installato sia sul server che sul client. Sul server va installato il pacchetto ssh

ATTENZIONE: nell'esempio /mnt/E e' diverso da /mnt/E/

Altri esempi:

find /root | grep "^/root/\." > /tmp/exclude.txt

rsync -a --delete -v /root --exclude-from=/tmp/exclude.txt --max-size=100M /mnt/$DISK/disk/system/root.other

Esclude tutti i file contenenti nel file di testo exclude.txt Problemi con la FAT32: Copiare i file in una destinazione FAT32 da una sorgente EXT3 e' fortemente sconsigliata Ad esempio se nella sorgente abbiamo le cartelle: /mnt/lA/Primo /mnt/lA/PRIMO Queste non possono essere copiate in FAT32 poiche' coinciderebbero ovvero non e' case sensitive: /mnt/E/Primo = /mnt/E/PRIMO Inoltre le proprieta' dei file e gruppo non sono conservate ed genererebbero un errore con il comando chown. Una possibile soluzione puo' essere utilizzanto di comandi --no-owner e --no-group che permette di non conservare la proprieta' del file:

rsync -a --no-owner --no-group --stats --delete -v /mnt/lA/1/Programmi/ /mnt/E/1/Programmi/

Va inoltre utilizzata l'opzione

--modify-window=2 

per la diversa rappresentazione del timestamp quindi si da una tolleranza di 2 secondi

Copia di cartelle con rsync e non con cp:

E' da preferire rsync al comando cp, questo perche' in caso di interruzione del processo di copia rsync garantisce che eventuali file copiati male vengono sostituiti e vengono copiati i soli file che non sono ancora stati copiati:

rsync -av /mnt.sd d1603/

Non utilizzate quindi il comando: cp -aRv /mnt.sd d1603/

Trasferimento dati da disco a disco:

rsync -avxHAX --progress /disk1/ /disk2

il significato delle opzioni:

-a: tutti i file, con autorizzazioni, ecc.
-v: dettagliato, menziona i file
-x: rimanere su un file system
-H: preserva i collegamenti reali (non inclusi con -a)
-A: preserva ACL / permessi (non inclusi con -a)
-X: conserva gli attributi estesi (non incluso con -a)

rsync -auvxHAX --progress /disk1/ /disk2

-u: 

verifica che i file da sovrascrivere nella directory di destinazione siano piu' vecchi (copia solo i file con un tempo di modifica più recente)

Indietro