Tout d’abord, en ce qui concerne la partie "CV" de votre question, --partial
indique simplement à la partie destinataire de conserver les fichiers partiellement transférés si la partie envoyée disparaît comme si ceux-ci étaient complètement transférés.
Lors du transfert de fichiers, ils sont temporairement enregistrés en tant que fichiers masqués dans leurs dossiers cibles (par exemple .TheFileYouAreSending.lRWzDC
) ou dans un dossier spécifiquement choisi si vous définissez le --partial-dir
commutateur. Lorsqu'un transfert échoue et --partial
n'est pas défini, ce fichier caché restera dans le dossier cible sous ce nom cryptique, mais s'il --partial
est défini, le fichier sera renommé en nom de fichier cible réel (dans ce cas, TheFileYouAreSending
), même si le fichier n'est pas complet. Le fait est que vous pouvez terminer le transfert ultérieurement en exécutant à nouveau rsync avec --append
ou --append-verify
.
Donc, --partial
ne reprend pas lui-même un transfert échoué ou annulé. Pour le reprendre, vous devrez utiliser l'un des indicateurs susmentionnés lors de la prochaine exécution. Donc, si vous devez vous assurer que la cible ne contiendra jamais de fichiers qui semblent être corrects mais qui sont en réalité incomplets, vous ne devriez pas les utiliser --partial
. Inversement, si vous voulez vous assurer de ne jamais laisser de fichiers égarés perdus et cachés dans le répertoire cible, et si vous savez que vous pourrez terminer le transfert ultérieurement, --partial
vous pouvez vous aider.
En ce qui concerne le --append
commutateur mentionné ci-dessus, il s'agit du commutateur "resume", que vous pouvez utiliser, que vous l'utilisiez ou non --partial
. En fait, lorsque vous utilisez --append
, aucun fichier temporaire n'est créé. Les fichiers sont écrits directement dans leurs cibles. À cet égard, --append
donne le même résultat que --partial
sur un transfert ayant échoué, mais sans créer ces fichiers temporaires masqués.
Donc, pour résumer, si vous déplacez des fichiers volumineux et que vous souhaitez avoir la possibilité de reprendre une opération rsync annulée ou ayant échoué à partir du point exact qui rsync
s'est arrêté, vous devez utiliser la touche --append
ou pour --append-verify
activer la prochaine tentative.
Comme @Alex le souligne ci-dessous, depuis la version 3.0.0 a rsync
maintenant une nouvelle option --append-verify
, qui se comporte comme --append
auparavant. Vous voulez probablement toujours le comportement de --append-verify
, alors vérifiez votre version avec rsync --version
. Si vous êtes sur un Mac et ne pas utiliser rsync
de homebrew
, vous (au moins jusqu'au El Capitan) une version plus ancienne et la nécessité d'utiliser --append
plutôt que --append-verify
. Pourquoi ils n'ont pas gardé ce comportement --append
et nommé le nouveau venu --append-no-verify
est un peu déroutant. De toute façon, --append
sur rsync
avant la version 3 est le même que --append-verify
sur les versions plus récentes.
--append-verify
n'est pas dangereux: il lira et comparera toujours les données aux deux extrémités et ne supposera pas qu'elles sont égales. Pour ce faire, elle utilise des sommes de contrôle, ce qui facilite les choses sur le réseau, mais nécessite la lecture de la quantité de données partagée aux deux extrémités du câble avant de pouvoir reprendre le transfert en ajoutant à la cible.
Deuxièmement, vous avez dit "avoir entendu dire que rsync était capable de trouver des différences entre la source et la destination, et donc de simplement copier les différences".
C'est exact, et cela s'appelle le transfert delta, mais c'est une chose différente. Pour l'activer, vous ajoutez le -c
, ou --checksum
basculez. Une fois ce commutateur utilisé, rsync examinera les fichiers existant aux deux extrémités du fil. Cela se fait par morceaux, compare les sommes de contrôle des deux côtés et, si elles diffèrent, ne transfère que les parties différentes du fichier. Mais, comme @Jonathan le souligne ci-dessous, la comparaison n'est effectuée que lorsque les fichiers ont la même taille aux deux extrémités - des tailles différentes obligeront rsync à télécharger l'intégralité du fichier, en remplaçant la cible par le même nom.
Cela nécessite un peu de calcul aux deux extrémités, mais peut s'avérer extrêmement efficace pour réduire la charge du réseau si, par exemple, vous sauvegardez fréquemment des fichiers très volumineux, des fichiers de taille fixe contenant souvent des modifications mineures. Les exemples qui me viennent à l’esprit sont les fichiers d’image de disque dur virtuel utilisés dans des machines virtuelles ou des cibles iSCSI.
Il est à noter que si vous utilisez --checksum
pour transférer un lot de fichiers complètement nouveaux sur le système cible, rsync calculera toujours leurs sommes de contrôle sur le système source avant de les transférer. Pourquoi je ne sais pas :)
Donc, en bref:
Si vous utilisez souvent rsync juste « passer des choses de A à B » et que vous voulez la possibilité d'annuler cette opération et reprendre plus tard, ne pas utiliser --checksum
, mais n'utiliser .--append-verify
Si vous utilisez souvent rsync pour sauvegarder des --append-verify
fichiers , leur utilisation ne vous aidera probablement pas beaucoup, sauf si vous avez l'habitude d'envoyer de gros fichiers dont la taille ne cesse de croître, mais qui sont rarement modifiés une fois écrits. En prime, si vous sauvegardez sur un stockage prenant en charge les instantanés tels que btrfs
ou zfs
, l'ajout du --inplace
commutateur vous aidera à réduire la taille des instantanés, car les fichiers modifiés ne sont pas recréés, mais les blocs modifiés sont écrits directement par-dessus les anciens. Ce commutateur est également utile si vous souhaitez éviter que rsync ne crée des copies de fichiers sur la cible lorsque des modifications mineures ont eu lieu.
Lors de l'utilisation --append-verify
, rsync se comportera comme il le fait toujours pour tous les fichiers de même taille. S'ils diffèrent par la modification ou d'autres horodatages, la cible sera remplacée par la source sans examiner ces fichiers plus à fond. --checksum
comparera le contenu (sommes de contrôle) de chaque paire de fichiers de nom et de taille identiques.
MIS À JOUR 2015-09-01 Modifié pour refléter les remarques de @Alex (merci!)
MIS À JOUR 2017-07-14 Modifié pour refléter les remarques de @Jonathan (merci!)