У меня есть проблема в том, что иногда, когда я записываю 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
. Я еще не мог проверить это, но это звучит как наиболее правдоподобное объяснение на сегодняшний день.
Действительно, это, вероятно, отступы. Проверьте размеры файлов, 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
попадает в конец устройства. Не о чем беспокоиться.
Эта проблема может быть связана с использованием вами dd. Попытайтесь добавить conv=direct
, когда вы используете dd для чтения диска, т.е. (Обычно блочный уровень считывает фрагменты размером 4 КБ, даже если вызывающая программа запрашивает меньше. Возможно, это было причиной ошибки в половине случаев для дисков с нечетным числом секторов ???)