Rsync checksum seulement pour les fichiers de même taille

il y a un tas de threads concernant rsync checksum, mais aucun ne semble répondre à ce besoin, ce qui serait la façon la plus efficace et la plus rapide de synchroniser, au moins dans mon cas:

  • en même temps et de même taille ► ignorer le fichier (pas de transfert, pas de somme de contrôle)
  • différentes tailles ► transfert de fichier (pas de somme de contrôle)
  • temps différents et même taille ► effectuer le checksum ► transfert seulement si les checksums diffèrent

j'ai remarqué que l'option --checksum peut vraiment prendre du temps pour miroir d'un dossier, si il y a beaucoup de fichiers. En utilisant cette option, vous exécuterez une somme de contrôle sur chaque fichier, ce qui est très sûr mais très lent. En outre, il va induire accès en lecture au-dessus de calculer la somme de contrôle.

L'option --ignore-times n'est pas ce que je veux, si le temps et la taille de match, les chances que les fichiers sont différents est insignifiant, je suis prêt à prendre le risque de ne pas transférer.

L'option --size-only est incomplet, car il n'y a une bonne chance que les fichiers ayant la même taille mais des temps différents peuvent en fait être des fichiers différents (par exemple. changer un char dans un autre ne peut pas affecter la taille, juste le moment de l'édition).

y a-t-il un moyen d'effectuer le mirroring selon la combinaison ci-dessus, avec rsync (ai-je manqué quelque chose dans les pages de manuel) ou avec d'autres outils Linux?

Grâce.

23
demandé sur Sylvain 2013-06-25 02:35:52

2 réponses

lors du transfert de fichiers (ou avec --dry-run, qu'il s'agisse de lister des fichiers), rsync transférera toujours des fichiers qui diffèrent dans filesize. Cependant, lorsque les fichiers sont de la même taille, rsync a plusieurs options:

  • --size-only: ne jamais transférer des fichiers
  • --ignore-times: toujours transférer des fichiers
  • valeur par défaut: si les horodatages diffèrent, le transfert de fichiers
  • --checksum: calculer les totaux de contrôle et transférer les fichiers s'ils diffèrent

Le comportement que vous souhaitez serait une combinaison des deux derniers: "si les horodateurs diffèrent, calculez les checksums et transférez les fichiers si les checksums diffèrent aussi". Ce n'est pas actuellement une option dans rsync.

lorsque vous exécutez un transfert réel, la deuxième étape peut effectivement être faite au cours du processus de transfert: le transfert de fichiers qui ne diffèrent pas est très efficace. Alors le comportement par défaut de rsync suffirait. Lors de l'utilisation de --dry-run la meilleure approche serait probablement d'exécuter rsync avec comportement par défaut en premier, rassembler le --dry-run sortie, puis exécuter rsync à nouveau, avec --checksum, sur les fichiers trouvés dans la première manche.

18
répondu MRV 2014-05-17 23:35:47

La réponse courte... il n'.

same time and same size ► skip file (no transfer, no checksum)

bon et rapide, mais pas exact, rsync offre que par défaut. Le fichier peut être modifié et le temps / taille sont toujours les mêmes. (les temps peuvent être réinitialisés) vous pouvez utiliser -c si paranoïaque.

different sizes ► transfer file (no checksum)

Simpliste... et si c'était un fichier 2 Go?.. et la seule différence est une ligne à la fin? Le checksum peut comprendre cela et épargner le trafic de réseau. Vous pouvez utiliser-c si vous avez confiance dans le temps/la taille comparaison.

different times and same size ► perform checksum ► transfer only if checksums differ

bien sûr.



Je ne le vois pas, mais je me souviens que rsync avait un problème si c'était fini ... Je pense que c'était environ 130 000 dossiers. Peut-être que ce problème a été résolu.

si vous avez autant de fichiers dans un même répertoire, vous avez probablement de plus gros problèmes... répartissez - les sur différents répertoires et faites plusieurs rsync sur ces répertoires multiples.

Beaucoup de petits fichiers (sur la plupart des systèmes de fichiers) ont beaucoup de problèmes de fragmentation interne et vous pourriez être mieux d'archiver les fichiers et rsyncing l'archive... vous avez besoin d'un archiveur qui permet de mettre à jour l'archive plutôt que de la recréer en permanence.

Peut-être, si pas beaucoup de ces fichiers sont mis à jour... trouvez ceux qui ont été changés après une date (trouver --nouveau fichier) et ensuite rsync seulement ces fichiers. (si vous confiance à la fois)

Pourquoi cette question ignoré si longtemps?

4
répondu 9mjb 2013-12-12 04:54:42