У меня был сбой жесткого диска на 500 ГБ около 5 дней назад. Я использовал ddrescue
на важном разделе несколько дней назад, и это было на "Обрезке неудачных блоков" в течение почти 2 дней.
Оригинальная команда:
ddrescue -n /dev/rdisk1s2 /Volumes/OSXBackup/rdisk1s2.img /Volumes/OSXBackup/rdisk1s2.log
Токовый выход:
Initial status (read from logfile)
rescued: 248992 MB, errsize: 1007 MB, errors: 15867
Current status
rescued: 249021 MB, errsize: 978 MB, current rate: 17408 B/s
ipos: 44405 MB, errors: 15866, average rate: 2784 B/s
opos: 44405 MB, time from last successful read: 0 s
Trimming failed blocks...
Первоначальная команда использовала этот ddrescue -n
параметр, и я несколько раз перезапускал процесс по мере необходимости (и он, казалось, начинал с того места, где он останавливался каждый раз).
Есть ли способ ускорить этот процесс?
Изменить: шесть часов спустя, это текущий статус:
rescued: 249079 MB, errsize: 920 MB, current rate: 409 B/s
ipos: 39908 MB, errors: 15851, average rate: 2698 B/s
opos: 39908 MB, time from last successful read: 0 s
Trimming failed blocks...
Похоже, что в то время, как «ошибки» мучительно медленно отсчитывают, ipos / opos подсчитывает, сколько данных им нужно обработать, и, похоже, работает со скоростью 750 МБ / час. В этом случае он завершится через ~ 53 часа. Хлоп.
Правка № 2: Два дня спустя, все еще работает. Однако есть надежда. Он перешел часть «Обрезка ошибочных блоков» и перешел к следующему этапу «Разделение сбойных блоков». Во всяком случае, от просмотра этого вопроса следует отказаться, что это определенно занимает много времени, когда задействовано большое количество данных / ошибок. Я надеюсь, что смогу восстановить некоторые важные данные, когда все будет сказано и сделано.
rescued: 249311 MB, errsize: 688 MB, current rate: 0 B/s
ipos: 26727 MB, errors: 15905, average rate: 1331 B/s
opos: 26727 MB, time from last successful read: 20 s
Splitting failed blocks...
источник
-M
всякий случай, если сегодня утром перезагрузки и dist-upgrade сделали какой-то беспорядок)Ответы:
Я заметил, что использование
-n
опции (без разделения) вместе с-r 1
(повторите попытку) и установкой-c
(размер кластера) на меньшее значение может помочь.У меня сложилось впечатление, что шаг расщепления очень медленный, так как
ddrescue
расщепляет и снова расщепляет поврежденные участки. Это занимает много времени, потому чтоddrescue
пытается восстановить очень маленькие порции данных. Поэтому я предпочитаю не использовать-n
(не-сплит) вместе с-c 64
,-c 32
,-c 16
, АсоВероятно,
-n
(без разделения) всегда следует использовать для одного первого прохода в прямом и обратном направлениях. Кажется, что чем больше данных было разделено, тем медленнее клонирование, хотя я не уверен в этом. Я предполагаю, что чем больше необработанные области, тем лучше приddrescue
повторном запуске , потому что более смежные сектора должны клонироваться.Поскольку я использую файл журнала, я без колебаний отменяю команду с помощью Ctrl+, Cкогда скорость чтения данных становится низкой.
Я также использую
-R
(Обратный) режим, и после первого прохода он часто дает мне большую скорость чтения назад, чем вперед.Мне не совсем понятно, как
-r N
обрабатываются уже повторные сектора ( ) при повторном запускеddrescue
команды, особенно при чередовании-R
клонирования вперед (по умолчанию) и обратного ( ). Я не уверен, хранится ли количество попыток, которое они пытались сделать, в лог-файле, и, вероятно, работа снова выполняется бесполезно.Возможно,
-i
флаг (входная позиция) также может помочь ускорить процесс.источник
Это может быть очень трудно увидеть прогресс
ddrescue
, но есть еще одна команда называетсяddrescuelog
.Простая команда
ddrescuelog -t YourLog.txt
выведет эту хорошую информацию:Вы даже можете использовать его во время
ddrescue
работы ...источник
errsize: 289420 MB, errors: 34926 ( 7.23%) non-trimmed: 288130 MB, in 105407 area(s) ( 7.20%) non-split: 1243 MB, in 185 area(s) ( 0.03%) bad-sector: 47490 kB, in 92728 area(s) ( 0.00%)
(... но огромное спасибо за команду!Еще один способ отслеживать прогресс ddrescue (по крайней мере в Linux) - это использовать strace.
Сначала найдите PID для процесса ddrescue, используя «ps aux | grep ddrescue»
Затем запустите «strace» против этого процесса. Вы увидите что-то вроде:
...и так далее. Вывод быстрый и уродливый, поэтому я затем передаю его через «grep», чтобы отфильтровать то, что мне нужно:
В этом примере «1702212676608» соответствует «объему данных, которые все еще необходимо обработать на том диске 2 ТБ, который вы пытаетесь спасти». (Да. Ой.) Ddrescue выдает аналогичное число - хотя и "1720 ГБ" - в своем выводе на экран.
strace дает вам НАМНОГО более высокую степень детализации потока данных для изучения; это еще один способ оценить скорость ddrescue и оценить дату завершения.
Запускать его постоянно, вероятно, плохой план, поскольку он конкурирует с ddrescue за процессорное время. Я взял трубку в "голову", чтобы я мог получить первые 10 значений:
Надеюсь, это кому-нибудь поможет.
источник
strace -e lseek …
для этого - хотяpv -d <pid>
может быть красивее.Если ваша цель - получить большую часть данных без изменений, вы можете ускорить их извлечение. Но если вы действительно хотите спасти как можно больше данных, то путь к ddrecue - это путь.
источник
Я обнаружил, что играя с параметром -K, вы можете ускорить процесс. Из того, что я видел, обнаруживает ли ddrescue ошибку при запуске с опцией -n, пытается перескочить фиксированное количество секторов. Если он все еще не может прочитать, он прыгает вдвое больше. Если у вас есть большие поврежденные области, вы можете указать большое значение K (например, 100M), и поэтому скачок по ошибке будет больше в первый раз, и в первом прошлом будет легче быстро избежать проблемных областей.
Кстати, есть замечательное графическое приложение для анализа логов.
http://sourceforge.net/projects/ddrescueview/
источник
В какой файловой системе жесткого диска вы сохраняете образ восстановления и файл журнала? Я только что испытал, что восстановление внутреннего жесткого диска емкостью 500 ГБ (подключенного через SATA) на ноутбуке, работающем под управлением Linux Mint, с USB-накопителя, сохранение образа восстановления и файла журнала на
exFat
отформатированном жестком диске USB начиналось довольно медленно (1-2 МБ / сек), но примерно после 250 ГБ он полз со скоростью <100 КБ / с. Казалось, что чем медленнее становился файл спасательного образа, тем медленнее становилось.Затем я переместил образ восстановления и файл журнала в другое временное место, переформатировал жесткий диск USB с
ext4
файловой системой, переместил файлы обратно на него и возобновил процесс ddrescue - и теперь он снова работает с 1-20 МБ / с (колеблется но около 7 МБ / с в среднем)!Похоже
exFat
, не очень хорошо играет с очень большими файлами (несколько сотен гигабайт).источник
Для более быстрого и быстрого восстановления диска вы можете использовать файл сценария sh и запустить файл с именем «sh filename.sh». В этой строке показано, просто повторите «sudo ddrescue» и «sleep 3» еще несколько раз, режим сна используется для того, чтобы диск несколько секунд отдыхал, это может быть полезно по ряду причин:
-R0 без ответов. -E +0 для выхода при 1 ошибке. -T 1s выходит с ошибкой чтения в 1 секунду. Существуют опции, которые можно использовать как -d для прямой и -n для очистки, что может ускорить.
Вы можете использовать -R после финиша с опцией -A один раз, чтобы развернуть, удалить все ошибки и снова начать обратно. Значит он будет читать ошибки по-разному.
источник
dd_rhelp - это сценарий оболочки, который использует dd_rescue «[...] на весь ваш диск, НО он будет пытаться собрать максимально допустимые данные, прежде чем пытаться целую вечность работать с группами плохих секторов»
это довольно старый (2012), но все еще работает. еще не пробовал ddrescue.
источник