У нас был диск в рейде, который вышел из строя, и мы подозреваем, что на другом могут быть небольшие ошибки. Поэтому на всякий случай мы пытаемся восстановить оба диска с помощью ddrescue. На различных страницах справки рекомендуется копирование за два-три прохода, сначала выполняя проход без разделения, а затем возвращаясь к ошибочным секторам. например
ddrescue --no-split --force /dev/sdc /dev/sdb logfile
ddrescue --direct --max-retries=3 /dev/sdc /dev/sdb logfile
затем снова запустить второй с --retrim
добавлено, если ошибки остались.
Проблема в том, что я вижу, что начальный проход иногда замедляется, поэтому я проверил журнал dmesg и вижу те же типы ошибок ввода-вывода (Medium Error tag#25 Sens: Unrecovered read error
) отображается в системном журнале, но ddrescue не регистрирует никаких ошибок в своем статусе.
Хорошо, теперь ddrescue показывает 2 ошибки, но я показываю более 2 в системном журнале, и ни одна из них не отображалась в ddrescue, когда я увидел первые несколько ошибок, появившихся в системном журнале.
Что мне нужно знать, так это то, что синтаксис второй команды выше проверяет только те сектора, которые ddrescue зарегистрированы как плохие, и если я должен попытаться повторно запустить первую команду с некоторыми другими флагами, такими как --direct
на этом перевале тоже. (Мне интересно, может ли что-то в прошивке привода мешает ddrescue видеть все ошибки)
ЮЗ
После запуска ретримма я слежу за ним, так как количество ошибок в проходах повторного чтения снизилось до 285. Теперь оно составляет 291. Я думал, что идея последних проходов заключалась в том, чтобы специально восстанавливать ошибочные сектора, и не ожидал, что это число будет делать что угодно, только не спускаться. Что мне здесь не хватает?
Счетчик ошибок показывает количество нечитаемых блоков (диапазоны последовательных нечитаемых секторов на языке ddrescue). Если у вас есть 3 нечитаемых сектора подряд и вы восстанавливаете средний сектор при повторном проходе, это увеличивает счетчик на единицу. Само ядро будет повторять попытку несколько раз, если диск не отвечает в течение 60 секунд (?), И выводит несколько строк с ошибкой, пока не откажется от сектора. Хотя он печатает номер сектора только один раз, AFAICT.
Для вывода количества неисправных секторов ddrescuelog -l- <mapfile> | wc -l
. Он напечатает список (-l
) всех нечитаемых (-
) секторов. (Для дисков с размером сектора> 512 байт вам может потребоваться указать размер сектора вручную.)
Насколько я понимаю, --direct по умолчанию отключен, потому что не все системы поддерживают его, а чтение из кеша часто выполняется быстрее. Последнее является причиной разделения на две команды, где первая должна получить 99,9% восстанавливаемых данных как можно быстрее. Если любой из режимов быстрее вашей скорости записи, вы можете объединить два вызова AFAICT.