Rsync è uno strumento di copia file veloce e straordinariamente versatile. Può copiare localmente, su/da un altro host su qualsiasi shell remota o su/da un demone rsync remoto. Offre un gran numero di opzioni che controllano ogni aspetto del suo comportamento e consentono di copiare specifiche molto flessibili dell'insieme di file. È famoso per il suo algoritmo di trasferimento delta, che riduce la quantità di dati inviati sulla rete inviando solo le differenze tra i file di origine e i file esistenti nella destinazione. Rsync è ampiamente utilizzato per backup e mirroring e come comando di copia migliorato per l'uso quotidiano.
Rsync trova i file che devono essere trasferiti utilizzando un algoritmo di "controllo rapido" (per impostazione predefinita) che cerca i file che hanno cambiato dimensione o nell'ultima modifica. Eventuali modifiche agli altri attributi conservati (come richiesto dalle opzioni) vengono apportate direttamente al file di destinazione quando il controllo rapido indica che i dati del file non devono essere aggiornati.
Alcune delle funzionalità aggiuntive di rsync sono
- supporto per la copia di link, dispositivi, proprietari, gruppi e autorizzazioni
- opzioni di esclusione ed esclusione da simili a GNU tar
- una modalità di esclusione CVS per ignorare gli stessi file che CVS ignorerebbe
- può utilizzare qualsiasi shell remota trasparente, inclusi ssh o rsh
- non richiede privilegi di superutente
- pipeline dei trasferimenti di file per ridurre al minimo i costi di latenza
- supporto per demoni rsync anonimi o autenticati (ideale per il mirroring)
Sintassi
La sintassi di base del comando rsync è:
# rsync options source destination
Alcune delle opzioni comunemente utilizzate:
- –elimina :elimina i file che non esistono sul mittente (sistema).
- -v :output dettagliato
- -e "opzioni ssh" :specifica ssh come shell remota
- -a :modalità archivio
- -r :ricorrono nelle directory
- -z :comprime i dati del file
esempi di comandi rsync in Linux
sincronizza file e directory sul sistema locale
# rsync -zvr /usr/ /root/sync-data/
Il comando precedente copierà o sincronizzerà tutti i file e le directory della cartella /usr nella cartella /root/sync-data.
sincronizza i file in locale preservando i permessi
-a le opzioni effettuano le seguenti operazioni:fornisce funzionalità ricorsive e conserva autorizzazioni, collegamenti simbolici, informazioni su utenti e gruppi.
# rsync -azv /usr/ /root/sync-data/
sincronizza/copia i file dalla macchina locale al server remoto
# rsync -avz /root/sync-data/ [email protected]:/tmp
Il comando precedente copierà i dati della cartella /root/syc-data sulla macchina remota con le credenziali dell'utente root nella cartella /tmp.
sincronizza/copia i file dal server remoto alla macchina locale
# rsync -avz [email protected]:/tmp/src /opt [email protected]'s password: receiving file list ... done src/ src/debug/ src/kernels/ sent 38 bytes received 99 bytes 10.96 bytes/sec total size is 0 speedup is 0.00
Il comando precedente copierà la cartella /tmp/src del server remoto nella cartella /opt della macchina locale.
Sincronizzazione remota su ssh
rsync ci consente di sincronizzare i file sulla macchina remota e viceversa su ssh, ovvero una comunicazione sicura. Utilizzare "rsync -e ssh" per specificare quale shell remota utilizzare. Nel nostro caso, rsync utilizzerà ssh.
# rsync -avz -e ssh [email protected]:/var/lib/rpm /opt The authenticity of host '192.168.2.149 (192.168.2.149)' can't be established. RSA key fingerprint is 45:fc:99:57:34:ba:6a:bb:e3:6f:00:bb:ca:15:3d:c3. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.149' (RSA) to the list of known hosts. [email protected]'s password: receiving file list ... done rpm/ rpm/.rpm.lock rpm/Basenames rpm/Conflictname ............ rpm/Triggername sent 422 bytes received 12521670 bytes 115410.99 bytes/sec total size is 35467264 speedup is 2.83
Visualizza lo stato di avanzamento della sincronizzazione
Possiamo usare l'opzione “–progress” per visualizzare l'avanzamento della sincronizzazione.
# rsync -avz --progress [email protected]:/usr /opt [email protected]'s password: receiving file list ... 44609 files to consider usr/ usr/tmp -> ../var/tmp usr/bin/ usr/bin/.fipscheck.hmac 65 100% 63.48kB/s 0:00:00 (xfer#1, to-check=44605/44609) usr/bin/.ssh.hmac 65 100% 63.48kB/s 0:00:00 (xfer#2, to-check=44604/44609) usr/bin/GET 14519 100% 248.75kB/s 0:00:00 (xfer#3, to-check=44603/44609) usr/bin/HEAD 14519 100% 232.44kB/s 0:00:00 (xfer#4, to-check=44602/44609) ............
Includi ed escludi opzioni in rsync
rsync ci consente di specificare il modello che vogliamo includere ed escludere file o directory durante la sincronizzazione.
# rsync -avz --include 'P*' --exclude '*' [email protected]:/var/lib/rpm/ /opt [email protected]'s password: receiving file list ... done ./ Packages Providename Provideversion Pubkeys sent 129 bytes received 9395561 bytes 695977.04 bytes/sec total size is 28999680 speedup is 3.09
L'esempio precedente include solo i file o le directory che iniziano con "P" ed esclude tutti gli altri file. (usando rsync escludi '*' )
Elimina i file nella destinazione se i file non sono presenti nella sorgente
Con l'aiuto dell'opzione “–delete” in rsync, possiamo eliminare i file creati sulla destinazione se gli stessi file non sono presenti alla fonte.
# rsync -avz --delete [email protected]:/var/lib/rpm/ /opt
ESEMPIO:9 VISUALIZZARE I CAMBIAMENTI TRA SORGENTE E TARGET UTILIZZANDO L'OPZIONE “-I”
Visualizza le modifiche tra sorgente e target
È possibile visualizzare le modifiche tra i file di origine e di destinazione utilizzando l'opzione "-i". Ad esempio:
# rsync -avzi [email protected]:/var/lib/rpm/ /opt [email protected]'s password: receiving file list ... done >f+++++++ .rpm.lock >f+++++++ Basenames >f+++++++ Conflictname >f+++++++ Dirnames >f+++++++ Filedigests >f+++++++ Group >f+++++++ Installtid >f+++++++ Name >f+++++++ Obsoletename >f+++++++ Requirename >f+++++++ Requireversion >f+++++++ Sha1header >f+++++++ Sigmd5 >f+++++++ Triggername sent 328 bytes received 3126214 bytes 297765.90 bytes/sec total size is 35467264 speedup is 11.34
Limita la dimensione del file di trasferimento
Puoi forzare rsync a non trasferire file di dimensioni maggiori di una dimensione specifica utilizzando l'opzione "–max-size".
# rsync -avz --max-size='200k' [email protected]:/var/lib/rpm/ /opt
Il comando precedente fa in modo che rsync trasferisca solo i file inferiori o uguali a 200 K. Possiamo indicare M per megabyte e G per gigabyte.