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
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'?]