Восстановление с оптического носителя без учета ошибок чтения
У меня есть резервные копии файлов, заархивированных на оптических носителях (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
Диск все еще может повторить попытку, но я не думаю, что вы поправитесь без изменения прошивки.