142 votes

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

Quelqu'un peut-il préciser les différences entre le --checksum y --ignore-times options de rsync ?

Ma compréhension est la suivante :

--checksum
Si la taille et l'heure du fichier correspondent, il effectue une somme de contrôle aux deux extrémités pour vérifier si les fichiers sont vraiment identiques.

--ignore-times
Transférer chaque fichier, même si la durée du fichier est la même aux deux extrémités. Comme il utilisera toujours l'algorithme de transfert delta, si un fichier est identique, rien ne sera transféré.

C'est la différence technique, mais pour autant que je sache, c'est 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 performance entre eux ?

152voto

Priyan R Points 687

Normalement, rsync saute des fichiers lorsque les fichiers ont des tailles et des durées identiques du côté de la source et de la destination. Il s'agit d'une heuristique qui est généralement une bonne idée, puisqu'elle empêche les rsync de ne pas avoir à examiner le contenu de fichiers qui sont très probablement identiques du côté de la source et de la destination.

--ignore-times dit à rsync pour désactiver l'heuristique de durée et de taille des fichiers, et ainsi transférer inconditionnellement TOUS les fichiers de la source à la destination. rsync procédera ensuite à la lecture de chaque fichier du côté source, puisqu'il devra soit utiliser son algorithme de transfert delta, soit simplement envoyer chaque fichier dans son intégralité, selon que l'option --whole-file a été spécifiée.

--checksum modifie également l'heuristique des temps et des tailles de fichiers, mais ici, elle ignore les temps et examine uniquement les tailles. Les fichiers des côtés source et destination qui diffèrent en taille sont transférés, puisqu'ils sont évidemment différents. Les fichiers de même taille sont soumis à une somme de contrôle (avec MD5 dans le cas de rsync version 3.0.0+, ou avec MD4 dans les versions antérieures), et ceux dont les sommes sont différentes sont également transférés.

Dans les cas où les côtés source et destination sont pratiquement les mêmes, --checksum aura pour résultat que la plupart des fichiers seront vérifiés des deux côtés. Cela peut prendre beaucoup de temps, mais le résultat est que le strict minimum de données sera effectivement transféré sur le fil, surtout si l'algorithme de transfert delta est utilisé. Bien sûr, ce n'est un avantage que si vous avez des réseaux très lents et/ou des processeurs très rapides.

--ignore-times D'autre part, cette option enverra plus de données sur le réseau et entraînera la lecture de tous les fichiers source, mais au moins elle n'imposera pas la charge supplémentaire du calcul de nombreux hashsums cryptographiquement forts sur les CPU source et destination. Je m'attends à ce que cette option soit plus performante que --checksum lorsque vos réseaux sont rapides, et/ou votre CPU relativement lent.

Je pense que je n'utiliserai jamais que --checksum ou --ignore-times si je transférais des fichiers vers une destination où l'on soupçonne que le contenu de certains fichiers est corrompu, mais dont les heures de modification n'ont pas été modifiées. Je ne vois pas vraiment d'autre bonne raison d'utiliser l'une ou l'autre de ces options, bien qu'il existe probablement d'autres cas d'utilisation.

17 votes

J'ai trouvé --checksum utile avec --itemize-changes pour vérifier les sauvegardes. De temps en temps, mes scripts de sauvegarde exécutent une comparaison complète de cette façon après que les mises à jour quotidiennes/hebdomadaires actuelles soient terminées. Je reçois un email marqué urgent si --itemize-changes produit quelque chose d'inattendu, donc je sais qu'il y a un problème potentiel que je dois examiner.

17 votes

--checksum est utile lorsque l'on travaille dans Git et que l'on passe d'une branche à l'autre avec des fichiers modifiés, ce qui a pour effet de modifier les heures de mise à jour des fichiers que vous n'avez pas l'intention d'envoyer depuis une branche particulière.

7 votes

--ignore-times et surtout --checksum sont nécessaires si l'un de vos "fichiers" est un conteneur de fichiers Truecrypt car, par défaut, l'horodatage du fichier n'est pas mis à jour. Voir productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs y ask-leo.com/why_wont_my_truecrypt_volume_backup.html

24voto

nicktea Points 241

Checksum est également utile si vous avez utilisé un autre système pour synchroniser des fichiers, qui n'a pas préservé les timestamps. La somme de contrôle ne transfère que les fichiers qui sont différents ET met à jour tous les horodatages du côté de la réception pour qu'ils correspondent.

0 votes

Ne le fera-t-il pas aussi si vous ne fournissez pas les informations suivantes --checksum drapeau ?

2 votes

Oui, cela mettrait à jour les horodatages, mais cela pourrait aussi transférer de nombreux fichiers inutiles. La somme de contrôle est utile si vous exécutez le démon rsync à l'autre bout, et que vous avez une connexion très lente, et beaucoup de fichiers (arbre source de plusieurs gigas).

0 votes

Merci ! Excusez ma question supplémentaire : Que recommanderiez-vous si j'ai des fichiers sources qui font chacun >1GiB et une vitesse de connexion médiocre, et que certains timestamps plus récents sont toujours exactement le même fichier ? -c calcule toutes les sommes de contrôle (n'est-ce pas ?) - Idéalement, il ne calcule la somme de contrôle que pour les fichiers dont les timestamps diffèrent. Ou est-ce qu'il effectue des vérifications de la somme de contrôle sur ces fichiers en mode normal (sans l'option de vérification de la somme de contrôle) ? -c drapeau) ?

7voto

Francois Points 61

Un détail : l'option checksum vérifie un fichier entier d'un côté, puis le fichier entier de l'autre côté. Si vos fichiers sont assez gros, cela tue le parallélisme.

De plus, si vous avez des fichiers volumineux, vous risquez de rencontrer un délai d'attente avec la fonction --checksum comme vous ne le faites pas avec -I .

4voto

Shady Samir Points 11

から info rsync en ce qui concerne le --checksum option - "Étant donné que cette vérification de la somme de contrôle de tous les fichiers des deux côtés de la connexion se fait en plus des vérifications automatiques de la somme de contrôle qui ont lieu pendant le transfert d'un fichier, cette option peut être assez lente."

1 votes

Cette phrase ne semble pas être dans mes pages de manuel... donc, est-ce que cela implique que l'option checksum utilisera les sommes de contrôle pour identifier si les fichiers sont identiques, et s'ils ne le sont pas, il transférera, générant ainsi les sommes de contrôle à nouveau dans le cadre du transfert ? L'option --ignore-times saute simplement la vérification et suppose qu'ils ont changé ? Par conséquent, en termes de performances, --ignore-times est un meilleur moyen d'obtenir la même chose ? J'ai toujours du mal à comprendre pourquoi il y a 2 options différentes (à part le fait que --checksum est plus transparent).

0 votes

Vous devriez consulter la dernière édition de la documentation : gitweb.samba.org/

3voto

snuggles Points 196

El --ignore-times aura probablement pour résultat que tous les fichiers seront encodés en delta et l'algorithme de transfert de delta (encodage delta) est au moins aussi lent que l'addition 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 à l'encodage delta), la vérification (somme de contrôle et encodage) sera effectuée deux fois.
  • Il se peut également que l'encodage delta soit beaucoup plus lent que la somme de contrôle MD4 de 128 bits.

Les deux sites --checksum y --ignore-times sera "assez lent" mais --ignore-times est probablement encore plus lent (en raison des deux possibilités ci-dessus).

Bonne question - veuillez poster si vous constatez des différences de performance dans la pratique.

0 votes

Je vois ce que vous voulez dire. Je vais faire quelques tests et revenir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X