Записанный CD-R не идентичен исходному ISO-образу.

У меня есть проблема в том, что иногда, когда я записываю ISO-образ на CD-R с помощью:

sudo wodim -v driveropts=burnfree -data dev=/dev/scd0 input.iso

, а затем снова зачитываю его с помощью:

sudo dd if=/dev/cdrom of=output.iso
dd: reading `/dev/cdrom': Input/output error
...

Я получаю два изо-изображения, которые не идентичны, а именно output.iso пропускает 2048 байт в конце. Однако, когда я монтирую ISO-образ или CD-R и сравниваю фактические файлы в точке монтирования, оба они идентичны.

Это ожидаемое поведение или это действительно неправильная запись данных? И если он ожидается, как я могу проверить, что процесс записи был успешным?

Причина, по которой я спрашиваю, в первую очередь, заключается в том, что это похоже на воспроизводимое поведение, некоторые изо-образы выходят 2048 байт, даже при повторных ожогах, но все сожженные CD-R под собой идентичны.

Кроме того, что является причиной:

dd: reading `/dev/cdrom': Input/output error

Как это всегда происходит, я предполагаю, что это нормально, но какова техническая причина этого? Я предполагаю, что компакт-диски не позволяют устройству определять размер напрямую, поэтому dd читает, пока не достигнет конца трудным путем.

Редактировать: Пользователь karol на superusers.com упомянул, что проблема размера и ошибка чтения являются результатом использования -tao (по умолчанию) в wodim вместо режима -dao. Я еще не мог проверить это, но это звучит как наиболее правдоподобное объяснение на сегодняшний день.

5
задан 26 December 2013 в 21:38

2 ответа

Действительно, это, вероятно, отступы. Проверьте размеры файлов, output.iso немного больше?

Посмотрите на самый конец output.iso:

dd if=output.iso bs=1 seek=658562000 count=1071 | hexdump -C

Я угадал нули?

Вы можно попробовать запустить ls -l input.iso, чтобы получить его точный размер, затем:

dd if=output.iso bs=1 count=<INPUT.ISO SIZE> | md5sum

Обратите внимание, что это будет довольно медленно, так как вы читаете один байт за раз. Если размер делится на целое число равномерно, замените это целое число на 1 в bs=1 и разделите count на это число. Даже 2 байта за раз будут намного быстрее!

Что касается вашего второго вопроса, ошибка ввода / вывода возникает, когда dd попадает в конец устройства. Не о чем беспокоиться.

0
ответ дан 26 December 2013 в 21:38

Эта проблема может быть связана с использованием вами dd. Попытайтесь добавить conv=direct, когда вы используете dd для чтения диска, т.е. (Обычно блочный уровень считывает фрагменты размером 4 КБ, даже если вызывающая программа запрашивает меньше. Возможно, это было причиной ошибки в половине случаев для дисков с нечетным числом секторов ???)

0
ответ дан 26 December 2013 в 21:38

Другие вопросы по тегам:

Похожие вопросы: