3 votes

Comment comparer des fichiers distants sur la base de hachages et ne transférer que les blocs qui diffèrent ?

Je veux comparer deux grands fichiers binaires stockés sur des machines Linux différentes avec une bande passante limitée entre elles, puis sauvegarder uniquement les blocs qui diffèrent - en ligne de commande. Pour simplifier la tâche, nous pouvons supposer que les fichiers ne seront pas modifiés pendant le processus de comparaison et qu'ils ont la même taille.

C'est presque comme ce que je crois rsync Je veux conserver les différences que je peux appliquer à l'image de base afin de pouvoir recréer une copie à différents moments (c'est-à-dire lorsque les différences sont prises).

Je suis également conscient de xdelta mais il semble que cela ne permette de comparer que des fichiers situés sur la même machine.

Le "processus" que j'envisage grossièrement (en espérant que tout soit fait par un script/programme) pourrait être le suivant .

  1. (Sur chaque machine) produire une liste de hashs pour chaque bloc.
  2. Comparez les 2 jeux de hashs.
  3. Produire un fichier qui tire seulement les blocs modifiés dans la source de telle sorte que de manière à ce qu'ils puissent être "fusionnés" avec le fichier cible.

Quelqu'un connaît-il un programme, script ou une méthode élégante pour faire cela sans que je doive couper du code ?

0 votes

Défaut du serveur est destiné aux questions posées dans un cadre professionnel sur le lieu de travail seulement . Est-ce le cas pour vous ?

0 votes

Oui, définitivement. (Je pense que l'examen des solutions de type déduplication place cette question dans le domaine de l'administration des serveurs - et je suis un administrateur système de métier). La réponse à cette question pourrait être particulièrement utile aux administrateurs système qui gèrent une infrastructure VM - comme je le fais.

1voto

songsong Points 173

Je recommande d'examiner le mode batch de rsync. Le site --only-write-batch Une option en particulier semble atteindre votre objectif.

0 votes

Merci pour cette information. Je ne connaissais pas cette option et elle peut probablement être adaptée à ce que j'essaie de réaliser.

0voto

Tom Points 720

Une comparaison efficace nécessite généralement de comparer des fichiers sur la même machine, car si vous voulez tenir compte des décalages, vous devez effectuer de nombreux contrôles de plage au cours du processus. Par exemple, si j'ai ajouté un caractère dans un fichier texte, tout ce qui suit ce caractère devra être transmis comme "nouveau" lors d'une simple vérification.

Un tel exemple de méthode de contrôle très simple est mis en œuvre par Bit Torrent. Chaque bloc a une somme de contrôle, et chaque fichier est composé d'une série de blocs. Les blocs peuvent s'étendre sur la fin ou le début de deux ou plusieurs fichiers, mais la vérification des blocs vérifie également ces étendues. Seuls les blocs qui ne correspondent pas à la description du fichier seront modifiés. Ainsi, si vous démarrez un client avec certains des fichiers correctement écrits et d'autres différents (par corruption ou modification), seuls les blocs nécessaires pour corriger la différence seront transférés. La taille des blocs est configurable par fichier de description de torrent par puissances de 2, et il y a des tonnes de clients open source dont vous pouvez récupérer ce code.

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