Como comparar arquivos remotos com base em hashes e transferir apenas os diferentes blocos

3

Eu quero comparar dois arquivos binários grandes que são armazenados em diferentes máquinas Linux com largura de banda limitada entre eles e, em seguida, fazer backup apenas dos blocos que diferem - na linha de comando. Para simplificar a tarefa, podemos supor que os arquivos não serão alterados durante o processo de comparação e os arquivos são do mesmo tamanho.

Isso é quase como o que eu acredito que rsync faz, só que eu não quero modificar o arquivo de destino - eu quero manter os diffs que eu posso aplicar à imagem de base para recriar uma cópia em vários pontos ( ou seja, quando os diffs são tirados).

Também estou ciente de xdelta , mas parece que apenas compara arquivos na mesma máquina.

O "processo" que eu considero (espero que tudo feito por um script / programa) possa ser -

  1. (Em cada máquina) produz uma lista de hashes para cada bloco.
  2. Compare os dois conjuntos de hashes.
  3. Produz um arquivo que extrai apenas os blocos alterados na origem em uma maneira como eles podem ser "mesclados" de volta com o arquivo de destino.

Alguém está ciente de um programa, script ou método elegante para fazer isso sem que eu tenha que cortar o código?

    
por davidgo 05.03.2013 / 05:47

2 respostas

1

Eu recomendo examinar o modo batch do rsync. A opção --only-write-batch em particular parece cumprir sua meta.

    
por 11.03.2013 / 22:30
0

A comparação eficiente geralmente requer a comparação de arquivos na mesma máquina, pois, se você quiser considerar os deslocamentos, é necessário fazer muita verificação de intervalo no processo. Por exemplo, se eu adicionei um caractere em um arquivo de texto, tudo depois desse caractere pode precisar ser transmitido como "novo" em uma simples verificação.

Um exemplo de um método de verificação muito simples é implementado pelo Bit Torrent. Cada bloco tem uma soma de verificação e cada arquivo é feito de uma série de blocos. Os blocos podem abranger o final / início de dois ou mais arquivos, mas a verificação de blocos também verificará esses períodos. Apenas os blocos que não correspondem à descrição do arquivo serão alterados. Assim, você inicia um cliente com alguns dos arquivos escritos com precisão e alguns diferentes (por corrupção ou mudança), apenas os blocos necessários para corrigir a diferença serão transferidos. O tamanho do bloco é configurável por arquivo de descrição de torrente por potências de 2, e existem milhares de clientes de código aberto dos quais você pode pegar esse código.

    
por 11.03.2013 / 22:27

Tags