Sincronizza la differenza tra le opzioni --checksum e --ignore-times


96

Qualcuno può chiarire le differenze tra le opzioni --checksume --ignore-timesdi rsync?

La mia comprensione è la seguente:

--checksum
Se le dimensioni e il tempo del file corrispondono, eseguirà un checksum su entrambe le estremità per vedere se i file sono davvero identici.

--ignore-times
'Trasferisci' ogni file, indipendentemente dal fatto che l'ora del file sia uguale su entrambe le estremità. Poiché utilizzerà comunque l'algoritmo di trasferimento delta, se un file è effettivamente identico, nulla viene trasferito.

Questa è la differenza tecnica, ma per quanto ne so, sono semanticamente la stessa cosa.

Quindi, quello che mi chiedo è:

  • Qual è la differenza pratica tra le due opzioni?
  • In quali casi useresti uno anziché l'altro?
  • C'è qualche differenza di prestazioni tra loro?

Risposte:


100

Normalmente, rsyncsalta i file quando i file hanno dimensioni e tempi identici sul lato di origine e di destinazione. Questa è un'euristica che di solito è una buona idea, in quanto impedisce rsyncdi dover esaminare i contenuti dei file che sono molto probabilmente identici sul lato di origine e di destinazione.

--ignore-timesdice rsyncdi disattivare l'euristica dei tempi e delle dimensioni dei file e quindi trasferire incondizionatamente TUTTI i file dall'origine alla destinazione. rsyncprocederà quindi a leggere tutti i file sul lato sorgente, poiché dovrà utilizzare il suo algoritmo di trasferimento delta o semplicemente inviare tutti i file nella loro interezza, a seconda che l' --whole-fileopzione sia stata specificata.

--checksummodifica anche l'euristica di tempi e dimensioni dei file, ma qui ignora i tempi ed esamina solo le dimensioni. I file sui lati di origine e destinazione di dimensioni diverse vengono trasferiti, poiché sono ovviamente diversi. I file con le stesse dimensioni vengono rsyncsottoposti a checksum (con MD5 nella versione 3.0.0+ o con MD4 nelle versioni precedenti) e vengono trasferiti anche quelli trovati con somme diverse.

Nei casi in cui i lati di origine e di destinazione sono sostanzialmente gli stessi, --checksumla maggior parte dei file verrà verificata su entrambi i lati. Ciò potrebbe richiedere molto tempo, ma il risultato è che il minimo indispensabile di dati verrà effettivamente trasferito via cavo, soprattutto se viene utilizzato l'algoritmo di trasferimento delta. Naturalmente, questa è una vittoria solo se si hanno reti molto lente e / o CPU molto veloci.

--ignore-timesd'altra parte, invierà più dati sulla rete e causerà la lettura di tutti i file di origine, ma almeno non imporrà l'onere aggiuntivo di calcolare molti hashs crittograficamente forti sulle CPU di origine e di destinazione. Mi aspetto che questa opzione funzioni meglio di --checksumquando le tue reti sono veloci e / o la tua CPU relativamente lenta.

Penso che lo userei sempre --checksumo --ignore-timesse trasferissi i file a una destinazione in cui si sospettava che il contenuto di alcuni file fosse corrotto, ma i cui tempi di modifica non fossero cambiati. Non riesco davvero a pensare a nessun altro buon motivo per usare entrambe le opzioni, anche se ci sono probabilmente altri casi d'uso.


12
Ho trovato --checksumutile insieme a --itemize-changesverificare i backup. Ogni tanto i miei script di backup eseguono un confronto completo in questo modo dopo il completamento degli attuali aggiornamenti giornalieri / settimanali. Ricevo un'e-mail contrassegnata come urgente se l' --itemize-changesoutput è inaspettato, quindi so che c'è un potenziale problema che dovrei esaminare.
David Spillett,

10
--checksum è utile quando si lavora in Git e si passa da un ramo all'altro con file modificati, il che continua a modificare i tempi di aggiornamento dei file che non si intende inviare da un ramo specifico.
FriendlyDev

6
--ignore-timese soprattutto --checksumsono necessari se uno dei tuoi "file" è un contenitore di file Truecrypt poiché per impostazione predefinita il timestamp del file non viene aggiornato. Vedi productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs e ask-leo.com/why_wont_my_truecrypt_volume_backup.html
Marcus Junius Brutus

Nota: ho fatto un rapido esperimento e ctime non è stato confrontato, solo mtime. Su Mac, almeno. Questo può essere utile sapere. È per questo che ho così tanti problemi con i file system di Windows, che riportano lo stesso orario (ctime) per atime, mtime e ctime.
Edward Falk,

Il --checksumchecksum esegue solo i nomi dei file di origine sul computer di destinazione o tutti i file nella directory di destinazione?
Greg,

17

checksum è utile anche se si è utilizzato un altro sistema per sincronizzare i file, che non ha conservato i timestamp. Checksum trasferirà solo file diversi E aggiornerà tutti i timestamp sull'estremità ricevente in modo che corrispondano


4

Un dettaglio: l'opzione checksum controlla un intero file da un lato, quindi l'intero file dall'altro. Se i tuoi file sono piuttosto grandi, questo tipo di uccide il parallelismo.

Inoltre, se si dispone di file di grandi dimensioni, è molto probabile che si verifichi un timeout con --checksum, come non con -I.


2

Per info rsyncquanto riguarda l' --checksumopzione - "Poiché questo checksum di file interi di tutti i file su entrambi i lati della connessione si verifica in aggiunta alle verifiche di checksum automatiche che si verificano durante il trasferimento di un file, questa opzione può essere piuttosto lenta."


1
Quella frase non sembra essere nelle mie pagine di manuale ... quindi, ciò implica che l'opzione checksum utilizzerà checksum per identificare se i file sono identici e se non lo sono trasferiranno, generando di nuovo checksum come parte del trasferimento? L'opzione --ignore-times salta semplicemente il segno di spunta e presume che siano cambiate? Quindi, per quanto riguarda le prestazioni, i tempi delignore sono un modo migliore per ottenere la stessa cosa? Faccio ancora fatica a capire perché ci sono 2 diverse opzioni (a parte il fatto che --checksum è più trasparente)
Andy Madge,

Dovresti guardare l'ultima modifica della documentazione: gitweb.samba.org/…
Aleksandr Levchuk,

2

L' --ignore-timesopzione probabilmente comporterà la codifica di tutti i file delta e l'algoritmo di trasferimento delta (codifica delta) è almeno lento quanto il checksum.

Non so se rsync --ignore-timessia abbastanza intelligente da evitare la "verifica automatica dopo il trasferimento" nel caso frequente in cui il trasferimento delta non comporterà il trasferimento di nulla.

Per --ignore-times:

  • Nel caso in cui rsync non sia intelligente (o non si fidi della codifica delta), il controllo (checksum e codifica) verrà eseguito due volte.
  • Potrebbe anche accadere che la codifica delta sia molto più lenta del checksum MD4 a 128 bit.

Entrambi --checksume --ignore-timessaranno "abbastanza lenti" ma --ignore-timesprobabilmente anche più lenti (a causa delle 2 possibilità sopra).

Buona domanda: si prega di pubblicare se si riscontrano differenze di prestazioni nella pratica.


Capisco cosa vuoi dire. Eseguirò alcuni test e riporterò indietro.
Andy Madge,
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.