Comparação de dispositivos de bloco bruto

12

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

Detalhes: Eu tenho um dispositivo RAID grande (0,5 TB) do qual fiz backup em um dispositivo SATA um pouco maior usando o dd. O dispositivo possui várias partições, mas eu copio do dispositivo 'pai' e não dos nós do dispositivo particionado (por exemplo, copio / dev / hda e não / dev / hda1, por exemplo).

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

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

alanxz
fonte

Respostas:

13

Eu usaria o comando

cmp /dev/hda /dev/hdb

ele irá parar no primeiro byte diferente, anotando seu deslocamento ou no EOF no menor.

enzotib
fonte
Não vejo nada na página de manual sobre parar na EOF, isso está documentado em algum lugar?
Kevin Kevin
De fato, o status de saída diz: "1: Os arquivos são diferentes; isso inclui o caso em que um arquivo é idêntico à primeira parte do outro". Isso parece implicar que não os reporte como idênticos se um for menor.
Kevin Kevin
@ Kevin: from info cmp: "O comando 'cmp' compara dois arquivos e, se forem diferentes, informa o primeiro byte e o número da linha em que são diferentes."
enzotib
1
Você pode usar a --bytes=LIMITopção, configurando o LIMITvalor para o tamanho de bytes do dispositivo menor para parar no final da unidade menor (ou do limite da partição) sem cmpsair com status diferente de zero.
rozcietrzewiacz
se eu tiver uma cópia / dev / loop0 de / dev / sda e fizer alterações em / dev / loop0, como eu poderia adicionar as novas alterações em / dev / sda ?? Obrigado
Milor123
2

Dependendo de quão cheias as unidades estejam, pode ser mais rápido montar os sistemas de arquivos e

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, descubra quão grande você precisa aumentar bse countparar no final da unidade menor (ou logo antes, se for muito mais conveniente).

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

cmp /dev/sda /dev/sdb -n 500GB
Kevin
fonte
Infelizmente, não consigo montar o dispositivo como um volume NTFS e tenho um LiveCD sem os drivers corretos. Para o segundo comando, os subshells que você usa não tentam sugar o dispositivo inteiro para a memória antes de alimentá-lo no diff?
alanxz
1
@alanxz Não, os diffsubshells não lerão o dispositivo inteiro antes de escrevê-lo. ddgrava bsbytes imediatamente após a leitura (ou processamento, se especificado, não aqui) e grava em fifos, que bloqueiam até serem lidos.
Kevin Kevin
Eu estava pensando mais no nível do shell (ou o que implementa o FIFO). Mas isso responde à minha pergunta!
alanxz
2

Você está procurando software diff binário

O rdiff
foi projetado para transmissão de backup e rede, veja rdiff-backup e duplicidade para propuse de backup

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

bsdiff
é demais !! memória com fome, não é adequado para dispositivos de bloco.

gustavodiazjaimes
fonte
1

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

Veja este post para obter algumas explicações.

Coren
fonte
bsdiffO trabalho de é mais complexo do que simplesmente comparar dois arquivos, por isso duvido que possa ser mais rápido que o mais simples cmp.
enzotib
O link está quebrado.
Owen Pauling
1

Você pode comparar dois dispositivos de bloco de tamanhos diferentes usando o md5sumseguinte:

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

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum
EmmaV
fonte
0

Considere executar fsckno backup. Pode ser necessário executar alguns truques losetuppara definir dispositivos de loopback em partições incorporadas no backup, mas se a verificação do arquivo indicar que a estrutura do arquivo é consistente, é provável que os dados sejam bons.

Se você deseja uma soma de verificação completa, pode usar dispositivos de loopback com deslocamentos para examinar as 'partições internas' do backup e do md5sum cada uma separadamente, mas um forçado fsckpode fornecer uma idéia básica muito mais rápido que byte para compara byte ou cálculos de soma de verificação.

Evan Langlois
fonte