Восстановление с оптического носителя без учета ошибок чтения - PullRequest
5 голосов
/ 29 сентября 2008

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

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

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

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

Ответы [ 7 ]

6 голосов
/ 16 февраля 2009

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.
4 голосов
/ 17 февраля 2009

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

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

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

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

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

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

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

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

1 голос
/ 12 февраля 2009

Поскольку вы спрашиваете о доступе на уровне драйвера, вам следует изучить команды 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 для чтения данных.

-Adam

1 голос
/ 29 сентября 2008

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

EDIT

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

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

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

1 голос
/ 29 сентября 2008

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

0 голосов
/ 16 февраля 2009

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

0 голосов
/ 29 сентября 2008

дд (1) ваш друг.

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

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

...