Более быстрое восстановление с диска с поврежденными секторами


13

Недавно я пытался перейти ddс нездорового жесткого диска в файл. Я использовал dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Моя проблема была в том, что я ddпотерял много времени, когда столкнулся с плохим блоком. В моем случае я бы с удовольствием заплатил с потерей некоторых данных для более быстрого результата.

Есть ли способ ускорить обработку ошибок? Может быть, настройка ядра (указание жесткому диску приложить меньше усилий для чтения блока)? Или другая программа?

Ответы:


29

Во-первых, для использования программного обеспечения: вы можете попробовать использовать ddrescueвместо dd.

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

Пример использования:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

С ddrescueинформационной страницы:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Вот несколько дополнительных источников для использования ddrescue:


редактировать

В случае , если жесткий диск сам по себе занимает слишком много времени, вы можете попытаться включить функцию под названием TLER ( T IME L imited E rror R ecovery) или КЦТЛИ ( C ommand C ompletion T IME L IMIT). Не все жесткие диски имеют его, но вы можете использовать его для ограничения времени на самом контроллере жесткого диска. Этот подход можно сочетать с использованием ddrecue, конечно.

В Linux есть инструмент под названием smartctlsmartmontoolsкомплекте).

Чтобы проверить текущую настройку («отключено» означает неограниченное время, которое вы не хотите):

# smartctl -l scterc /dev/sda

Чтобы установить его на фиксированное значение (5,0 секунд в этом примере. Установка на 0 отключает TLER):

# smartctl -l scterc,50,50 /dev/sda

Источник для TLER: http://en.wikipedia.org/wiki/TLER


2
Другой инструмент, на который стоит обратить внимание, - это dc3dd, который является судебно-медицинской версией dd
fpmurphy,

о хорошо, я не знал этот инструмент!
Slizzered

2
Я понятия не имел об этом TLER, но это действительно спасло мой день. На моем диске они были отключены, и каждый раз, когда я запускал ddrescue, мой диск блокировался через пару секунд. Выключение, включение и следующая попытка. Теперь я установил ее на 2 секунды с помощью команды, которую вы упомянули, и она больше никогда не блокируется, она пропускает некоторые сектора, но, по крайней мере, работает без перерывов.
Свен Рике

2

У меня были хорошие результаты с других нечитаемых дисков с этим программным обеспечением.

http://www.cgsecurity.org/wiki/TestDisk

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

http://www.cgsecurity.org/wiki/PhotoRec


2

Для быстрого и быстрого восстановления диска вы можете использовать файл сценария sh и запустить файл с помощью sh. Он содержит эту строку, просто повторите sudo ddrescueи еще sleep 3несколько раз. Спящий режим используется для остановки диска на несколько секунд:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Опции, использованные выше:

  • -r0 : без повторов
  • -e +0: выход при первой ошибке
  • -T 1s: выйти с ошибкой чтения в 1 секунду
  • -d : Прямой ввод / вывод
  • -n : нет царапин

Вы можете использовать -Rпосле окончания с опцией -Aодин раз, которая обратит и удалит все ошибки размера и начнется снова назад. Значит он будет читать ошибки по-разному.


0

Зависит от размера вашего жесткого диска и от количества плохих блоков. Обычно на резервное копирование у меня уходит 20 минут с использованием здорового HD на 1 тера. С плохими блоками я только что выздоровел этим утром, забрал меня дважды. У меня были проблемы с дублированием (резервное копирование диска) с около 30 поврежденных блоков. Первое, что я сделал, - это резервное копирование файлов с использованием обычного Filezilla для резервного копирования всех хороших данных. Я заметил, что один большой файл не копировался правильно (остановка посередине и перезапуск передачи). К счастью, у меня есть предыдущая резервная копия того же файла. Чтобы дублировать диск, я должен был найти поврежденные блоки на диске, используя следующую процедуру:

Сначала найдите проблемный диск, идентифицирующий информацию HD, используя fdisk -l

Во-вторых, если допустим, что ваш диск - / dev / sdb, то вам нужно выполнить команду badblocks -v / dev / sdb, она перечислит все ваши поврежденные блоки на диске. К счастью, будет несколько. Если плохие блоки не найдены, значит, с вашими дисководами все в порядке, и нужно что-то еще выяснить. Мой размер блока 512, поэтому я использую этот номер по умолчанию для запуска DD

3-й каждый блок имеет размер 512, поэтому я установил bs = 512

Каждый раз, когда я регулярно запускаю DD, как и всегда, мои данные после ошибок будут повреждены. Затем я использую параметры, описанные на странице https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html, в разделе «Для неисправных дисков».

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Это заняло некоторое время. Каждый сбойный блок звучит как стук в неисправном диске. Он копирует блок за блоком, и все мои плохие блоки производят одинаковый шум. Количество шумов было связано с тем, что он обнаружил еще один неисправный блок и сообщал об ошибке на дисплее. Что «ко = NoError, синхронизация» делает, это раздуть из плохо читает с NULs, в то время как «iflag = fullblock» идеально подходит для короткого замыкания читает, но хранит в синхронизации данных до конца. Никакого искажения, он просто не копирует неисправные блоки и заполняет его пустыми NUL.

После того, как копия с DD была сделана, я просто заменяю этот плохой файл, возвращая Filezilla из прошлой резервной копии, и все работало хорошо. Я надеюсь, что это будет полезно для других, пытающихся сделать резервную копию неисправных дисков.

ПРИМЕЧАНИЕ: мои плохие блоки, где в значительной степени близко друг к другу. Около 4 блоков одновременно в группах, где обнаружены плохо. Если ваши блоки расположены по всему диску, это может повлиять на несколько файлов. К счастью, в моем случае это затронуло только большой файл базы данных размером 4 ГБ.


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

Не совсем, но если вы так думаете, дайте мне знать, чтобы я стерла свой ответ. Я везде искал правильное решение, но нашел способ исправить проблему с моим сервером. Есть несколько других подобных вопросов, которые не ответили на мою проблему. До сих пор я нашел около десятка похожих вопросов по всему миру. Я только что ответил пару, чтобы написать мой опыт и как я смог решить его. Дайте мне знать, если вы хотите, чтобы я стер мой ответ, и я буду рад это сделать. С уважением.
Луис Х Кабреджо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.