5

Я пытаюсь восстановить данные со старого жесткого диска 320G (с поврежденными секторами) на новый. Я обнаружил, что ddrescue - хороший инструмент для этой задачи благодаря своему умному алгоритму. Я уже сделал это один раз с помощью следующей команды:

ddrescue -f -n /dev/sda /dev/sdb log

Это было завершено за несколько часов с ошибкой 16G (не восстановленной), которая все еще может содержать важные данные, поэтому я выполнил следующий проход:

ddrescue -f -d /dev/sda /dev/sdb log

но он работает слишком медленно (в среднем 300B/s), потому что Linux зависает на каждом плохом секторе.
Это на самом деле ядро Linux (возможно, libata), а не сам жесткий диск, потому что я пытался восстановить в инструменте DMDE , работающем на чистой DOS, и не было такой проблемы: тайм-аут ATA может быть настроен там, и весь процесс восстановления выполняется НАМНОГО быстрее.
Но не в Linux.
Я также попробовал следующие параметры ядра: libata.ignore_hpa=1 libata.noacpi libata.force=noncq,norst а также libata.dma=0 передавая cmdline в bootlader, но это не имело никакого эффекта (я использую System Rescue CD, где LIBATA скомпилирован в ядро).
Также попытался изменить время ожидания устройства:

echo 1 > /sys/block/sda/device/timeout

(по умолчанию 30)
но это только генерирует больше ошибок в системном журнале и не помогает.
Прохождение плохих блоков все еще занимает 1-3 минуты для каждого сектора, который медленно увеличивается. Сколько времени нужно для разбора 16ГБ "плохих" блоков? Неделя? Месяц?
Я все еще предпочитаю ddrescue для восстановления (из-за его эффективного алгоритма и функциональности файла журнала) и хочу знать, как настроить драйвер ядра для ускорения обработки ошибок ata/disk. Google и связанные вопросы здесь на SU не помогли. Есть идеи?

PS извините за мой английский

@ ta.speot.is

Почему бы вам просто не восстановить из ваших обычных резервных копий?

Это жесткий диск моего друга, а не мой. Так грустно, у него нет резервных копий. Теперь, после сбоя диска, он начинает думать о создании резервных копий, да :)


UPD: 2,5 года спустя я до сих пор не знаю ответа, но только что понял, что ddrescue работает быстрее, когда контроллер sata находится в режиме совместимости (IDE), другой совет - всегда использовать опцию -d (прямой доступ), чтобы немного ускорить процесс. Также обратите внимание на параметры hdparm для настройки жесткого диска (-m , -D , -P), это может помочь (на старом оборудовании).


UPD2: Только что заметил ответ Слиззереда на связанный вопрос. Это великолепно! Я старался:

smartctl -l scterc,20,20 /dev/sda

и восстановление прошло намного быстрее, чем раньше (хотя только в режиме IDE).

3 ответа3

0

Может быть полезно настроить параметр --skip-size= на что-то большее. По умолчанию он равен крошечному, например, 64 кБ, тогда как полосы повреждения в современном накопителе могут быть намного больше.

Хотя вам все равно придется ждать тайм-аут каждый раз, их будет меньше.

0

От спасателя ГДР:

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

Итак, короткий ответ: с DDRescue вы не можете, потому что вы не можете изменить время ожидания ядра (вам нужно отредактировать правильный источник в нужном месте и перекомпилировать ... не просто!).

У меня были хорошие результаты при использовании некоторого программного обеспечения, содержащегося в загрузке Hiren:

  • DataResque DD (сделать изображение)
  • Roadkil's Unstoppable Copier (копирует файлы и регистрирует ошибки)

Оба запускаются в MiniXP, который также содержится в загрузке Hiren. Он запускается с CD/DVD или USB-накопителя.

Совет: жесткие диски могут очень сильно нагреваться, это плохо и хуже. Охладите с помощью вентилятора, это продлит их жизнь и может ускорить работу.

0

Это спустя несколько лет после того, как вопрос был опубликован, но это поможет кому-то еще. Я видел основную часть этого ответа где-то еще, и я не уверен, была ли доступна опция -c в более старом ddrescue. -c изменяет количество секторов для копирования одновременно.

вот оно:

ddrescue -d -r0 -e +0 -T 1s -n /dev/sdX recover.img recover.log -c 1 -O

замените X на диск, который вы пытаетесь восстановить. Данные будут храниться в файле с именем recover.img поэтому вам потребуется достаточно места.

Используйте программу 'watch' перед приведенным выше кодом для автоматического запуска кода в случае его сбоя из-за ошибки «слишком много плохих областей».

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