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:
- trabalha no Linux
- pode criar diffs
- pode usar diffs para corrigir arquivos
- pode lidar com arquivos binários
- pode lidar com 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 a partir de um arquivo compactado com gzip e gravar em um)
Existe algo assim?
rdiff
seria valiosa para referência futura. Exemplo: digamosfile1
efile2
sejam dois arquivos semelhantes de 1 GB cada. 1) Como calcular o rdiff? 2) Como salvar este rdiff em umpatch
arquivo? 3) Como aplicar estepatch
arquivofile1
para recuperarfile2
?Respostas:
Você provavelmente deve dar uma olhada nas ferramentas relacionadas ao rsync: rdiff e rdiff-backup . O
rdiff
comando permite produzir um arquivo de correção e aplicá-lo a algum outro arquivo.O
rdiff-backup
comando usa essa abordagem para lidar com diretórios inteiros, mas acho que você está trabalhando com imagens de disco de arquivo único, entãordiff
será a única a usar.fonte
rdiff signature oldfile | rdiff delta - newfile deltafile
file1
efile2
são dois arquivos semelhantes de 1 GB cada. 1) Como calcular o diff? 2) Como salvar este diff em um arquivo de patch? 3) Como aplicar esse arquivo de patchfile1
para recuperarfile2
?O xdelta pode fazer tudo o que você quiser. No entanto, se as suas imagens não forem muito semelhantes, você poderá acabar com um patch muito grande, porque o 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.
O bsdiff é outra opção, mas tem muita memória RAM e é totalmente inapropriado para qualquer coisa do tamanho de uma imagem de disco.
fonte
Resposta canônica
Com relação à rdiff da publicação, o librsync 2.0.1 é uma boa leitura para o esclarecimento da funcionalidade do comando, por isso mencionei isso abaixo para preservar o conteúdo dessa resposta, se nada mais.
É importante tentar entender bem as três etapas do rdiff para atualizar um arquivo: assinatura , delta e patch, conforme mencionado na página do manual do rdiff . Eu também encontrei um
rdiff
script de exemplo de comando no GitHub que é útil, que eu vou referenciar e citar.Comandos rápidos (por
rdiff-example.sh
)fonte
JDIFF é um programa que gera as diferenças entre dois arquivos (binários).
fonte