Eu tenho um monte de cartões SD 10 UHS-1 SDHC de diferentes fabricantes. Eles são todos particionados da seguinte maneira
$ sudo fdisk -l /dev/sdj
Disk /dev/sdj: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0000de21
Device Boot Start End Sectors Size Id Type
/dev/sdj1 2048 1050623 1048576 512M c W95 FAT32 (LBA)
/dev/sdj2 1050624 2099199 1048576 512M 83 Linux
/dev/sdj3 2099200 3147775 1048576 512M 83 Linux
/dev/sdj4 3147776 31116287 27968512 13.3G 83 Linux
Usei um duplicador de cartão de memória para copiar as imagens. Todos os cartões têm o mesmo conteúdo.
Quando monto a segunda partição de dois cartões SD e comparo o conteúdo, eles são exatamente iguais.
$ sudo mount -o ro /dev/sdg2 /mnt/system-a/
$ sudo mount -o ro /dev/sdj2 /mnt/system-b/
$ diff -r --no-derefence /mnt/system-a /mnt/system-b/
$ # prints nothing^
No entanto, se eu comparar o sha1sum das partições, elas às vezes diferem
$ sudo dd if=/dev/sdg2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.3448 s, 43.5 MB/s
ee7a16a8d7262ccc6a2e6974e8026f78df445e72 -
$ sudo dd if=/dev/sdj2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.6412 s, 42.5 MB/s
4bb6e3e5f3e47dc6cedc6cf8ed327ca2ca7cd7c4 -
Estranho, se eu comparar essas duas unidades usando uma ferramenta de diferenças binárias como radiff2
, vejo o seguinte
$ sudo dd if=/dev/sdg2 of=sdg2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2378 s, 43.9 MB/s
$ sudo dd if=/dev/sdj2 of=sdj2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2315 s, 43.9 MB/s
$ radiff2 -c sdg2.img sdj2.img
767368
767368 alterações, mesmo que diff
não tenha visto nenhuma diferença no conteúdo!
E por sanidade, se eu comparar duas partições que tinham o mesmo sha1sum, vejo o seguinte
$ radiff2 -c sdj2.img sdf2.img
0
0 alterações!
Aqui está um resumo dos diferentes sha1sums que vejo em diferentes cartões. Parece que o fabricante da placa tem um grande efeito sobre o sha1sum que recebo quando uso o dd para ler a unidade.
Apesar das diferenças nos sha1sums, todos esses cartões funcionam para meus propósitos. No entanto, está dificultando a verificação de integridade porque não posso comparar sha1sums.
Como é possível que duas partições de cartão SD possam ter sha1sums diferentes, mas tenham exatamente o mesmo conteúdo quando montadas?
Resposta: Então agora funciona como esperado. Para esclarecer as coisas, a inconsistência foi causada pelo duplicador SySTOR que eu estava usando. A configuração de cópia em que eu usei usava informações e arquivos de partições copiados, mas não era necessário dd os bits para garantir que houvesse uma correspondência individual.
Respostas:
Você comparou o conteúdo deles imediatamente após escrever o conteúdo duplicado? Se sim, eles devem ser exatamente iguais. Por exemplo,
Isso só é verdade se os cartões tiverem exatamente o mesmo tamanho. Às vezes, até diferentes lotes de cartões do mesmo fabricante e modelo são produzidos com tamanhos ligeiramente diferentes. Use
blockdev --getsize64
para obter o tamanho exato do dispositivo.Além disso, se os dois cartões tiverem tamanhos exatamente idênticos, mas você tiver gravado uma imagem nos dois cartões menor que a capacidade dos cartões, o lixo que vem depois do final da imagem pode causar diferenças.
Depois de montar qualquer sistema de arquivos no dispositivo, você começará a ver diferenças. A implementação do sistema de arquivos gravará várias coisas no sistema de arquivos, como um diário vazio ou um sinalizador / carimbo de data / hora para marcar o sistema de arquivos como limpo e você não verá mais conteúdo idêntico. Acredito que esse possa ser o caso em algumas circunstâncias, mesmo se você montar o sistema de arquivos somente leitura.
fonte
blockdev --getsize64
? Parece quedd
está anunciando a quantidade de dados que lê.dd
relatará quanto foi copiado . No caso de incompatibilidade de tamanho entre um arquivo de imagem, o tamanho de um dispositivo e o tamanho de outro dispositivo, etc ... que pode ser o tamanho da fonte, do destino ou de ambos.dd
coloco os cartões SD do meu computador (como fiz com a imagem principal do duplicador), todos os shasums coincidem. Eu mudei as configurações no Systor de "sistemas e arquivos somente de dados" para "media inteiras" e shasums agora todos os cartões duplicados têm correspondentesPara aproveitar a resposta da Celada: Por um lado, você está fazendo um
diff
(recursivo) entre dois sistemas de arquivos montados. Por outro lado, você está fazendo uma comparação binária entre dispositivos que possuem sistemas de arquivos - aparentemente, depois de montar os sistemas de arquivos. São maçãs e romãs.A operação no nível do sistema de arquivos montado pode ver apenas o conteúdo dos dados dos arquivos nos sistemas de arquivos. A comparação binária entre os dispositivos examina os dados e os metadados . Estou um pouco surpreso com as diferenças do 767368, mas posso adivinhar algumas:
diff
, todos os arquivos em cada dispositivo terão seu tempo de acesso (no inode) atualizado.PS Você precisa usar
dd
tanto? O que acontece se você fazradiff2 -c /dev/sdg2 /dev/sdj2
ousha1sum /dev/sdg2
?fonte
ro
(somente leitura) não deve causar (ou permitir) nenhuma modificação. (Embora eu tenha visto um ou dois casos de software fazendo algo diferente do que deveria fazer.) (2) Depois de ler seus comentários (um em cada resposta, no momento da redação deste artigo), ainda não entendi bem o que aconteceu. Você pode editar sua pergunta ou postar uma resposta explicando as circunstâncias nas quais você obteve falha na comparação (ou seja, encontrou diferenças) imediatamente após duplicar (antes da montagem),… (continua)