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


Quelqu'un peut-il clarifier les différences entre le --checksum et --ignore-times options de rsync?

Ma compréhension est la suivante:

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

--ignore-times
Transférez tous les fichiers, que leur temps soit le même aux deux extrémités ou pas. Puisqu'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, ils sont sémantiquement identiques.

Alors, 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?

75
2017-12-09 20:15


origine




Réponses:


Normalement, rsync ignore les fichiers lorsque la taille et l'heure des fichiers sont identiques sur les côtés source et cible. Ceci 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 raconte rsync pour désactiver l'heuristique fichier-fois-et-tailles, et ainsi transférer inconditionnellement TOUS les fichiers de la source à la destination. rsync lit ensuite 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 l'option a été spécifiée.

--checksum modifie également l'heuristique fichier-fois-et-tailles, mais ici, il ignore les temps et examine uniquement les tailles. Les fichiers de taille différente de la source et de la destination sont transférés, car ils sont évidemment différents. Les fichiers de même taille sont contrôlés (avec MD5 dans rsync version 3.0.0+, ou avec MD4 dans les versions précédentes), et ceux dont les montants sont différents sont également transférés.

Dans les cas où les côtés source et cible sont essentiellement les mêmes, --checksum la plupart des fichiers seront contrôlés des deux côtés. Cela peut prendre beaucoup de temps, mais le résultat est que le minimum de données sera réellement transféré sur le réseau, particulièrement 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 des processeurs très rapides.

--ignore-timesd’autre part, enverra plus de données sur le réseau et entraînera la lecture de tous les fichiers source, mais au moins, cela n’imposera pas la charge supplémentaire que représente le traitement de nombreuses tables de hachage cryptographiquement robustes sur les CPU source et cible. Je m'attendrais à ce que cette option fonctionne mieux que --checksum lorsque vos réseaux sont rapides et / ou votre processeur relativement lent.

Je pense que je n'utiliserais jamais --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 temps de modification n’avaient pas été modifiés. 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.


83
2017-12-09 23:41



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 manière une fois les mises à jour quotidiennes / hebdomadaires actuelles terminées. On me laisse tomber un email marqué urgent si --itemize-changes génère quelque chose d'inattendu, je sais donc qu'il existe un problème potentiel sur lequel je devrais me pencher. - David Spillett
--checksum est utile lorsque vous travaillez dans Git et que vous passez d'une branche à une autre avec des fichiers modifiés, ce qui ne cesse de modifier les temps de mise à jour des fichiers que vous n'avez pas l'intention d'envoyer depuis une branche particulière. - FriendlyDev
--ignore-times et particulièrement --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 et ask-leo.com/why_wont_my_truecrypt_volume_backup.html - Marcus Junius Brutus
Note: J'ai fait une expérience rapide, et ctime n'est pas comparé, seulement mtime. Sur Mac au moins. Cela peut être utile de savoir. C'est pourquoi j'ai tant de problèmes avec les systèmes de fichiers Windows, qui signalent la même heure (ctime) pour atime, mtime et ctime. - Edward Falk
Est-ce que --checksum somme de contrôle uniquement les noms de fichiers source sur la machine de destination ou tous les fichiers du répertoire de destination? - Greg


La somme de contrôle est également utile si vous avez utilisé un autre système pour synchroniser des fichiers sans conserver d’horodatage. La somme de contrôle ne transfère que les fichiers différents ET met à jour tous les horodatages du destinataire afin qu'ils correspondent


13
2017-07-24 08:37





Un détail: l'option de somme de contrôle vérifie tout un fichier à une extrémité, puis tout le fichier à l'autre extrémité. Si vos fichiers sont un peu volumineux, ce type de parallélisme tue.

En outre, si vous avez d’énormes fichiers, vous risquez de rencontrer une temporisation avec --checksumcomme vous ne le faites pas -I.


4
2018-06-03 14:43





De info rsync en ce qui concerne la --checksum option - "Etant donné que cette somme de contrôle de tous les fichiers des deux côtés de la connexion se produit en plus des vérifications automatiques de la somme de contrôle effectuées lors du transfert d'un fichier, cette option peut être assez lente."


2
2017-12-09 20:34



Cette phrase ne semble pas se trouver dans mes pages de manuel ... Cela signifie donc que l'option de somme de contrôle utilisera des sommes de contrôle pour déterminer si les fichiers sont identiques, et si elles ne le sont pas, elles seront transférées, générant ainsi à nouveau des sommes de contrôle une partie du transfert? L'option --ignore-times ignore simplement la vérification et suppose qu'ils ont changé? Par conséquent, en termes de performances, les heures de pointe sont un meilleur moyen d’atteindre le même objectif? J'ai encore du mal à comprendre pourquoi il y a 2 options différentes (mis à part le fait que --checksum est plus transparent) - Andy Madge
Vous devriez regarder la dernière édition de la documentation: gitweb.samba.org/… - Aleksandr Levchuk


le --ignore-times Cette option entraînera probablement le codage en delta de tous les fichiers et l'algorithme de transfert de delta (codage en delta) est au moins aussi lent que le checksum.

Je ne sais pas si rsync --ignore-times est suffisamment intelligent pour éviter la "vérification automatique après le transfert" dans les cas fréquents 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), alors la vérification (checksum et codage) sera effectuée deux fois.
  • Il se pourrait également que le codage delta soit beaucoup plus lent que le checksum MD4 128 bits.

Tous les deux --checksum et --ignore-times sera "assez lent" mais --ignore-times est probablement encore plus lent (en raison des 2 possibilités ci-dessus).

Bonne question - signalez s'il vous plaît si vous trouvez des différences de performance dans la pratique.


2
2017-12-09 22:22



Je vois ce que tu veux dire. Je vais faire des tests et poster à nouveau. - Andy Madge