Comparação de dispositivos de bloco brutos

8

Existe algum utilitário (ou alguma mágica de shell) que me permita comparar dois dispositivos de bloco?

Detalhes: Tenho um dispositivo RAID grande (0,5 TB) que copiei para um dispositivo SATA um pouco maior usando dd. O dispositivo tem várias partições, mas eu copio do dispositivo 'pai' e não dos nós do dispositivo particionado (por exemplo, eu copio / dev / hda e não / dev / hda1 por exemplo).

Gostaria de verificar se o backup está correto / correto.

Pensei em executar o md5sum em cada dispositivo, no entanto, isso não me dará um resultado preciso, já que o segundo dispositivo é um pouco maior que o primeiro e, portanto, os bytes extras alteram o hash.

    
por alanxz 24.01.2012 / 18:53

6 respostas

10

Eu usaria o comando

cmp /dev/hda /dev/hdb

ele irá parar no primeiro byte diferente, escrevendo seu offset, ou em EOF no menor.

    
por 24.01.2012 / 19:27
2

Dependendo de quão completo as unidades são, pode ser mais rápido montar os sistemas de arquivos e fazer

diff -qr /mnt/root1 /mnt/root2

Caso contrário, eu diria algo assim:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

Obviamente, calcule o quanto você precisa fazer com que bs e count parem (ou antes, se for muito mais conveniente) no final da unidade menor.

Ou, graças ao comentário da enzotib, parece que você pode usar cmp , mas precisará do sinal -n para limitar o número de bytes à menor das duas unidades.

cmp /dev/sda /dev/sdb -n 500GB
    
por 24.01.2012 / 19:26
2

Você está procurando por software de diferenciação binária

rdiff
é projetado para backup e transmissão em rede, veja em rdiff-backup e duplicidade para proposição de backup

xdelta3
é um diff binário de código aberto, ferramentas de compactação diferencial, compactação delta VCDIFF (RFC 3284).

bsdiff
é também!! Com fome de memória, não é adequado para dispositivos de bloco.

    
por 14.05.2013 / 16:12
1

Existe um utilitário chamado bsdiff , que faz exatamente esse tipo de coisa. Ele é realmente rápido e é capaz de gerar um patch binário, se você precisar.

Veja este post para obter explicações sobre isso.

    
por 24.01.2012 / 20:21
1

Você pode comparar dois dispositivos de blocos de tamanho diferente usando md5sum da seguinte forma:

(supondo que o dispositivo menor seja /dev/sda )

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum
    
por 12.12.2015 / 01:47
0

Considere a execução de fsck no backup. Talvez seja necessário executar alguns truques com losetup para obter dispositivos de loopback definidos em partições incorporadas no backup, mas se a verificação do arquivo indicar que a estrutura do arquivo é consistente, os dados em si provavelmente serão bons.

Se você quiser uma soma de verificação completa, pode usar dispositivos de loopback com deslocamentos para examinar as 'partições' internas do backup e md5sum separadamente, mas uma fsck forçada pode lhe dar uma ideia básica muito mais rápida do que byte byte compara ou cálculos de checksum.

    
por 17.07.2015 / 08:47