Восстановление с оптического носителя без учета ошибок чтения

У меня есть резервные копии файлов, заархивированных на оптических носителях (CD и DVD). Все они имеют файлы восстановления par2, которые хранятся на отдельном носителе. Даже в тех случаях, когда нет файлов par2, незначительные ошибки при чтении на одном оптическом диске могут быть хорошо прочитаны на другом диске.

Дело в том, что при чтении неисправных носителей время чтения очень и очень велико, потому что устройства имеют тенденцию повторять попытки несколько раз.

Вопрос в том, как я могу контролировать количество повторных попыток (т. Е. Установить отсутствие повторных попыток или только одну попытку)? Какой-то системный вызов? Библиотека, которую я могу скачать? Должен ли я работать на уровне SCSI?

Вопрос в основном о Linux, но любые указатели Win32 также будут приветствоваться.

7 ответов

Решение

man readom, программа, которая поставляется с cdrecord:

   -noerror
          Do not abort if the high level error checking in readom found an
          uncorrectable error in the data stream.

   -nocorr
          Switch  the  drive  into  a mode where it ignores read errors in
          data sectors that are a result of uncorrectable  ECC/EDC  errors
          before reading.  If readom completes, the error recovery mode of
          the drive is switched back to the remembered old mode.
   ...

   retries=#
          Set the retry count for high level retries in readom to #.   The
          default  is  to do 128 retries which may be too much if you like
          to read a CD with many unreadable sectors.

Лучший доступный инструмент - это dd_rhelp. Просто

dd_rhelp /dev/cdrecorder /home/myself/DVD.img

, возьмите чашку чая и посмотрите красивую графику.

Информация о пакете rd dd_rhelp:

dd_rhelp использует ddrescue на всем вашем диске и пытается собрать максимально допустимые данные, прежде чем пытаться целую вечность работать на плохих секторах. Если вы оставляете работу dd_rhelp на бесконечное время, это будет иметь эффект, аналогичный простому dd_rescue. Но поскольку у вас может не быть этого бесконечного времени, dd_rhelp перепрыгивает через поврежденные сектора и восстанавливает действительные данные. В конце концов, он анализирует все ваше устройство с помощью dd_rescue.

Вы можете нажать Ctrl-C, когда захотите, и запустить его по желанию, dd_rhelp возобновляет работу, поскольку это зависит от файлов журнала, создаваемых dd_rescue. Кроме того, прогресс отображается на ASCII-изображении спасаемого вашего устройства.

Я сам много этим пользовался и очень, очень реально.

Вы можете установить его из DAG в дистрибутивы Red Hat.

Поскольку было предложено dd, я должен отметить, что я знаю о существовании и использовал sg_dd, но мой вопрос был не о командах (1) или (1m), а о системных вызовах (2) или библиотеках (3).

РЕДАКТИРОВАТЬ

Другая полезная утилита командной строки linux sdparm, Кажется, следующий флаг отключает аппаратные повторные попытки:

sudo sdparm --set=RRC=0 /dev/sr0

где /dev/sr0 это устройство для оптического привода в моем случае.

Проверяя, hdparm Можно изменить количество повторных попыток (не кажется таковым), я подумал, что в зависимости от типа ошибки снижение скорости чтения компакт-диска может потенциально уменьшить количество ошибок чтения, что может фактически увеличить среднюю скорость чтения. Однако, если некоторые сектора совершенно нечитаемы, даже снижение скорости CD-ROM не поможет.

Поскольку вы спрашиваете о доступе на уровне драйвера, вам следует изучить команды SCSI или, возможно, API-интерфейс, подобный ASPI. В программном обеспечении Windows VSO (разработчики слепого / слепого написания ниже) разработан гораздо лучший API, Patin-Couffin, который обеспечивает заблокированный низкоуровневый доступ:

http://en.wikipedia.org/wiki/Patin-Couffin

Это может начать вас. Однако, в конце концов, диск взаимодействует с командами SCSI, даже если это фактически USB, SATA, ATA, IDE или другие. Вы также можете посмотреть термины, относящиеся к ATAPI, которая была одной из первых спецификаций для этого интерфейса уровня SCSI CD-ROM.

Я был бы удивлен, если бы вы не смогли найти подходящую библиотеку linux или пример работы с командами более низкого уровня, используя приведенные выше термины и понятия поиска.


Старый ответ:

Blindread / blindwrite был разработан в период расцвета схем защиты CD-ROM, часто с использованием намеренно поврежденных секторов или информации об ошибках для проверки оригинального CD.

Это позволит вам установить целый ряд параметров, включая повторные попытки. Имейте в виду, что сам привод CD-ROM определяет, сколько раз следует повторить попытку, и я не уверен, что это можно установить с помощью программного обеспечения для многих (большинства?) Приводов CD-ROM.

Вы можете скопировать диск в формат ISO, игнорируя ошибки, а затем использовать утилиты ISO для чтения данных.

-Адам

Посмотрите на интерфейс ASPI. Доступно как на Windows, так и на Linux.

Дд (1) твой друг.

dd if = / dev / cdrom of = image bs = 2352 conv = noerror, notrunc

Диск все еще может повторить попытку, но я не думаю, что вы поправитесь без изменения прошивки.

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