Riprendi il trasferimento di un singolo file tramite rsync


22

In Ubuntu, voglio copiare un grosso file dal mio hard disk su un'unità rimovibile da rsync. Per un motivo o per l'altro, l'operazione non può essere completata in un'unica esecuzione. Quindi sto cercando di capire come usare rsync per riprendere la copia dei file da dove era stata lasciata l'ultima volta.

Ho provato ad usare l'opzione --partial o --inplace, ma insieme a --progress, ho scoperto che rsync con --partial o --inplace inizia effettivamente dall'inizio invece che da quello che è rimasto l'ultima volta. L'interruzione anticipata di rsync e il controllo delle dimensioni del file ricevuto confermano anche quello che ho trovato.

Ma con --append, rsync parte da ciò che era rimasto l'ultima volta.

Sono confuso, come ho visto sulla manpage --partial, --inplace o --endend sembra correlarsi alla ripresa della copia da ciò che è rimasto l'ultima volta. Qualcuno può spiegare la differenza? Perché --partial o --inplace non funzionano per riprendere una copia? È vero che per riprendere una copia, rsync deve funzionare con l'opzione --append?

Anche se un file parziale è stato lasciato da mv o cp non da rsync, rsync --appenderà correttamente?

Grazie e saluti!


La mia comprensione di come funziona rsync è limitata, ma per rispondere alla tua ultima domanda. Se un cp è incompleto, rsync dovrebbe riprendere la copia. Credo che rsync hashs files in un modo che troverebbe la stessa parte iniziale del file e copiasse la parte rimanente del file.
Scott McClenning,

Risposte:


25

Guardando alcune pagine per rsync:

--append
Questo fa sì che rsync aggiorni un file aggiungendo i dati alla fine del file, il che presume che i dati già esistenti sul lato ricevente siano identici all'inizio del file sul lato di invio.

--inplace
Questa opzione cambia il modo in cui rsync trasferisce un file quando i suoi dati devono essere aggiornati: invece del metodo predefinito per creare una nuova copia del file e spostarlo in posizione quando è completo, rsync invece scrive i dati aggiornati direttamente nella file di destinazione.

--partial
Per impostazione predefinita, rsync eliminerà qualsiasi file parzialmente trasferito se il trasferimento viene interrotto. In alcune circostanze è più desiderabile conservare i file parzialmente trasferiti.

Sembra che se il file è molto grande, dovresti usarlo --partial --append. ( --appendimplica --inplace) Se questo file di grandi dimensioni cambia, rilasciare --appende rsync controllerà l'inizio del file per assicurarsi che corrisponda anche al file di origine. --inplaceper me sembra pericoloso, tranne se stai risincronizzando un file di grandi dimensioni, non vuoi che rsync crei un nuovo file temporaneo della parte iniziale, continui il trasferimento, quindi rimuovi il vecchio file per mettere il nuovo file in posizione. Il trasferimento sarebbe più veloce se si potesse usare lo stesso file, per non parlare dello spazio su disco necessario per il trasferimento sarebbe inferiore.

Inoltre, ho scoperto dal punto di vista del trasferimento di un intero file che una copia è più veloce di rsync. Tuttavia, se avessi bisogno di aggiornare un file, avrei dovuto sincronizzare rsync il file più velocemente rispetto al ritrasmettere di nuovo l'intero file. (come ho detto sopra) Rsync dovrebbe essere in grado di riprendere da un cp.

Spero che aiuti.


1
Potresti dare un'occhiata a questo bug report: lists.samba.org/archive/rsync/2012-June/027615.html
Stefan Schmidt,

Un buon punto sull'uso del cp più veloce di default e rsync per "riparare" un processo cp interrotto! Neat :)
Samuel Lampa,
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.