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

96

Quelqu'un peut-il clarifier les différences entre les options --checksumet --ignore-timesde 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 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?
Andy Madge
la source

Réponses:

100

Normalement, rsyncignore les fichiers lorsque leur taille et leur durée sont identiques sur les côtés source et cible. C'est une heuristique qui est généralement une bonne idée, car elle évite rsyncd'avoir à examiner le contenu de fichiers qui sont très probablement identiques du côté source et du côté destination.

--ignore-timesindique rsyncde désactiver la méthode heuristique de tailles et de fichiers et de transférer inconditionnellement TOUS les fichiers de la source à la destination. rsynclit 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 l' --whole-fileoption a été spécifiée ou non.

--checksummodifie é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 la rsyncversion 3.0.0+ ou 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 pratiquement identiques, la --checksumplupart des fichiers seront vérifié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 --checksumlorsque vos réseaux sont rapides et / ou votre processeur relativement lent.

Je pense que je n'utiliserais jamais --checksumou --ignore-timessi je transférais des fichiers vers une destination où il était soupçonné que le contenu de certains fichiers était corrompu, mais dont les heures de modification n'avaient pas changé. 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.

Steven Monday
la source
12
J'ai trouvé --checksumutile avec --itemize-changespour 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 fait tomber un email marqué urgent si --itemize-changesquelque chose d'inattendu est sorti, alors je sais qu'il y a un problème potentiel sur lequel je devrais me pencher.
David Spillett
10
--checksum est utile lorsque vous travaillez dans Git et que vous passez d'une branche à une autre avec des fichiers modifiés, ce qui modifie constamment les temps de mise à jour des fichiers que vous n'avez pas l'intention d'envoyer depuis une branche particulière.
FriendlyDev
6
--ignore-timeset surtout --checksumsont 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
Remarque: 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
La --checksumsomme de contrôle ne concerne- t-elle que les noms de fichiers source sur la machine de destination ou tous les fichiers du répertoire de destination?
Greg
17

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

Paulus
la source
4

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 courrez le plus de problèmes avec un délai d’attente --checksum, comme vous ne le faites pas -I.

François
la source
2

Du point info rsyncde vue de l' --checksumoption - "Étant 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."

LeoB
la source
1
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 temps de reconnaissance sont un meilleur moyen de parvenir à la même chose? 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
2

L' --ignore-timesoption aura probablement pour résultat que tous les fichiers seront codés en delta et que l'algorithme de transfert de delta (codage en delta) est au moins aussi lent que le checksum.

Je ne sais pas si rsync --ignore-timesest 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), 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.

Les deux --checksumet --ignore-timesseront "assez lents" mais --ignore-timesprobablement encore plus lents (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.

Aleksandr Levchuk
la source
Je vois ce que tu veux dire. Je vais faire des tests et poster à nouveau.
Andy Madge