Como verificar se o ISO foi gravado no meu stick USB sem erros?

8

Eu segui as estas instruções do DebianEeePC HowTo InstallUsingStandardInstaller no Debian Wiki, para escrever um Debian ISO para o meu USB.

dd if=debian-*-netinst.iso of=/dev/sdX

Usando sha1sum , posso verificar as somas de verificação do meu arquivo ISO baixado. Como posso verificar a soma de verificação do pen drive USB, para ter certeza de que o pen drive USB não tem problemas e que o ISO foi copiado perfeitamente?

    
por Village 12.05.2013 / 03:30

4 respostas

15

Você pode usar cmp para verificar se tudo foi copiado corretamente:

$ cmp -n 'stat -c '%s' debian-X-netinst.iso' debian-X-netinst.iso /dev/sdX

Esta solução não calcula explicitamente a soma de verificação de seu /dev/sdX , mas você não precisa fazer isso porque já fez isso para a origem da comparação (por exemplo, debian-X-netinst.iso ).

Fazer apenas um dd if=/dev/sdX | sha1sum pode gerar uma soma de verificação de correspondência incorreta apenas porque você obtém blocos finais ( /dev/sdX é provavelmente maior que o arquivo iso).

Via cmp -n certifica-se de que nenhum byte no seu /dev/sdX seja comparado.

Se você é paranóico com a qualidade do seu dispositivo de armazenamento em massa USB, chama sync , ejeta, reinseri-lo e fazer a comparação - senão todos ou alguns blocos podem vir da VM (cache) de kernels - quando, na realidade, talvez alguns bits no hardware estejam estragados.

    
por 12.05.2013 / 15:10
3

A resposta de Julien faz o trabalho, mas há uma maneira mais simples e rápida de fazer isso:

sudo head -c <image size> /dev/sdX | sha1sum
    
por 29.03.2016 / 11:58
2

O uso de dd e md5sum / sha1sum é suficiente, mas, como dito anteriormente, tenha cuidado, seu dispositivo não é do mesmo tamanho que seu arquivo, portanto, as somas serão diferentes.

Aqui como você ainda pode fazer isso

Primeiro, você precisa saber o tamanho do arquivo:

$ stat -c '%s' debian-live-8.2.0-amd64-lxde-desktop.iso
1003487232

Então, para ser legal com o seu syscalls, é melhor você obter isso como um múltiplo de um bom poder de dois como 4096 , a multiplicação dos dois tem que produzir exatamente o tamanho do arquivo, de outras maneiras, você Verificaremos poucos ou muitos bytes, resultando em uma soma de verificação incorreta.

$ bc
bc 1.06.95
scale = 9
1003487232 / 4096
244992.000000000

Estou feliz, 4096 × 244992 = 1003487232 então 4096 é bom para mim, (e será para você, provavelmente) para que eu possa usar um tamanho de bloco de 4096 (típico) e uma contagem de blocos de 244992 .

Não se esqueça de escrever o arquivo na chave USB ...

$ dd if=debian-live-8.2.0-amd64-lxde-desktop.iso of=/dev/sd? && sync

E saiba que, usando o tamanho de bloco conhecido e a contagem de blocos, você pode ler o número exato de bytes da chave e verificá-los:

$ dd if=/dev/sdb bs=4096 count=244992 | sha1sum
b0dbe4ca8f526d1e43555459c538607d4a987184

(Sim md5sum é muito mais rápido do que sha1sum , mas esse não é o seu gargalo aqui, o gargalo é o débito USB, obrigado por notar).

Ou, resumindo:

dd if=/dev/sdb bs=4096 count=$(($(stat -c '%s' the.iso) / 4096)) | sha1sum
    
por 20.11.2015 / 15:42
0

Baseado na resposta de @Kyle Jones

diff <(md5sum debian-XYZ-netinst.iso | awk '{print $1}') <(dd if=/dev/sdX | md5sum | awk '{print $1}')

você deve usar md5sum porque é mais rápido que sha1sum (isso economizará tempo quando você marcar um arquivo grande)

    
por 12.05.2013 / 06:57