Binário diff / patch para arquivos grandes no linux?

9

Eu tenho duas imagens de partição (A e B) e quero usá-las para criar um patch que eu possa aplicar em A em outro computador para obter a nova imagem B sem inundar a rede. Eu tenho os seguintes requisitos:

  • funciona no Linux
  • pode criar diffs
  • pode usar diffs para corrigir arquivos
  • pode manipular arquivos binários
  • pode manipular arquivos grandes (algumas centenas de GB devem funcionar)
  • nenhuma interação do usuário é necessária (apenas um aplicativo de console)
  • idealmente, deve ser capaz de ler / gravar em pipes (para que eu possa canalizar para ele a partir de um arquivo compactado com gzip e gravar em um)

Existe algo assim?

    
por thejh 13.05.2011 / 15:49

3 respostas

11

Você provavelmente deve dar uma olhada nas ferramentas relacionadas ao rsync: rdiff e rdiff-backup . O comando rdiff permite produzir um arquivo de correção e aplicá-lo a outro arquivo.

O comando rdiff-backup usa essa abordagem para lidar com diretórios inteiros, mas acredito que você esteja trabalhando com imagens de disco de arquivo único, então rdiff será o único a ser usado.

    
por 13.05.2011 / 16:13
7
O

xdelta pode fazer tudo o que você deseja. Aviso justo, porém, se as suas imagens não são muito <> semelhantes, você pode acabar com um patch muito grande, porque xdelta usa metade do buffer de memória definido para encontrar diferenças. Mais informações estão disponíveis na página da wiki TuningMemoryBudget . Aumentar o tamanho do buffer pode ajudar bastante.

bsdiff é outra opção, mas é muito RAM com fome e completamente inadequado para qualquer coisa do tamanho de uma imagem de disco.

bsdiff is quite memory-hungry. It requires max(17*n,9*n+m)+O(1) bytes of memory, where n is the size of the old file and m is the size of the new file. bspatch requires n+m+O(1) bytes.

    
por 13.05.2011 / 17:14
1

JDIFF é um programa que gera as diferenças entre dois arquivos (binários).

    
por 05.06.2014 / 11:08