Восстановление после оптических сред, игнорирующих ошибки чтения

У вас есть две опции:

  1. Во всех конструкторах класса добавьте экземпляр в контейнер в статическом хранилище.

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

В вашем посте упоминается попытка 1. безуспешно. Подход оправдан - вы допустили ошибку, , но вашего описания недостаточно, чтобы мы могли сказать, что это за ошибка. Учитывая новую информацию, кажется, что вы не смогли определить статический вектор.


Возникает вопрос, как бороться с уничтожением объекта. Предположительно объект должен быть удален из контейнера. Это один из немногих случаев, когда связанный список может быть решением. Если вы сохраните итератор в элементе списка внутри самого объекта, то этот объект может удалить себя из списка после уничтожения.

6
задан tzot 1 October 2008 в 11:28
поделиться

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.
6
ответ дан 8 December 2019 в 18:43
поделиться

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

1
ответ дан 8 December 2019 в 18:43
поделиться

Лучший доступный инструмент является 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 Вашего спасаемого устройства.

Я использовал его много сам, и очень, очень realiable.

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

5
ответ дан 8 December 2019 в 18:43
поделиться

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

Править

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

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

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

1
ответ дан 8 December 2019 в 18:43
поделиться

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

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

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

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


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

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

Это позволит, Вы для установки целого убили параметров, включая повторения. Следует иметь в виду, что сам дисковод для компакт-дисков определяет, сколько раз повторить, и я не уверен, что это устанавливаемо с помощью программного обеспечения для многих (большинство?) Дисководы для компакт-дисков.

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

- Adam

1
ответ дан 8 December 2019 в 18:43
поделиться

Смотрите на интерфейс ASPI. Доступный на обоих окнах и Linux.

0
ответ дан 8 December 2019 в 18:43
поделиться

dd (1) является Вашим другом.

dd, если =/dev/cdrom of=image bs=2352 conv=noerror, notrunc

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

-1
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: