Prima di tutto, per quanto riguarda la parte "riprendi" della tua domanda, --partialbasta dire all'estremità ricevente di conservare i file parzialmente trasferiti se l'estremità di invio scompare come se fossero completamente trasferiti.
Durante il trasferimento di file, vengono temporaneamente salvati come file nascosti nelle loro cartelle di destinazione (ad es. .TheFileYouAreSending.lRWzDC) O in una cartella scelta in modo specifico se si imposta l' --partial-diropzione. Quando un trasferimento fallisce e --partialnon è impostato, questo file nascosto rimarrà nella cartella di destinazione con questo nome criptico, ma se --partialimpostato, il file verrà rinominato con il nome del file di destinazione effettivo (in questo caso TheFileYouAreSending), anche se il file non è completo. Il punto è che in seguito è possibile completare il trasferimento eseguendo di nuovo rsync con --appendo --append-verify.
Quindi, --partialnon significa in sé riprendere un trasferimento non riuscito o annullato. Per riprenderlo, dovrai usare uno dei suddetti flag nella prossima corsa. Quindi, se devi assicurarti che la destinazione non contenga mai file che sembrano andare bene ma che in realtà sono incompleti, non dovresti usare --partial. Al contrario, se vuoi assicurarti di non lasciarti mai alle spalle file randagi non riusciti che sono nascosti nella directory di destinazione e sai che sarai in grado di completare il trasferimento in un secondo momento, --partialè lì per aiutarti.
Per quanto riguarda l' --appendopzione sopra menzionata, questa è la vera opzione "riprendi" e puoi usarla anche se stai usando --partial. In realtà, quando si utilizza --append, non vengono mai creati file temporanei. I file vengono scritti direttamente nei loro target. A questo proposito, --appendfornisce lo stesso risultato di --partialun trasferimento non riuscito, ma senza creare quei file temporanei nascosti.
Quindi, per riassumere, se stai spostando file di grandi dimensioni e desideri che l'opzione riprenda un'operazione rsync annullata o non riuscita dal punto esatto in cui è stata rsyncinterrotta, devi utilizzare --appendo --append-verifypassare al tentativo successivo.
Come sottolineato da @Alex di seguito, poiché la versione 3.0.0 rsyncora ha una nuova opzione --append-verify, che si comporta come --appendprima che esistesse quel passaggio. Probabilmente vuoi sempre il comportamento di --append-verify, quindi controlla la tua versione con rsync --version. Se sei su un Mac e non lo usi rsyncda homebrew, avrai (almeno fino a El Capitan incluso) una versione precedente e dovrai usare --appendpiuttosto che --append-verify. Il motivo per cui non hanno mantenuto il comportamento --appende invece hanno nominato il nuovo arrivato --append-no-verifyè un po 'sconcertante. In entrambi i casi, --appendsulla rsyncprima versione 3 è lo stesso che --append-verifysulle versioni più recenti.
--append-verifynon è pericoloso: leggerà e confronterà sempre i dati su entrambe le estremità e non solo supporrà che siano uguali. Lo fa usando checksum, quindi è facile sulla rete, ma richiede la lettura della quantità condivisa di dati su entrambe le estremità del filo prima che possa effettivamente riprendere il trasferimento aggiungendo alla destinazione.
In secondo luogo, hai detto che "hai sentito che rsync è in grado di trovare le differenze tra origine e destinazione e quindi di copiarle".
È corretto e si chiama delta transfer, ma è una cosa diversa. Per abilitarlo, aggiungi l' opzione -co --checksum. Una volta utilizzata questa opzione, rsync esaminerà i file esistenti su entrambe le estremità del filo. Lo fa a blocchi, confronta i checksum su entrambe le estremità e, se differiscono, trasferisce solo le diverse parti del file. Ma, come sottolineato da @Jonathan di seguito, il confronto viene effettuato solo quando i file hanno le stesse dimensioni su entrambe le estremità - dimensioni diverse causeranno rsync per caricare l'intero file, sovrascrivendo la destinazione con lo stesso nome.
Ciò richiede inizialmente un po 'di calcolo su entrambe le estremità, ma può essere estremamente efficiente nel ridurre il carico di rete se, ad esempio, si esegue spesso il backup di file molto grandi file di dimensioni fisse che spesso contengono modifiche minori. Esempi che vengono in mente sono i file di immagine del disco rigido virtuale utilizzati in macchine virtuali o destinazioni iSCSI.
È da notare che se si utilizza --checksumper trasferire un batch di file completamente nuovi nel sistema di destinazione, rsync calcolerà comunque i loro checksum sul sistema di origine prima di trasferirli. Perchè non lo so :)
Quindi, in breve:
Se stai usando spesso rsync per solo "spostare roba da A a B" e vogliono la possibilità di annullare questa operazione e poi riprenderlo, non usare --checksum, ma non usare --append-verify.
Se stai usando rsync per eseguire il backup delle cose spesso, --append-verifyprobabilmente non farà molto per te, a meno che tu non abbia l'abitudine di inviare file di grandi dimensioni che aumentano continuamente di dimensioni ma raramente vengono modificati una volta scritti. Come suggerimento bonus, se si esegue il backup su uno spazio di archiviazione che supporta snapshot come btrfso zfs, l'aggiunta dello --inplaceswitch consente di ridurre le dimensioni dello snapshot poiché i file modificati non vengono ricreati, ma i blocchi modificati vengono scritti direttamente su quelli precedenti. Questa opzione è utile anche se si desidera evitare che rsync crei copie di file sulla destinazione quando si sono verificate solo piccole modifiche.
Durante l'utilizzo --append-verify, rsync si comporterà come sempre su tutti i file della stessa dimensione. Se differiscono per modifiche o altri timestamp, sovrascriveranno la destinazione con l'origine senza esaminare ulteriormente quei file. --checksumconfronterà il contenuto (checksum) di ogni coppia di file con nome e dimensioni identici.
01/09/2015 AGGIORNATO Modificato per riflettere i punti sollevati da @Alex (grazie!)
AGGIORNATO 14/07/2017 Modificato per riflettere i punti sollevati da @Jonathan (grazie!)