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