У меня есть куча SD-карт класса 10 UHS-1 SDHC от разных производителей. Все они разделены следующим образом
$ 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
Я использовал дубликатор карты памяти для копирования изображений. Все карты имеют одинаковое содержание.
Когда я монтирую второй раздел любых двух SD-карт и сравниваю содержимое, они абсолютно одинаковы.
$ 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^
Однако, если я сравню sha1sum разделов, они иногда отличаются
$ 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 -
Незнакомец, если я сравниваю эти два диска, используя бинарный инструмент, например radiff2
, я вижу следующее
$ 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 изменений, хотя diff
и не видел различий в содержании!
И для здравомыслия, если я сравниваю два раздела с одинаковым значением sha1sum, я вижу следующее
$ radiff2 -c sdj2.img sdf2.img
0
0 изменений!
Вот разбивка различных значений, которые я вижу по разным картам. Похоже, что производитель карты сильно влияет на то, какой sha1sum я получаю, когда использую dd для чтения диска.
Несмотря на различия в sha1sums, все эти карты работают для моих целей. Однако это затрудняет проверку целостности, потому что я не могу сравнить sha1sums.
Как это возможно, что два раздела SD-карты могут иметь разные значения, но при подключении иметь одинаковое содержимое?
Ответ: теперь все работает как положено. Чтобы прояснить ситуацию, несоответствие было вызвано дубликатом SySTOR, который я использовал. В настройках копирования он использовал скопированную информацию о разделах и файлы, но не нужно было добавлять биты, чтобы гарантировать совпадение «один к одному».
Ответы:
Вы сравнили их содержимое сразу после написания дублированного содержимого? Если да, они должны выйти точно так же. Например,
Это верно только в том случае, если карты имеют одинаковый размер. Иногда даже разные партии карт одного и того же производителя и модели выпускаются с немного разными размерами. использование
blockdev --getsize64
чтобы получить точный размер устройства.Кроме того, если обе карты имеют абсолютно одинаковые размеры, но вы записали изображение на обе карты, которое было меньше емкости карт, то мусор, который появляется после конца изображения, может привести к появлению различий.
Как только вы смонтируете любую файловую систему на устройстве, вы начнете видеть различия. Реализация файловой системы будет записывать различные вещи в файловую систему, такие как пустой журнал или флаг / метка времени, чтобы пометить файловую систему как чистую, и тогда вы больше не увидите идентичный контент. Я считаю, что это может иметь место при некоторых обстоятельствах, даже если вы монтируете файловую систему только для чтения.
источник
blockdev --getsize64
? Похоже,dd
объявляет объем данных, которые он читает.dd
сообщит, сколько это скопировало . В случае несоответствия размера между файлом изображения, размером одного устройства и размером другого устройства и т. Д. ... это может быть размер источника, назначения или того и другого.dd
SD-карты со своего компьютера (как я делал с главным образом для дубликатора), все шасумы совпадают. Я изменил настройки SySTOR с «только данные систем и файлов» на «весь носитель», и теперь все дублированные карточки имеют одинаковые шасумыЧтобы развить ответ Селады: с одной стороны, вы делаете
diff
(рекурсивно) между двумя смонтированными файловыми системами. С другой стороны, вы делаете двоичное сравнение между устройствами, на которых есть файловые системы - очевидно, после того, как вы смонтировали файловые системы. Это яблоки и гранаты.Операция на уровне смонтированной файловой системы может видеть только содержимое данных файлов в файловых системах. Двоичное сравнение между устройствами смотрит на данные и метаданные . Я немного удивлен различиями в 767368, но я могу догадаться о нескольких:
diff
, каждому файлу на каждом устройстве будет обновлено время доступа (в inode).PS Вам нужно
dd
так много использовать ? Что произойдет, если вы делаетеradiff2 -c /dev/sdg2 /dev/sdj2
илиsha1sum /dev/sdg2
?источник
ro
(только для чтения) не должно вызывать (или разрешать) какие-либо изменения. (Хотя я видел один или два случая, когда программное обеспечение делало что-то отличное от того, что оно должно делать.) (2) После прочтения ваших комментариев (по одному на каждый ответ на момент написания этой статьи) я все еще не совсем понимаю, что получилось. Не могли бы вы отредактировать свой вопрос или опубликовать ответ, объясняющий обстоятельства, при которых вы получили ошибку сравнения (т. Е. Обнаружил различия) сразу после дублирования (до монтажа),… (Продолжение)