загадочная ошибка (программистское)
Jul. 1st, 2004 09:15 pmЯ записывал на болванку три больших файла (.avi). Вместе они занимают почти целый CD.
Обычно я это делаю (в Линуксе) так: сначала с помощью программы mkisofs создаю образ файловой системы iso9660, включающей нужные файлы, а потом с помощью программы cdrdao пишу этот образ на диск, в режиме DAO (Disk-At-Once). На этот раз я решил вместо cdrdao попробовать воспользоваться cdrecord, более универсальной программой для записи дисков. В принципе она использует, насколько я понимаю, ту же библиотеку нижнего уровня, что и cdrdao, но умеет также записывать диски в более ортодоксальном режиме TAO (Track-At-Once), а также мультсессионные диски итп.
Короче, я разобрался с опциями и запустил cdrecord в режиме TAO. Диск записался. Я решил проверить запись, и запустил расчёт контрольной суммы по файлам, читая их прямо с CD (запустив программу md5sum прямо в директории CD). К моему удивлению, все три контрольные суммы оказались неправильными - они не совпадали с контрольными суммами оригинальных файлов, которые я ещё не удалил. Тогда я запустил побайтовое сравнение. И что же я обнаружил! Каждый из записанных файлов отличается от оригинала в одном байте (в разных местах в каждом файле). И в каждом из этих байтов различие в значении было ровно 10 — в записанном файле на 10 больше, чем в первоначальном. Но при этом сами значения байтов были разные, и настолько, что биты всякий раз менялись другие!
Очень любопытный баг (или дефект). Пожалуй, я потрачу ещё несколько болванок на попытки его повторить и исследовать...
Обычно я это делаю (в Линуксе) так: сначала с помощью программы mkisofs создаю образ файловой системы iso9660, включающей нужные файлы, а потом с помощью программы cdrdao пишу этот образ на диск, в режиме DAO (Disk-At-Once). На этот раз я решил вместо cdrdao попробовать воспользоваться cdrecord, более универсальной программой для записи дисков. В принципе она использует, насколько я понимаю, ту же библиотеку нижнего уровня, что и cdrdao, но умеет также записывать диски в более ортодоксальном режиме TAO (Track-At-Once), а также мультсессионные диски итп.
Короче, я разобрался с опциями и запустил cdrecord в режиме TAO. Диск записался. Я решил проверить запись, и запустил расчёт контрольной суммы по файлам, читая их прямо с CD (запустив программу md5sum прямо в директории CD). К моему удивлению, все три контрольные суммы оказались неправильными - они не совпадали с контрольными суммами оригинальных файлов, которые я ещё не удалил. Тогда я запустил побайтовое сравнение. И что же я обнаружил! Каждый из записанных файлов отличается от оригинала в одном байте (в разных местах в каждом файле). И в каждом из этих байтов различие в значении было ровно 10 — в записанном файле на 10 больше, чем в первоначальном. Но при этом сами значения байтов были разные, и настолько, что биты всякий раз менялись другие!
Очень любопытный баг (или дефект). Пожалуй, я потрачу ещё несколько болванок на попытки его повторить и исследовать...