Я пытаюсь восстановить данные со старого жесткого диска 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).