Calcular md5sum de um CD / DVD

18

Eu tenho um arquivo ISO, que gravei em um CD. Agora, como posso verificar se o CD foi criado corretamente? Gostaria de um comando que calcule a soma de hash que posso usar para verificar com a soma de hash que calculo no arquivo ISO. Idealmente, o comando deve:

  • Trabalhe independentemente do arquivo ISO: ou seja, não quero manter uma lista de soma de hash para cada arquivo no disco ou lembrar o número de blocos, seja qual for
  • Seja relativamente curto: um comando de uma linha é ótimo, uma cadeia de comandos com duas linhas é OK, um script que abrange uma página não é
  • Seja razoavelmente eficiente: por exemplo, ddo disco retornado para um arquivo e executado md5sumno arquivo é inaceitável

Se não houver resposta que não possa satisfazer tudo, também aprecio a correspondência mais próxima. Melhor ainda, se você pode me dizer por que não é tão direto.

phunehehe
fonte

Respostas:

18

O problema básico é que queremos obter o md5sum da mesma informação exata que estava originalmente na ISO. Quando você grava o ISO em um CD, é provável que haja espaço em branco na extremidade do disco, o que inevitavelmente altera o md5sum. Assim, o caminho mais curto:

md5sum /dev/cdrom

não funciona . O que funciona (e é comum na documentação online ) é apenas ler o número exato de bytes do dispositivo e depois executar o md5sum. Se você souber o número de bytes, poderá fazer algo como:

dd if=/dev/cdrom bs=1 count=xxxxxxxx | md5sum

onde 'xxxxx' é o tamanho do iso em bytes.

Se você não sabe o número de bytes disponíveis, mas ainda tem o iso no seu disco, pode obtê-los usando ls, fazendo o seguinte: ( extraído daqui ):

dd if=/dev/cdrom | head -c `stat --format=%s file.iso` | md5sum

Existem muitas outras construções de uma linha que devem funcionar. Observe que, em cada caso, estamos usando ddpara ler os bytes do disco, mas não os estamos encaminhando para um arquivo; estamos entregando-os ao md5sum imediatamente.

É possível fazer possíveis melhorias na velocidade fazendo alguns cálculos para usar um tamanho de bloco maior (o bs=no ddcomando).

Steven D
fonte
Você pode simplificar dd if=/dev/cdrom |para </dev/cdrom. Não há nada mágico dde bloqueia dispositivos, é apenas um comando de manipulação de fluxo com uma sintaxe engraçada.
Gilles 'SO- stop be evil'
A propósito, você (phunehehe) deve ter o tamanho iso junto com a soma de verificação MD5. Isso é particularmente importante para o MD5, que está parcialmente quebrado, mas é uma boa idéia para segurança e usabilidade, independentemente da soma de verificação que você usa.
Gilles 'SO- stop be evil'
@ Gilles: na verdade, usar ddcom bso tamanho do cache do dispositivo pode acelerar a transferência de dados, em oposição ao redirecionamento de entrada simples.
alex
@ Gilles: o que você quer dizer com "MD5 que está parcialmente quebrado"? E por que devo manter o tamanho do arquivo, se algo está errado, a soma de verificação deve me informar imediatamente?
Phreinhe #
@phunehehe: Existem deficiências criptográficas conhecidas com o MD5 (não é (publicamente) conhecido como gerar uma colisão para um determinado arquivo, mas pode vir). Conhecer o tamanho do arquivo oferece um pouco mais de confiança (embora não muito mais). Também fornece feedback imediato para erros acidentais comuns, como downloads truncados.
Gilles 'SO- stop be evil'
2

Existe um programa para esta tarefa. É chamado - checkisomd5. No Ubuntu, ele pode ser instalado por comando:

sudo apt-get install isomd5sum
Денис Проскурин
fonte
como você usa isso? checkisomd5 /dev/sr0me dá: A verificação da mídia está concluída, o resultado é: NA. Nenhuma informação de soma de verificação disponível, incapaz de verificar a mídia.
Torsten
A soma de verificação deve ser incorporada na imagem ISO com a ferramenta "implantisomd5". Isso precisa ser feito antes que o iso seja gravado no disco. Utilitário incluído em "checkisomd5".
Денис Проскурин
1

Se o tamanho da imagem no disco for divisível até 2048, número inteiro, o que parece ser muito comum, você poderá obter uma MD5sum precisa da seguinte forma: onde sr0está o nome da óptica - que pode ser encontrada usando lshw -C disk- - e onde 'count' é o dividendo do tamanho da imagem dividido em 2048.

dd if=/dev/sr0 bs=2048 count=356352 |md5sum
wsmart
fonte
Muitos CDs provavelmente usam faixas "Modo 1", com 2.048 bytes de dados do usuário por setor . ("Modo 2" armazena 2.336 bytes de dados do usuário por setor, mas não possui os recursos mais avançados de detecção e correção de erros oferecidos pelo Modo 1, fazendo com que o Modo 2 seja menos útil para dados em que erros não podem ser tolerados.)
um CVn em