Por que o md5sum fornece resultados inconsistentes em arquivos de dispositivos?

2

Fazendo backup de algumas unidades flash USB no Lubuntu 16.04.3 LTS.

Ligue a unidade USB ao laptop. O Automounter faz suas coisas. Eu remonto todas as partições como somente leitura

sudo mount -o remount,ro /dev/sdxn

Copie a unidade USB para o arquivo de imagem no disco rígido usando ddrescue (reinicializável)

sudo ddrescue -b 4096 /dev/sdx sdx.img sdx.log

(Nota: tamanho do bloco determinado por sudo blockdev --getbsz /dev/sdx )

md5sum sdx.img dá resultado < foo >

limpe os buffers de disco :      sudo blockdev --flushbufs /dev/sdx

  • caso contrário, o comando subseqüente lê o cache de disco e não o disco real (como confirmado ao observar a luz de atividade na unidade USB e a velocidade de conclusão dos comandos posteriores).

sudo md5sum /dev/sdx dá resultado < bar >

Parece que a cópia falhou.

MAS

a subsequente sudo dd if=/dev/sdc bs=4096 | md5sum

dá resultado < foo > novamente !!! O que?

Acontece que dd (e ddrescue) gera imagens consistentes, todas com o mesmo md5sum, mas se eu md5sum o arquivo do dispositivo diretamente, obtenho resultados md5sum diferentes.

Eu perdi algo óbvio? A maioria dos howtos aconselha o uso de md5sum no arquivo do dispositivo, então acho que encontrei um bug / recurso, ou fui idiota e perdi algo óbvio. Alguma pista?

(Note, estou gerando imagens das unidades USB, já que algumas delas são inicializáveis, com um conjunto útil de ferramentas nelas. Isso ocupa espaço, portanto, para as unidades maiores, vou reduzir a necessidade de armazenamento usando mksquashfs ( mksquashfs sdx.img sdx.squash.img ). Isso funciona bem, desde que eu mude a propriedade do arquivo de imagem do root para meu nome de usuário antes do mksquashfs.Isso significa que eu tenho imagens compactadas montáveis, então navegar pelo conteúdo é fácil. maneira.

[Editar para adicionar: tendo visto arquivo-imagem-hdd-soma de verificação-não-combina-com-dispositivo-soma de verificação Eu posso dizer que sudo blockdev --getsize64 /dev/sdx e o tamanho do arquivo de imagem no disco são exatamente os mesmos.]

[Atualização adicional:

$ sudo cat /dev/sdx | md5sum a4db504f408c139cd2517b4038dfdb2f - $ sudo dd if=/dev/sdx | md5sum 2038272+0 records in 2038272+0 records out 1043595264 bytes (1.0 GB, 995 MiB) copied, 105.895 s, 9.9 MB/s e6174ed97f010cc7aa2ea9669cd85c50 - $ sudo md5sum /dev/sdx 823b619d439fbb0abde5841097c76e72 /dev/sdx

Em seguida, repita

$ sudo cat /dev/sdx | md5sum a4db504f408c139cd2517b4038dfdb2f - $ sudo dd if=/dev/sdx | md5sum 2038272+0 records in 2038272+0 records out 1043595264 bytes (1.0 GB, 995 MiB) copied, 105.747 s, 9.9 MB/s e6174ed97f010cc7aa2ea9669cd85c50 - $ sudo md5sum /dev/sdx 823b619d439fbb0abde5841097c76e72 /dev/sdx

Assim, o comportamento é repetitivo - usando cat, dd e direct md5sum dá respostas diferentes, mas aparentemente cat dá a mesma resposta toda vez que dd e md5sum.

Como posso usar cat , dd , ddrescue ou pv para copiar o conteúdo do dispositivo para uma imagem em disco, o que é 'correto'?]

    
por Lleu Evans 22.09.2017 / 15:38

0 respostas