ISO-образы и их контрольные суммы (20.08.2022). Печать
2022 - Август
20.08.2022 07:39
Save & Share
Была надежда, что материала хватит на научную работу - но полученные данные не настолько значимы для мирового сообщества. Вывод материала: программы создания и записи ISO-образов могут глючить незаметно для пользователя. В итоге, контрольные суммы ISO и компакт-диска будут отличаться - не влияя на работоспособность.


Пару месяцев назад приключилась история: ISO-файл, имеющий одинаковое содержимое с точностью до файла и одинаковый размер с точностью до байта - внезапно - оказался с разными контрольными суммами. Тогда эксперименты с записыванием ISO-образов не дали результата. В этот раз получилось немного иначе: эксперименты с созданием ISO в разных программах, частично, приоткрыли завесу другой тайны:
- участвовали 3 загрузочных физических компакт-диска: Linux Mint v.19.3, Astra Linux SE v.1.4, Acronis True Image v.2021 build 39287;
- участвовали 4 программы чтения-записи ISO: X-CD-Roast v.1.19 (Linux), genisoimage в составе Astra Linux SE v.1.4 и параметрами «-l -J -R -o /hards/documents/acr.iso /media/cdrom/», UltraISO v.9.7.3.3629 (Windows), CDBurnerXP v.4.5.6.6059 (Windows);
- контрольная сумма считалась в MD5 Total Commander v.8.0B14;
- работа программ контролировалась сторонними наблюдателями: проверка MD5 именно компакт-диска CdShot v.3.5.0.1 (похоже, единственная в своем роде), проверка MD5 ISO-файлов HashTab v.5.2.0.14.

Получены результаты:
- genisoimage по всем 3 дискам имеет неправильные контрольные суммы. В дальнейшем выяснится, что диски перестают быть загрузочными - кажется, это просто ISO с файлами. Эта контрольная сумма отличается от ISO с просто файлами без загрузочной записи - данная программа опасна, т.к. дописывает лишнюю информацию;
- оставшиеся 3 программы имели одинаковые контрольные суммы по 2 дискам из 3.

Отличившийся Acronis True Image v.2021 build 39287:
- считанный UltraISO - контрольная сумма 2ace14170d93332865b903322ccfff4e. Считанный CDBurnerXP - 599e486ca95133a12c41af9808802b7a. Эти 2 ISO - исходные для тестов следующего абзаца;
- был проведен тест со всеми возможными комбинациями участия этих двух программ чтения-записи ISO и их настроек (например: "снятый CDBurner - записан CDBurner снова с опцией такой-то и снят UltraISO без опции сякой-то". Получен результат: UltraISO с использованием ISO-фильтра считывает 2ace14170d93332865b903322ccfff4e, без него - 599e486ca95133a12c41af9808802b7a (как у CDBurner);
- чтобы понять, какая из контрольный сумм истинна, подключаются X-CD-Roast, HashTab, CdShot - они показывают 2ace14170d93332865b903322ccfff4e. Также был отрыт великий исходный ISO, с которого был записан исходный компакт-диск - тоже 2ace14170d93332865b903322ccfff4e;
- получается, X-CD-Roast имеет неотключаемую опцию ISO-фильтра при чтении дисков. CDBurnerXP такой опции не имеет - и при чтении ISO нарушает его контрольную сумму. UltraISO, зачем-то, имеет ISO-фильтр именно как опцию.

Эксперимент с углублением записи на 1 уровень: записать испорченный ISO с помощью CDBurner - и считать:
- при чтении CDBurner и UltraISO без фильтра - 3486ab5fb313702c09fe359eb140a9e5 - третья контрольная сумма, тоже неправильная;
- если размер ISO при первом чтении отличался на 4КБ меньше от оригинала, то теперь отличие на 8КБ больше от первого чтения;
- при чтении UltraISO с фильтром произошло то же самое чудо, не описанное в абзаце выше: UltraISO восстановила контрольную сумму до 2ace14170d93332865b903322ccfff4e (соответственно, с точностью до байта равен по размеру великому исходному ISO);
- то есть, точно проблема именно с загрузочной записью. Дополнительное подтверждение: контрольная сумма ISO просто с файлами, если их вытащить со всех 3 ISO, - всегда одинакова. Это же подтверждает успешные запуск и работа всех 3 носителей в виртуальной машине.

Эксперимент с чтением-записью на разные носители: ошибка воспроизводится только на CD-R и CD-RW, идентично. Именно поэтому 2 других носителя, DVD инсталляторов ОС, - ошибок при чтении-записи вообще не имели.

Выводы:
- CDBurnerXP плохо читает загрузочные диски, записанные на CD: изменение размера загрузочной записи без нарушения ее работоспособности - что приводит к искажению контрольной суммы носителя. Возможно, это говорит о стандартизации на предприятии: IT-отдел обязан оттестировать ПО чтения-записи ISO - и использовать только одно ПО и его версию, например, при сдаче ISO-файла или компакт-диска в архив;
- опция ISO-фильтра, если существует в каких-либо других программах создания ISO, - обязательна к включению, т.к. проводит коррекцию загрузочной записи носителя, если в ней есть ошибки;
- программы чтения контрольных сумм с ISO-файла и с компакт-диска показывают идентичные результаты - этапы открытия диска и его финализации в формировании контрольной суммы не участвуют;
- опции игнорирования ошибок чтения, аппаратной коррекции, выбора «disk at once»/«track at once» и прочие - не влияют на контрольную сумму.

(добавлено 03.10.2023) Уточнения, полученные в рамках анализа несовместимости Astra Linux SE v.1.7.4 с дисками от машбюро:
- контрольные суммы финализированного и не финализированного диска - одинаковые;
- контрольные суммы диска UltraISO v.9.6.3016 и диска, записанного встроенной программой записи Windows 7 v.6.1 (сборка 7601 SP1) - разные (запись велась на одинаковые носители). Причина: в промежутке между записями дисков системе приспичило создать в фоновом режиме лишнюю пустую папку;
- контрольные суммы дисков разных типов, записанных встроенной программой записи Windows 7 v.6.1 (сборка 7601 SP1) - одинаковые (проверено на CD-RW и DVD-R) - но только если сравнивать пофайлово;
- встроенная программа пишет на максимальной скорости. Часть болванок запарывается, хотя "успешное" закрытие сеанса при извлечения носителя пытается убедить в обратном.

(добавлено 07.10.2023) Быстро исправил ошибку в предыдущем добавлении. Алгоритм контрольных сумм проверял контрольные суммы самих файлов в Astra Linux SE v.1.7.4 - это породило ложноположительный результат. Когда же начал проверять контрольные суммы с помощью md5sum - выяснилось, что есть проблема с CD-RW, на котором записаны вразнобой порядка 2500 файлов и 220 папок: при записи стандартными средствами Windows 7 - контрольные суммы в Total Commander и md5sum отличаются.

Пришлось создавать тестовый стенд заново:
- в Windows 7 был создан текстовый файл "1.txt" с текстом "Лёша - нубас." в кодировке Windows-1251 и весом 13Б;
- в наличии есть только DVD-R и использованные CD-RW. CD-RW очищались в PowerISO полным стиранием на скорости 4x (полного стирания в UltraISO нет);
- при использовании встроенной функции записи Windows 7 был задействован режим "внешний накопитель USB" без метки. После записи программно извлекался командой "извлечь", давая ОС "финализировать" диск;
- запись в UltraISO производилась в режиме DAO, без метки;
- после записи с помошью UltraISO снимались образы ISO (опция фильтра не влияет на конечный результат). Размеры ISO: DVD-UltraISO - 360448Б, DVD-Windows - 133660672Б, CD-UltraISO - 360448Б, CD-Windows - 604110848Б. Уже видно, что размеры абсолютно все разные - и контрольные суммы MD5 в Total Commander будут разными. Большой размер CD-RW связан с его полной очисткой - можно отнести это к очередному глюку встроенной функции записи Windows 7. Большой размер DVD-R после встроенной записи необъясним. Идентичность размеров DVD и CD UltraISO обусловлено корректной финализацией дисков;
- MD5 в TC: DVD-UltraISO - 676a2494531f8b254f957d07e0ec7bcc, DVD-Windows - 8319e9f2bd71c11849fea4a84d5e6297, CD-UltraISO - 6c3826f8a32edf0f55c9e6abb1e02114, CD-Windows - 553bface973b56e505040fa9ae5565b3. Стоит обратить внимание, что контрольные суммы DVD-UltraISO и CD-UltraISO разные, - потому что UltraISO при записи все-таки впихнула свою собственную метку: дату и время создания проекта. "Видишь суслика? - Не вижу. - А он есть...";
- MD5 по мнению md5sum /dev/sr0 без монтирования в Astra Linux SE v.1.7.4: DVD-UltraISO - 676a2494531f8b254f957d07e0ec7bcc, DVD-Windows - 8319e9f2bd71c11849fea4a84d5e6297, CD-UltraISO - 6c3826f8a32edf0f55c9e6abb1e02114, CD-Windows - 525262c0ab272fbaa5ad048e0c8019a2;
- MD5 по мнению md5sum /media/cdrom/* с монтированием в Astra Linux SE v.1.7.4: DVD-UltraISO - 7a3ef8c64aa9ec8ab2969181e2c15789, DVD-Windows - 7a3ef8c64aa9ec8ab2969181e2c15789, CD-UltraISO - 7a3ef8c64aa9ec8ab2969181e2c15789, CD-Windows - 7a3ef8c64aa9ec8ab2969181e2c15789. Понятное дело: считается по идентичным данным во всех 4 дисках.

Выводы:
- в очередной раз доказывается, что встроенные функции в Windows - отстой. Дефрагментатор, записыватель носителей, проверяльщик ошибок на диске и его поверхности и т.д. - все должно быть внешним;
- во избежание недоразумений, нельзя использовать md5sum для CD-RW, записываемых средствами Windows. При этом CD-R не проверялись (т.к. их нет) - возможно, там точно такой же баг.

(добавлено 20.10.2023) С CD-R - такая же шляпа, как и с CD-RW: md5sum дает разные результаты. Образы ISO отличаются; информация затерлась - но судя по записям здесь: сделанный в UltraISO размер ISO-файла - корректный с точностью до байта, сделанный в Windows - имел размер около 800КБ.
Обновлено ( 20.10.2023 16:54 )