rsync - rsync

rsync
Newrsynclogo.png
Autori originali Andrew Tridgell , Paul Mackerras
Sviluppatore/i Wayne Davison
Versione iniziale 19 giugno 1996 ; 25 anni fa ( 1996-06-19 )
Rilascio stabile
3.2.3  Modificalo su Wikidata / 7 agosto 2020 ; 14 mesi fa ( 7 agosto 2020 )
Rilascio in anteprima
3.2.3pre1  Modificalo su Wikidata / 28 luglio 2020 ; 14 mesi fa ( 28 luglio 2020 )
Repository
Scritto in C
piattaforma Multipiattaforma
Tipo Trasferimento dati , backup differenziale
Licenza 2007: GPL-3.0 o successiva
2007: solo GPL 3.0
2007: solo GPL 2.0
1996: GPL 2.0 o successiva
Sito web rsync .samba .org Modificalo su Wikidata

rsync è un'utilità per trasferire e sincronizzare in modo efficiente i file tra un computer e un disco rigido esterno e tra computer in rete confrontando i tempi di modifica e le dimensioni dei file. Si trova comunemente su sistemi operativi simili a Unix ed è sotto la licenza GPL-3.0 o successiva .

Rsync è scritto in C come una singola applicazione a thread . L'algoritmo rsync è un tipo di codifica delta e viene utilizzato per ridurre al minimo l'utilizzo della rete. Zlib può essere utilizzato per ulteriore compressione dei dati e SSH o stunnel possono essere utilizzati per la sicurezza. Rsync è la funzione tipicamente utilizzata per sincronizzare i repository software sui siti mirror utilizzati dai sistemi di gestione dei pacchetti . È anche uno dei modi più veloci per eliminare un gran numero di file con un'applicazione binaria, soprattutto se confrontato con le applicazioni standard Linux rm e find .

Rsync viene in genere utilizzato per sincronizzare file e directory tra due sistemi diversi. Ad esempio, se il comando rsync local-file user@remote-host:remote-fileviene eseguito, rsync utilizzerà SSH per connettersi usera remote-host. Una volta connesso, invocherà rsync dell'host remoto e quindi i due programmi determineranno quali parti del file locale devono essere trasferite in modo che il file remoto corrisponda a quello locale.

Rsync può anche operare in modalità demone (rsyncd), servendo e ricevendo file nel protocollo rsync nativo (usando la sintassi "rsync://").

Storia

Andrew Tridgell e Paul Mackerras hanno scritto l'originale rsync, che è stato annunciato per la prima volta il 19 giugno 1996. È simile per funzione e invocazione a rdist ( rdist -c), creato da Ralph Campbell nel 1983 e rilasciato sotto la Berkeley Software Distribution . Tridgell discute la progettazione, l'implementazione e le prestazioni di rsync nei capitoli da 3 a 5 del suo dottorato di ricerca. tesi nel 1999. Attualmente è mantenuto da Wayne Davison.

Grazie alla flessibilità, alla velocità e alla capacità di scripting di rsync, è diventata un'utilità Linux standard, inclusa in tutte le distribuzioni Linux più diffuse. È stato portato su Windows (tramite Cygwin , Grsync o SFU ), FreeBSD , NetBSD , OpenBSD e macOS .

Utilizzo

Simile a cp, rcpe scp, rsyncrichiede l'indicazione di una sorgente e di una destinazione, di cui almeno una locale.

Sintassi generica:

rsync [OPTION] … SRC … [USER@]HOST:DEST
rsync [OPTION][USER@]HOST:SRC [DEST]

dove SRC è il file o la directory (o un elenco di più file e directory) da cui copiare, DEST è il file o la directory in cui copiare e le parentesi quadre indicano parametri facoltativi.

rsyncpuò sincronizzare i client Unix con un server Unix centrale utilizzando rsync/ sshe account Unix standard. Può essere utilizzato in ambienti desktop, ad esempio per sincronizzare in modo efficiente i file con una copia di backup su un disco rigido esterno. Un'utilità di pianificazione come cronpuò eseguire attività come il rsyncmirroring crittografato automatizzato tra più host e un server centrale.

Esempi

Una riga di comando per rispecchiare FreeBSD potrebbe essere simile a:

$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/

Il server HTTP Apache supporta rsync solo per l'aggiornamento dei mirror.

$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /path/to/mirror

Il modo preferito (e più semplice) per eseguire il mirroring del sito Web PuTTY nella directory corrente è utilizzare rsync.

$ rsync -auH rsync://rsync.chiark.greenend.org.uk/ftp/users/sgtatham/putty-website-mirror/ .

Un modo per imitare le capacità di Time Machine (macOS) .

$ date=$(date "+%FT%H-%M-%S") # rsync interprets ":" as separator between host and port (i. e. host:port), so we cannot use %T or %H:%M:%S here, so we use %H-%M-%S
$ rsync -aP --link-dest=$HOME/Backups/current /path/to/important_files $HOME/Backups/back-$date
$ ln -nfs $HOME/Backups/back-$date $HOME/Backups/current

Eseguire un backup completo della directory principale del sistema:

 $ rsync -avAXHS --progress --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/folder

Elimina tutti i file e le directory, all'interno di una directory, in modo estremamente veloce:

# Make an empty directory somewhere, which is the first path, and the second path is the directory you want to empty.
$ rsync -a --delete /path/to/empty/dir /path/to/dir/to/empty

Connessione

Un processo rsync opera comunicando con un altro processo rsync, un mittente e un destinatario. All'avvio, un client rsync si connette a un processo peer. Se il trasferimento è locale (cioè tra file system montati sullo stesso host) il peer può essere creato con fork, dopo aver impostato le pipe adatte per la connessione. Se è coinvolto un host remoto, rsync avvia un processo per gestire la connessione, in genere Secure Shell . Al momento della connessione, viene emesso un comando per avviare un processo rsync sull'host remoto, che utilizza la connessione così stabilita. In alternativa, se l'host remoto esegue un demone rsync, i client rsync possono connettersi aprendo un socket sulla porta TCP 873, possibilmente utilizzando un proxy.

Rsync ha numerose opzioni della riga di comando e file di configurazione per specificare shell, opzioni, comandi alternativi, possibilmente con percorso completo e numeri di porta. Oltre all'utilizzo di shell remote, è possibile utilizzare il tunneling per visualizzare le porte remote come locali sul server in cui viene eseguito un demone rsync. Queste possibilità consentono di adeguare i livelli di sicurezza allo stato dell'arte, mentre un ingenuo demone rsync può essere sufficiente per una rete locale.

Algoritmo

Determinare quali file inviare

Per impostazione predefinita, rsync determina quali file differiscono tra i sistemi di invio e di ricezione controllando l'ora di modifica e la dimensione di ciascun file. Se il tempo o la dimensione è diverso tra i sistemi, trasferisce il file dal sistema di invio al sistema di ricezione. Poiché ciò richiede solo la lettura delle informazioni sulla directory dei file, è veloce, ma mancherà modifiche insolite che non cambiano nessuna delle due.

Rsync esegue un controllo più lento ma completo se invocato con --checksum. Ciò impone un confronto completo del checksum su ogni file presente su entrambi i sistemi. Salvo rare collisioni di checksum , questo evita il rischio di perdere file modificati a costo di leggere ogni file presente su entrambi i sistemi.

Determinare quali parti di un file sono state modificate

L'utility rsync utilizza un algoritmo inventato dal programmatore di computer australiano Andrew Tridgell per trasmettere in modo efficiente una struttura (come un file) attraverso un collegamento di comunicazione quando il computer ricevente ha già una versione simile, ma non identica, della stessa struttura.

Il destinatario divide la sua copia del file in blocchi e calcola due checksum per ogni blocco: l' hash MD5 e un " checksum rolling " più debole ma più facile da calcolare . Invia questi checksum al mittente.

Il mittente calcola il checksum per ogni sezione rolling nella sua versione del file avente la stessa dimensione dei blocchi utilizzati dal destinatario. Mentre il destinatario calcola il checksum solo per i blocchi che iniziano con multipli interi della dimensione del blocco, il mittente calcola il checksum per tutte le sezioni a partire da qualsiasi indirizzo. Se un tale checksum mobile calcolato dal mittente corrisponde a un checksum calcolato dal destinatario, allora questa sezione è candidata per non trasmettere il contenuto della sezione, ma solo la posizione nel file del destinatario. In questo caso, il mittente utilizza l'hash MD5 più costoso dal punto di vista computazionale per verificare che la sezione del mittente e il pezzo del destinatario siano uguali. Nota che la sezione nel mittente potrebbe non essere allo stesso indirizzo iniziale del blocco nel destinatario. Ciò consente una trasmissione efficiente di file che differiscono per inserimenti e cancellazioni. Il mittente invia quindi al destinatario le parti del file che non corrispondono, insieme alle informazioni su dove unire i blocchi esistenti nella versione del destinatario. Questo rende le copie identiche.

Il checksum mobile utilizzato in rsync si basa sul checksum adler-32 di Mark Adler , utilizzato in zlib , ed è esso stesso basato sul checksum di Fletcher .

Se le versioni del file del mittente e del destinatario hanno molte sezioni in comune, l'utilità deve trasferire relativamente pochi dati per sincronizzare i file. Se vengono utilizzati algoritmi di compressione dati tipici , i file che sono simili quando non sono compressi possono essere molto diversi quando sono compressi e quindi sarà necessario trasferire l'intero file. Alcuni programmi di compressione, come gzip , forniscono una speciale modalità "rsyncable" che consente a questi file di essere sincronizzati in modo efficiente, assicurando che le modifiche locali nel file non compresso producano solo modifiche locali nel file compresso.

Rsync supporta altre funzionalità chiave che aiutano in modo significativo nei trasferimenti di dati o nel backup. Includono la compressione e la decompressione dei dati blocco per blocco utilizzando zlib e il supporto per protocolli come ssh e stunnel .

Variazioni

Il L' utilità rdiff utilizza l'algoritmo rsync per generarefile deltacon la differenza dal file A al file B (come l'utilitàdiff, ma in un formato delta diverso). Il file delta può quindi essere applicato al file A, trasformandolo nel file B (simileall'utilitypatch). rdiff funziona bene con ifile binari.

Lo script rdiff-backup mantiene un mirror di backup di un file o di una directory localmente o in remoto sulla rete su un altro server. rdiff-backup memorizza i delta rdiff incrementali con il backup, con i quali è possibile ricreare qualsiasi punto di backup.

La libreria librsync usata da rdiff è un'implementazione indipendente dell'algoritmo rsync. Non utilizza il protocollo di rete rsync e non condivide alcun codice con l'applicazione rsync. Viene utilizzato da Dropbox , rdiff-backup, duplicity e altre utilità.

La libreria acrosync è un'implementazione indipendente e multipiattaforma del protocollo di rete rsync. A differenza di librsync, è wire-compatibile con rsync (protocollo versione 29 o 30). È rilasciato sotto la Reciprocal Public License e utilizzato dal software commerciale rsync Acrosync .

Duplicity è una variazione di rdiff-backup che consente backup senza la cooperazione del server di storage, come con semplici servizi di storage come Amazon S3 . Funziona generando in anticipo gli hash per ogni blocco, crittografandoli e archiviandoli sul server. Quindi li recupera quando si esegue un backup incrementale. Anche il resto dei dati viene archiviato crittografato per motivi di sicurezza.

A partire da macOS 10.5 e versioni successive, esiste uno speciale -Eo un --extended-attributesinterruttore che consente di conservare gran parte dei metadati del file HFS durante la sincronizzazione tra due macchine che supportano questa funzione. Ciò si ottiene trasmettendo il Resource Fork insieme al Data Fork.

zsync è uno strumento simile a rsync ottimizzato per molti download per versione di file. zsync è utilizzato dalle distribuzioni Linux come Ubuntu per la distribuzione di file di immagine ISO beta che cambiano rapidamente . zsync utilizza il protocollo HTTP e i file .zsync con hash rolling precalcolato per ridurre al minimo il carico del server e consentire il trasferimento delle differenze per l'ottimizzazione della rete.

Rclone è uno strumento open source ispirato a rsync che si concentra sul cloud e su altri dispositivi di archiviazione ad alta latenza. Supporta più di 50 provider diversi e fornisce un'interfaccia simile a rsync per l'archiviazione su cloud.

applicazioni rsync

Programma Sistema operativo Software gratis Descrizione
Linux Mac OS finestre
Tornare in tempo No No
BackupAssistenza No No No Specchio diretto o con storia, VSS.
cwRsync No No No Basato su Cygwin .
Grsync Interfaccia grafica per rsync.
GS RichCopy 360 No No No Progettato solo per workstation e server MS Windows con supporto VSS.
LuckyBackup
rclone Ispirato da rsync e supporta più di 50 provider di cloud storage e altri servizi di storage ad alta latenza.
istantanea No Un'utilità di snapshot del filesystem basata su rsync.
Sincronizza No Utilizza rsync su HTTP(S).

Guarda anche

Appunti

Riferimenti

link esterno