Рассчитать md5sum CD / DVD

18

У меня есть файл ISO, который я записал на CD. Теперь, как я могу проверить, правильно ли создан CD? Мне нужна команда, которая вычисляет хеш-сумму, которую я могу использовать для проверки с хеш-суммой, которую я вычисляю в файле ISO. В идеале команда должна:

  • Работать независимо от файла ISO: то есть я не хочу хранить список хэш-сумм для каждого файла на диске или запоминать количество блоков
  • Будьте относительно коротки: однострочная команда хороша, цепочка команд длиной в две строки - это нормально, сценарий, занимающий одну страницу, - нет
  • Быть достаточно эффективным: например, ddдиск обратно в файл и запуск md5sumпо файлу недопустим

Если нет ответа, который не может удовлетворить всех, я буду признателен и за ближайший матч. Еще лучше, если вы скажете мне, почему это не так просто.

phunehehe
источник

Ответы:

18

Основная проблема заключается в том, что мы хотим взять md5sum точно такой же информации, которая изначально была в ISO. Когда вы записываете ISO на CD, на конце диска, вероятно, есть свободное место, что неизбежно меняет сумму md5. Таким образом, самый короткий путь:

md5sum /dev/cdrom

не работает . Что работает (и это часто встречается в онлайн- документации) - это только чтение точного количества байтов с устройства и последующее выполнение md5sum. Если вы знаете количество байтов, вы можете сделать что-то вроде:

dd if=/dev/cdrom bs=1 count=xxxxxxxx | md5sum

где 'xxxxx' - это размер iso в байтах.

Если вы не знаете количество байтов, но на вашем диске все еще есть iso, вы можете получить их, используя ls, выполнив что-то вроде следующего ( взято отсюда ):

dd if=/dev/cdrom | head -c `stat --format=%s file.iso` | md5sum

Есть много других однострочных конструкций, которые должны работать. Обратите внимание, что в каждом случае мы используем ddчтение байтов с диска, но мы не передаем их в файл, а сразу передаем их в md5sum.

Возможные улучшения скорости можно сделать, выполнив некоторые вычисления, чтобы использовать больший размер блока ( bs=в ddкоманде).

Стивен Д
источник
Вы можете упростить dd if=/dev/cdrom |до </dev/cdrom. В этом нет ничего магического ddи блокирующего устройства, это просто команда управления потоком со смешным синтаксисом.
Жиль "ТАК - перестань быть злым"
Кстати, у вас (phunehehe) должен быть размер iso вместе с контрольной суммой MD5. Это особенно важно для MD5, который частично сломан, но это хорошая идея как для безопасности, так и для удобства использования, независимо от того, какую контрольную сумму вы используете.
Жиль "ТАК - прекрати быть злым"
@Gilles: на самом деле, использование ddс bsразмером кэша устройства может ускорить передачу данных, в отличие от простого перенаправления ввода.
Алекс
@ Жиль: что вы подразумеваете под "MD5, который частично сломан"? И почему я должен сохранять размер файла, когда, если что-то не так, контрольная сумма должна сообщить мне сразу?
phunehehe
@phunehehe: Есть известные криптографические недостатки с MD5 (неизвестно (публично), как генерировать коллизию для данного файла, но это может произойти). Знание размера файла дает вам немного больше уверенности (хотя и не намного). Это также дает вам немедленную обратную связь для распространенных случайных ошибок, таких как усеченные загрузки.
Жиль "ТАК - перестань быть злым"
2

Для этой задачи есть программа. Это называется - checkisomd5. В Ubuntu его можно установить командой:

sudo apt-get установить isomd5sum
Денис Проскурин
источник
Как вы используете его? checkisomd5 /dev/sr0дает мне: проверка носителя завершена, результат: нет. Информация о контрольной сумме недоступна, невозможно проверить носитель.
Торстен
Контрольная сумма должна быть встроена в ISO-образ с помощью инструмента "implantisomd5". Это нужно сделать до того, как iso будет записан на диск. Утилита включена в "checkisomd5".
Денис Проскурин
1

Если размер изображения на диске делится на 2048, на целое число, которое кажется очень распространенным, то вы можете получить точную сумму MD5 следующим образом, где sr0находится название оптического устройства, которое можно найти с помощью, lshw -C diskи где 'count' - это делимое размера изображения, деленное на 2048.

dd if=/dev/sr0 bs=2048 count=356352 |md5sum
wsmart
источник
Многие компакт-диски, вероятно, используют дорожки «Mode 1», которые имеют 2048 байт пользовательских данных на сектор . («Режим 2» хранит 2336 байтов пользовательских данных на сектор, но ему не хватает более продвинутых возможностей обнаружения и исправления ошибок, предлагаемых режимом 1, в результате чего режим 2 будет менее полезен для данных, где ошибки не могут быть допущены.)
CVN