Como verificar a integridade de um backup dd?

11

Acabei de fazer um backup de um disco rígido inteiro (50 GB) sshvia:

dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Qual é agora a melhor maneira de verificar a integridade do arquivo image.img, ou seja, como verificar se tudo foi copiado corretamente?

aluna
fonte
Normalmente, quando você dd, é sempre perfeito. No entanto, você sempre pode executar sha1sum para verificar os hashes sha1 do original e do backup.
darnir
2
" Geralmente ... é sempre perfeito." Isso me lembra a citação de The Naked Gun: "Os médicos dizem que Nordberg tem 50/50 de chance de viver, embora haja apenas 10% de chance disso".
Sparhawk

Respostas:

10

Se o comando foi finalizado com êxito, o backup está correto, exceto uma falha de hardware (que poderia afetar igualmente qualquer verificação que você possa executar). Posteriormente, poderá ficar incorreto se o hardware estiver com defeito, mas a maioria dos hardwares de armazenamento detecta corrupção.

Há uma ressalva aqui: em um pipeline, o shell não relata erros do lado esquerdo. (Isso ocorre devido a um cenário bastante comum, no qual o lado direito não precisa ler todos os dados, por exemplo some_command | head, e o lado esquerdo morre porque sua saída não é mais desejada.) Portanto, aqui um erro de leitura ddseria ser ignorado. No bash, defina a pipefailopção para relatar erros de todas as partes do pipeline.

Além disso, cuidado com isso dd bs=…ignora alguns erros e ddgeralmente é mais lento que as alternativas . Eu recomendo não usar ddnada: não há benefícios em copiar apenas um arquivo inteiro. Ao contrário do que você pode ter lido em algum lugar, ddnão há um comando de acesso ao disco de baixo nível com propriedades especiais, não há absolutamente nenhuma mágica dd, a mágica está /dev/hda.

shopt -s pipefail
set -e
</dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

No entanto, se você deseja verificar o backup, a melhor maneira é pegar uma soma de verificação criptográfica de cada lado e compará-las. Por exemplo:

ssh myuser@myhost "sha1sum image.img" &
sudo sha1sum /dev/hda

Verifique se as duas somas de verificação são idênticas.

Observe que isso testa se o backup e o original são idênticos no momento da verificação. Qualquer coisa que você altere /dev/hda, incluindo montar e desmontar um sistema de arquivos, mesmo sem fazer nenhuma alteração (que atualizará a última data de montagem em muitos sistemas de arquivos), alterará a soma de verificação. Se você deseja verificar a integridade posteriormente, anote a soma de verificação do disco no momento do backup em algum lugar.

Gilles 'SO- parar de ser mau'
fonte
3
Note que se qualquer coisa sobre /dev/hdamudou desde o backup foi feito os hashes não irá corresponder.
bahamat
O benefício de uma verificação de hash é que os falsos negativos (erro cometido na gravação de imagem são repetidos por acaso durante a execução do hash, de modo que uma falha passa despercebida) são astronomicamente minúsculos. Se houver alguma falha de hardware, isso deve resultar em uma falha na verificação de hash. Irá obter uma verificação falhada positiva se o disco foi alterado, como foi observado.
Steven Lu
@StevenLu Não, a chance de correlação é bastante alta, porque as falhas de hardware não são uniformemente aleatórias. Em particular, os erros de RAM (que são as falhas de hardware mais comuns observáveis ​​nos PCs comuns) ocorrem em bits específicos.
Gilles 'SO- stop be evil'
Ok, provavelmente ... hash assim com um grande grão de sal, claro, mas o OP estava sendo transferido por uma rede. É intrinsecamente não confiável, apesar do TCP. Além disso, é provável que não tenhamos o mesmo padrão de acesso exato (na memória física).
Steven Lu
Nova pergunta relacionada que busca esclarecimentos sobre a primeira frase do @Gilles.
Sparhawk
5

Como o Darnir & Giles mencionou, a melhor coisa a fazer é executar hashes criptográficos imediatamente após o backup antes que algo seja alterado no disco de origem. Se, no entanto, você tiver usado o disco desde então, os hashes provavelmente não serão correspondentes. Mesmo alterar um byte no disco resultará em um hash completamente diferente.

Embora seja muito abaixo do ideal, você pode verificar a imagem montando-a. No sistema em que a imagem do disco está, execute o seguinte (crie /mnt/diskse não existir ou use um local alternativo):

mount -o loop image.img /mnt/disk

Você pode navegar /mnt/diske ver todos os arquivos. Verifique os hashes sha1 dos arquivos críticos dentro da imagem em relação aos originais para verificar sua integridade.

bahamat
fonte
-1

Use o comando qemu-img

qemu-img check image.img
PolkaRon
fonte