Vous voulez améliorer cette question ? Ajoutez des détails et clarifiez le problème en modifiant ce message.
Fermé il y a 6 ans.
Améliorer cette question
J'ai un gros fichier (2-3 Go, format binaire, non documenté) que j'utilise sur deux ordinateurs différents (normalement je l'utilise sur un système de bureau mais quand je voyage je le mets sur mon portable). J'utilise rsync pour transférer ce fichier dans les deux sens.
Je fais de petites mises à jour de ce fichier de temps en temps, en changeant moins de 100 Ko. Cela se produit sur les deux systèmes.
Le problème avec rsync si je comprends bien, c'est que s'il pense qu'un fichier a changé entre la source et la destination, il transfère le fichier complet. Dans ma situation, cela ressemble à une grosse perte de temps lorsqu'une petite partie d'un fichier a été modifiée. J'envisage un protocole où les agents de transfert à la source et à la destination vérifient d'abord l'ensemble du fichier, puis comparent le résultat. Lorsqu'ils se rendent compte que la somme de contrôle pour l'ensemble du fichier est différente, ils divisent le fichier en deux parties, A et B et les additionnent séparément.
Aha, B est identique sur les deux machines, ignorons cette moitié. Maintenant, il divise A en A1 et A2. Ok, seul A2 a changé. Divisez A2 en A2I et A2II et comparez, etc. Faites-le de manière récursive jusqu'à ce qu'il ait trouvé, par exemple, trois parties de 1 Mo chacune qui diffèrent entre la source et la destination, puis transférez uniquement ces parties et insérez-les au bon endroit dans le fichier de destination. Aujourd'hui, avec des SSD rapides et des processeurs multicœurs, une telle parallélisation devrait être très efficace.
Donc ma question est, y a-t-il des outils qui fonctionnent comme ça (ou d'une autre manière que je ne pouvais pas imaginer mais avec un résultat similaire) disponibles aujourd'hui ?
Une demande de clarification a été postée. J'utilise principalement Mac, donc le système de fichiers est HFS +. En général, je démarre rsync comme ceci
rsync -av --delete --progress --stats
- dans ce cas, j'utilise parfois SSH et parfois rsyncd. Quand j'utilise rsyncd, je le démarre comme ceci rsync --daemon --verbose --no-detach
.
Deuxième précision :je demande soit un outil qui transfère simplement le delta pour un fichier qui existe à deux endroits avec de petites modifications et/ou si rsync le propose vraiment. Mon expérience avec rsync est qu'il transfère les fichiers dans leur intégralité (mais maintenant il y a une réponse qui explique cela :rsync a besoin d'un serveur rsync pour pouvoir transférer uniquement les deltas, sinon (par exemple, en utilisant ssh-shell) il transfère l'ensemble fichier cependant beaucoup a changé).
En relation :Quand utiliseriez-vous un descripteur de fichier supplémentaire ?Réponse acceptée :
Rsync n'utilisera pas de deltas mais transmettra le fichier complet dans son intégralité s'il - en tant que processus unique - est responsable des fichiers source et de destination. Il peut transmettre des deltas lorsqu'un processus client et serveur distinct s'exécute sur les machines source et de destination.
La raison pour laquelle rsync n'enverra pas de deltas lorsqu'il s'agit du seul processus est que, pour déterminer s'il doit envoyer un delta, il doit lire les fichiers source et de destination. Au moment où c'est fait, il aurait tout aussi bien pu simplement copier le fichier directement.
Si vous utilisez une commande de cette forme, vous n'avez qu'un seul processus rsync :
rsync /path/to/local/file /network/path/to/remote/file
Si vous utilisez une commande de cette forme, vous avez deux processus rsync (un sur l'hôte local et un sur la télécommande) et les deltas peuvent être utilisés :
rsync /path/to/local/file remote_host:/path/to/remote/file