Quelqu'un peut-il clarifier les différences entre les --checksum
et --ignore-times
options de rsync?
Ma compréhension est la suivante:
--checksum
Si la taille du fichier et l'heure correspondent, il fera une somme de contrôle aux deux extrémités pour voir si les fichiers sont vraiment identiques.
--ignore-times
'Transférer' chaque fichier, que la durée du fichier soit la même aux deux extrémités. Puisqu'il utilisera toujours l'algorithme de transfert delta, si un fichier est réellement identique, rien n'est transféré.
C'est la différence technique, mais pour autant que je sache, ce sont sémantiquement la même chose.
Donc, ce que je me demande, c'est:
Normalement, rsync
ignore les fichiers lorsque les fichiers ont des tailles et des heures identiques sur les côtés source et destination. C'est une heuristique qui est généralement une bonne idée, car elle empêche rsync
d'avoir à examiner le contenu de fichiers qui sont très probablement identiques du côté source et du côté destination.
--ignore-times
indique à rsync
de désactiver l'heuristique d'heure et de taille des fichiers et de transférer ainsi sans condition TOUS les fichiers de la source à la destination. rsync
procédera alors à la lecture de chaque fichier du côté source, car il devra soit utiliser son algorithme de transfert delta, soit simplement envoyer chaque fichier dans son intégralité, selon que le --whole-file
option a été spécifiée.
--checksum
modifie également l'heuristique des heures et des tailles de fichier, mais ici, elle ignore les heures et n'examine que les tailles. Les fichiers sur les côtés source et destination qui diffèrent en taille sont transférés, car ils sont évidemment différents. Les fichiers de même taille sont additionnés de contrôle (avec MD5 dans rsync
version 3.0.0+, ou avec MD4 dans les versions antérieures), et ceux qui ont des montants différents sont également transférés.
Dans les cas où les côtés source et destination sont généralement les mêmes, --checksum
entraînera la plupart des fichiers en somme de contrôle des deux côtés. Cela peut prendre du temps, mais le résultat est que le minimum de données le plus bas sera effectivement transféré sur le câble, surtout si l'algorithme de transfert delta est utilisé. Bien sûr, ce n'est une victoire que si vous avez des réseaux très lents et/ou un processeur très rapide.
--ignore-times
, d'autre part, enverra plus de données sur le réseau, et cela entraînera la lecture de tous les fichiers source, mais au moins cela n'imposera pas la charge supplémentaire de calculer de nombreux hashs cryptographiquement forts sur les CPU source et de destination . Je m'attendrais à ce que cette option fonctionne mieux que --checksum
lorsque vos réseaux sont rapides et/ou votre CPU relativement lent.
Je pense que je n'utiliserais que --checksum
ou --ignore-times
si je transférais des fichiers vers une destination où l'on soupçonnait que le contenu de certains fichiers était corrompu, mais dont les heures de modification n'avaient pas été modifiées. Je ne peux pas vraiment penser à une autre bonne raison d'utiliser l'une ou l'autre option, bien qu'il existe probablement d'autres cas d'utilisation.
la somme de contrôle est également utile si vous avez utilisé un autre système pour synchroniser des fichiers, qui n'a pas conservé les horodatages. La somme de contrôle ne transfèrera que les fichiers différents ET mettra à jour tous les horodatages du côté réception afin qu'ils correspondent
Un détail: l'option checksum vérifie un fichier entier à une extrémité, puis le fichier entier à l'autre extrémité. Si vos fichiers sont un peu volumineux, ce genre de tue le parallélisme.
De plus, si vous avez des fichiers volumineux, vous risquez de rencontrer un délai d'attente avec --checksum
, comme vous ne le faites pas avec -I
.
De info rsync
en ce qui concerne le --checksum
option - "Étant donné que cette somme de contrôle de l'ensemble du fichier de tous les fichiers des deux côtés de la connexion se produit en plus des vérifications de somme de contrôle automatiques qui se produisent pendant le transfert d'un fichier, cette option peut être assez lente."
L'option --ignore-times
Entraînera probablement le codage delta de tous les fichiers et l'algorithme de transfert delta (codage delta) est au moins aussi lent que la somme de contrôle.
Je ne sais pas si rsync --ignore-times
Est suffisamment intelligent pour éviter la "vérification automatique après le transfert" dans le cas fréquent où le transfert delta n'entraînera aucun transfert.
Pour --ignore-times
:
--checksum
Et --ignore-times
Seront tous les deux "assez lents" mais --ignore-times
Est probablement encore plus lent (en raison des 2 possibilités ci-dessus).
Bonne question - veuillez poster si vous trouvez des différences de performances dans la pratique.