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

StackOverflow https://stackoverflow.com/questions/149092

Вопрос

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

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

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

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

Это было полезно?

Решение

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

, выпейте чашечку чая и понаблюдайте за приятной графикой.

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

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

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

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

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

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

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

Редактировать

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

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

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

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

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

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

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


Более старый ответ:

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

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

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

-Адам

Взгляните на АСПИ интерфейс.Доступно как в Windows, так и в Linux.

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

dd if=/dev/cdrom of=изображение bs=2352 conv= нет ошибок, не выполняется

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top