Rsync può aggiornare un file di grandi dimensioni che è stato modificato solo parzialmente senza la ritrasmissione completa?


15

Sto apportando una piccola modifica a un file di immagine di file molto grande (solo una differenza di pochi pixel) che impiega molto tempo per il trasferimento in rete.

Esiste un modo per rsync di identificare la differenza nel file e inviare solo le piccole differenze sulla rete?


3
Quando si copia su una rete, rsyncsi comporta in questo modo per impostazione predefinita. Finché la modifica minore è una modifica minore al file e il file esiste già su entrambi i lati del collegamento in versioni quasi identiche, i dati trasferiti dovrebbero essere molto inferiori alla dimensione totale del file. Dal primo paragrafo nella pagina man: "È 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 quelli esistenti nella destinazione".
user4556274

Ah, ok, dovresti postarlo come risposta piuttosto che come commento. Non era ovvio che rsync si stesse comportando in questo modo, ma con quell'aspettativa, presumo che il mio file sia cambiato più di quanto mi aspettassi e vedrò perché. Il processo di compressione dell'immagine probabilmente modifica i valori di byte non elaborati in tutto il file.
David Parks,

Risposte:


11

rsyncL'algoritmo delta-transfer fa questo per impostazione predefinita. Citando la manpage di rsync :

DESCRIZIONE

Rsync è uno strumento di copia dei file rapido 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 quelli esistenti nella destinazione . Rsync è ampiamente utilizzato per backup e mirroring e come comando di copia migliorato per l'uso quotidiano.

Se vuoi disabilitarlo, dovrai usare l' opzione -Wo --whole-file.

-W, --intero file

Questa opzione disabilita l'algoritmo di delta-transfer di rsync, che causa l'invio completo di tutti i file trasferiti. Il trasferimento potrebbe essere più veloce se questa opzione viene utilizzata quando la larghezza di banda tra i computer di origine e di destinazione è superiore alla larghezza di banda su disco (specialmente quando il "disco" è in realtà un filesystem in rete). Questo è il valore predefinito quando sia l'origine che la destinazione sono specificate come percorsi locali, ma solo se non è attiva alcuna opzione di scrittura batch.

Se sai davvero quanto il tuo file è cambiato, puoi persino ottimizzare questo comportamento di trasferimento delta ottimizzando le dimensioni del tuo blocco delta:

-B, --block-size = BLOCKSIZE

Ciò forza la dimensione del blocco utilizzata nell'algoritmo di delta transfer di rsync su un valore fisso. Viene normalmente selezionato in base alla dimensione di ciascun file da aggiornare. Vedi il rapporto tecnico per i dettagli.

E se vuoi maggiori informazioni sull'algoritmo stesso, puoi trovarlo qui: l'algoritmo Rsync


Ad essere onesti, la forma plurale di "file" nella manpage è ambigua: "inviando solo le differenze tra i file di origine e i file esistenti ..." Ho preso "file" per indicare una raccolta di singoli file, e che rsync avrebbe inviato (interi) file che erano diversi. Questo dovrebbe essere chiarito.
Russ,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.