12

У меня есть жесткий диск с плохими блоками или секторами, которые не читаются из-за потенциальных механических проблем, таких как неисправная головка диска, неисправный двигатель или какая-то другая проблема, которая заставляет жесткий диск мучительно читать данные медленно и с большим количеством ошибок чтения. Я наблюдаю в среднем 50 КБ / с, при этом некоторые операции чтения опускаются ниже 10 КБ / с, и часто они застревают в файле или секторе в целом, обычно на довольно длительное время - от 2-10 минут или более (когда с помощью rsync до истечения времени ожидания).

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

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

Естественно, именно здесь вы, вероятно, скажете: «Вы должны использовать ddrescue!«Ну, это все хорошо и здорово, но у меня уже есть резервные копии большинства данных, поэтому я просто хочу восстановить некоторые файлы. Меня не интересует попытка восстановить полный раздел блок за блоком, как это делает ddrescue. Я заинтересован только в спасении только определенных файлов и каталогов.

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

Так я здесь мечтаю или существует что-то, что может это сделать? Или, может быть, даже способ заставить rsync или ddrescue работать таким образом? Я действительно открыт для любых решений, которые могут работать, при условии, что они позволяют мне выбирать, какие файлы я хочу "спасти", и могут пропустить файлы с ошибками при первом запуске, а затем попробовать / повторить эти ошибки позже.

До сих пор я пробовал rsync со следующими параметрами, но он часто зависает в файле дольше, чем время ожидания, и в идеале мне бы хотелось, чтобы он перешел к следующему файлу и позже вернулся к полученным файлам. застрял на. Я не думаю, что это возможно, хотя. Во всяком случае, вот что я использовал до сих пор:

rsync -avP --stats --block-size=512 --timeout=600 /path/to/source/* /path/to/destination/

4 ответа4

3

У меня Hitachi 3 ТБ, который читает мучительно медленно, ddrescue будет работать на уровне файлов. Но не по каталогам. Однако я не смог заставить работать опции dtime для --timeout или --min-read-rate.

Вы хотите сделать это в скрипте, чтобы спасти один файл за раз.

cat listoffiles | while read file
pipe while> do
pipe while> ls -l "$file"
pipe while> ddrescue -n -e1  "$file" /cc/RecoveredFiles/"$file" /cc/RecoveredFiles/"$file".llog
pipe while> date
done | tee -a  /cc/RecoveredFiles/ddrescue.log
3

Возможно, с тех пор, как был задан этот вопрос, rsync изменился.

По моему опыту, rsync настоящее время отлично справляется с копированием материала с умирающего жесткого диска,

rsync -a <src> <dest>

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

rsync --version версия отчетов протокол rsync version 2.6.9 protocol version 29

Что касается других ответов:

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

2

Отличный вопрос, люблю уровень детализации. Для утилиты, которая будет хорошо работать в этом сценарии, я бы порекомендовал попробовать Filescavenger от Quetek. Это позволит проводить чрезмерное повторное считывание на счету 100+, но, что более важно, оно имеет функцию создания образа диска, которая позволит вам выгружать все содержимое в изображение, не теряя времени, пытаясь оценить файлы, затем загрузить изображение и сканировать его. для файлов. Утилита стоит 50 долларов для домашних пользователей, но вы можете скачать ее и протестировать, чтобы узнать, что можно восстановить с изображения, прежде чем тратить деньги.

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

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

Крис

1

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

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