web-dev-qa-db-fra.com

Différence Rsync entre les options --checksum et --ignore-times

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:

  • Quelle est la différence pratique entre les deux options?
  • Dans quels cas utiliseriez-vous l'un plutôt que l'autre?
  • Y a-t-il une différence de performances entre eux?
105
Andy Madge

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.

112
Steven Monday

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

18
Paulus

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.

4
Francois

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."

2
LeoB

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:

  • Si rsync n'est pas intelligent (ou ne fait pas confiance au codage delta), la vérification (somme de contrôle et codage) sera effectuée deux fois.
  • Il peut également arriver que l'encodage delta soit beaucoup plus lent que le checksum MD4 128 bits.

--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.

2
Aleksandr Levchuk