3

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

Вот некоторые вещи, которые я уже пробовал:

  • Используйте различное программное обеспечение для обработки изображений / копирования, включая ddrescue, imgburn и winhex. CD читается как диск с данными, и поврежденные сектора не возвращаются приводом.
  • Читать CD в режиме необработанного доступа.

Некоторые идеи (пожалуйста, напишите, если вы знаете, что любой из них будет / не будет работать):

  • Выполните низкоуровневую команду ATA, чтобы отключить CRC / принудительный привод в режиме аудио CD?
  • Кастомная прошивка?
  • Вставить аудио компакт-диск, а затем заменить нужный диск с данными, не открывая лоток?

Любые другие идеи приветствуются, независимо от того, как безумно :)

3 ответа3

1

У меня нет текущей спецификации, но в более старом документе ATA не упоминается возможность получения нечитаемых секторов.

Обратите внимание, что ваш опыт неспособности безоговорочно получить данные с диска опровергает широко распространенное заблуждение о том, что данные с диска передаются непосредственно из считывающей головки в интерфейс привода и на хост-ПК. Если бы это неправильное представление было действительно верным, то в буфере памяти ПК были бы "необработанные" данные, прежде чем можно было бы применить какое-либо обнаружение и исправление ошибок.

Это заблуждение часто используется, чтобы "доказать", что "медленная" скорость передачи данных в считывающей головке замедлит скорость передачи данных на шине SATA, а затем ошибочно придет к выводу, что высокие скорости передачи данных SATA имеют небольшое преимущество (если данные сектора не поступают из кеш диска).

Однако данные сектора всегда читаются из заголовка в секторный буфер.
После считывания всего сектора данные сектора проверяются.
Только если данные сектора будут считаться "хорошими" (или корректируемыми), начнется передача на хост ПК.
Обнаружение неисправимой ошибки чтения приведет к повторной попытке, если команда это позволяет.
В противном случае хост-компьютер получит команду прервать статус.

Обратите внимание, что "нечитаемый сектор" также включает ситуацию, когда контроллер не может "найти" сектор (фактически его запись ID).

1

Я думал, что должен вернуться и ответить на это сам, теперь, когда у меня есть опыт в этой теме. Две идеи, о которых я подумал в своем первоначальном вопросе, на самом деле работают!

Выполните низкоуровневую команду ATA, чтобы отключить CRC / принудительный привод в режиме аудио CD?

Это действительно возможно на некоторых дисках (это поддерживается одним из двух протестированных мной дисков). Вам нужна возможность отправлять общие пакеты на диск. Это можно сделать в (возможно) любом дистрибутиве Linux с помощью вызова CDROM_SEND_PACKET ioctl. Сначала необходимо выполнить команду MODE_SENSE_10 на приводе с кодом страницы 1 (восстановление при чтении и записи). Используя управляющее значение страницы 0 (текущие значения), вы сможете увидеть поведение привода для поврежденных секторов, а с помощью управляющего значения страницы 1 (изменяемые значения) увидеть, какие из них можно изменить. Если ваш накопитель поддерживает изменение настроек TB (блока передачи) на этой странице, вы должны установить TB на 1 и отправить измененные настройки на накопитель с помощью команды MODE_SELECT_10. Et вуаля - теперь вы получаете сектор обратно с диска, даже если были ошибки EDC/ECC/CIRC! Самое приятное то, что привод выполняет дескремблирование сектора и любую возможную коррекцию ошибок перед отправкой вам сектора. (Не проверено: есть также настройка DCR, которая, вероятно, полностью отключает попытки исправления ошибок.)

Если вам это интересно, возьмите linux livecd и Mt. Спецификация Fuji! Информация выше может быть найдена на странице 752 Mt. Fuji spec v.9 редакция 1.00.

Бонус: теперь, когда вы можете отправлять универсальные пакеты на ваш диск, вы должны использовать команду READ CD (0xBE), чтобы получить исходные секторы самостоятельно. Затем вы можете самостоятельно проверить все заголовки, данные EDC/ECC и даже данные подканалов, если вам это нравится. Когда диск дает вам поврежденный сектор, вы можете использовать данные EDC/ECC, чтобы проверить, насколько поврежден ваш сектор, и, когда вы перечитываете его, решить, какую из двух попыток сохранить.

Вставить аудио компакт-диск, а затем заменить нужный диск с данными, не открывая лоток?

Верьте или нет, это на самом деле работает! (по крайней мере, на очень старом диске cdrom, который я использовал для тестирования). Вы можете буквально получить проигрыватель аудио CD для «воспроизведения» ваших данных, их записи, и после исправления любого смещения сектора (путем поиска заголовков синхронизации секторов данных) и дескремблирования данных (посмотрите в таблицу поиска скремблирования ECMA 130), вы получить ваши необработанные данные, без каких-либо исправлений ошибок. Я почти уверен, что мой первый метод, приведенный выше, устарел, но время покажет - я все еще только начинаю с фактического восстановления данных.

В настоящее время я занимаюсь разработкой программного обеспечения для автоматизации всего, что я только что написал, и для идеального (то есть, включая заголовки управления и данных подканала) архивирования старых, поврежденных компакт-дисков. Если кто-то заинтересован в этой работе, пожалуйста, дайте мне знать. Кроме того, пожалуйста, дайте мне знать, если такое программное обеспечение уже существует - AFAIK это не так.

0

ddrescue - это инструмент для восстановления данных. Он копирует данные из одного файла или блочного устройства (жесткий диск, компакт-диск и т.д.) В другой, изо всех сил пытаясь спасти данные в случае ошибок чтения.

AFAIK это только для Linux

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .