Перейти к содержимому

Есть ли способ ускорить ddrescue?

26

У меня был сбой жесткого диска на 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... 
33 931 просмотр
Matt Beckman спросил 14 лет назад
M 293

8 ответов

14
Принятый ответ

I observed that using the -n (no-split) option together with -r 1 (retry once) and setting -c (cluster size) to a smaller value can help.

My impression is that the splitting step is very slow as ddrescue splits and splits again the damaged areas. This takes a lot of time because ddrescue tries to restore very small portions of data. So, I prefer to use -n (no-split) together with -c 64, -c 32, -c 16, a.s.o.

Probably the -n (no-split) should always be used for one first pass in forward and reverse directions. It seems that the more the data were split, the slower the cloning, although I'm not sure about this. I assume the larger the non-treated areas, the best when running ddrescue again, because more contiguous sectors are to clone.

As I'm using a logfile, I don't hesitate to cancel the command with Ctrl+C when the data read speed becomes two low.

I also use the -R (Reverse) mode and after a first pass it often gives me higher speeds reading backwards than forward.

It's not clear to me how already retried sectors (-r N) are handled when running the ddrescue command again, especially when alternating forward (default) and reverse (-R) cloning commands. I'm not sure if the number of times they were tried is stored in the logfile and probably the work is done again useless.

Probably the -i (input position) flag can help speed up things too.

user208233 ответил 13 лет назад
U 156
7

Это может быть очень трудно увидеть прогресс ddrescue, но есть еще одна команда называется ddrescuelog.

Простая команда ddrescuelog -t YourLog.txtвыведет эту хорошую информацию:

current pos: 2016 GB, current status: trimming domain size: 3000 GB, in 1 area(s) rescued: 2998 GB, in 12802 area(s) ( 99.91%) non-tried: 0 B, in 0 area(s) ( 0%)  errsize: 2452 MB, errors: 12801 ( 0.08%) non-trimmed: 178896 kB, in 3395 area(s) ( 0.00%) non-split: 2262 MB, in 9803 area(s) ( 0.07%) bad-sector: 10451 kB, in 19613 area(s) ( 0.00%) 

Вы даже можете использовать его во время ddrescueработы ...

3 недели, чтобы получить 4 ТБ для обрезки: `errsize: 289420 МБ, ошибки: 34926 (7,23%), без обрезки: 288130 МБ, в 105407 областях (7,20%), без разделения: 1243 МБ, в 185 областях (0,03%) плохой сектор: 47490 кБ, в 92728 областях (0,00%) `; (... но большое спасибо за команду!

Stephen · 7 лет назад · 0
nza ответил 12 лет назад
N 71
3

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

Как именно это сделать?

William Entriken · 10 лет назад · 2
MvG ответил 14 лет назад
M 939
3

Я обнаружил, что играя с параметром -K, вы можете ускорить процесс. Из того, что я видел, обнаруживает ли ddrescue ошибку при запуске с опцией -n, пытается перескочить фиксированное количество секторов. Если он все еще не может прочитать, он прыгает вдвое больше. Если у вас есть большие поврежденные области, вы можете указать большое значение K (например, 100M) и, таким образом, скачок на ошибку будет больше в первый раз, и в первом прошлом будет легче быстро избежать проблемных областей.

Кстати, есть замечательное графическое приложение для анализа логов.

http://sourceforge.net/projects/ddrescueview/

Josep ответил 11 лет назад
J 31
3

One more way to monitor ddrescue's progress (on Linux, at least) is through the use of strace.

First, find the PID for the ddrescue process using "ps aux | grep ddrescue"

root@mojo:~# ps aux | grep ddrescue root 12083 0.2 0.0 15764 3248 pts/1 D+ 17:15 0:04 ddrescue --direct -d -r0 /dev/sdb1 test.img test.logfile root 12637 0.0 0.0 13588 940 pts/4 S+ 17:46 0:00 grep --color=auto ddrescue 

Then run "strace" against that process. You'll see something like:

root@mojo:~# strace -p 12083 Process 12083 attached - interrupt to quit lseek(4, 1702220261888, SEEK_SET) = 1702220261888 write(4, "\3101\316\335\213\217\323\343o\317\22M\346\325\322\331\3101\316\335\213\217\323\343o\317\22M\346\325\322\331"..., 512) = 512 lseek(3, 1702220261376, SEEK_SET) = 1702220261376 read(3, "\3101\316\335\213\217\323\343o\317\22M\346\325\322\331\3101\316\335\213\217\323\343o\317\22M\346\325\322\331"..., 512) = 512 lseek(4, 1702220261376, SEEK_SET) = 1702220261376 write(4, "\3101\316\335\213\217\323\343o\317\22M\346\325\322\331\3101\316\335\213\217\323\343o\317\22M\346\325\322\331"..., 512) = 512 ^C 

...and so on. The output is fast and ugly, so I then pipe it through "grep" to filter out the stuff I care about:

root@mojo:/media/u02/salvage# nice strace -p 12083 2>&1|grep lseek lseek(4, 1702212679168, SEEK_SET) = 1702212679168 lseek(3, 1702212678656, SEEK_SET) = 1702212678656 lseek(4, 1702212678656, SEEK_SET) = 1702212678656 lseek(3, 1702212678144, SEEK_SET) = 1702212678144 lseek(4, 1702212678144, SEEK_SET) = 1702212678144 lseek(3, 1702212677632, SEEK_SET) = 1702212677632 lseek(4, 1702212677632, SEEK_SET) = 1702212677632 lseek(3, 1702212677120, SEEK_SET) = 1702212677120 lseek(4, 1702212677120, SEEK_SET) = 1702212677120 lseek(3, 1702212676608, SEEK_SET) = 1702212676608 ^C 

In that example, the "1702212676608" equates to "the amount of data that still needs to be processed on that 2 Tb disk you're trying to salvage." (Yeah. Ouch.) ddrescue is spitting out a similar number -- albeit as "1720 GB" -- in its screen output.

strace gives you a MUCH higher granularity data stream for you to examine; it's one more way to evaluate the speed of ddrescue and estimate a completion date.

Running it constantly is probably a bad plan since it would compete with ddrescue for CPU time. I've taken to piping it to "head" so I can grab the first 10 values:

root@mojo:~# strace -p 4073 2>&1 | grep lseek | head 

Hope this helps someone.

Для этого есть `strace -e lseek…` - хотя `pv -d `может быть красивее.
grawity · 9 лет назад · 0
Peter K ответил 11 лет назад
P 31
0

В какой файловой системе жесткого диска вы сохраняете образ восстановления и файл журнала? Я только что понял, что восстановление внутреннего жесткого диска емкостью 500 ГБ (подключенного через SATA) на ноутбуке, работающем под управлением Linux Mint, с USB-накопителя, сохранение образа восстановления и файла журнала на exFatотформатированном жестком диске USB начиналось довольно медленно (1-2 МБ / сек), но примерно после 250 ГБ он полз со скоростью <100 КБ / с. Казалось, что чем медленнее становился файл спасательного образа, тем медленнее он становился.

Затем я переместил образ восстановления и файл журнала в другое временное место, переформатировал жесткий диск USB с ext4файловой системой, переместил файлы обратно на него и возобновил процесс ddrescue - и теперь он снова работает со скоростью 1-20 МБ / с (колеблется но около 7 МБ / с в среднем)!

Похоже exFat, не очень хорошо играет с очень большими файлами (несколько сотен гигабайт).

Dirk ответил 10 лет назад
D 101
0

Для более быстрого и быстрого восстановления диска вы можете использовать файл сценария sh и запустить файл с именем «sh filename.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 для выхода при 1 ошибке. -T 1s выходит с ошибкой чтения в 1 секунду. Существуют опции, которые можно использовать как -d для прямой и -n для очистки, что может ускорить.

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

Dealazer ответил 9 лет назад
D 19
0

dd_rhelp - это сценарий оболочки, который использует dd_rescue «[...] на весь ваш диск, НО он будет пытаться собрать максимально допустимые данные, прежде чем пытаться целую вечность работать с группами плохих секторов»

Это довольно старый (2012), но все еще работает. еще не пробовал

Costin Gușă ответил 7 лет назад
C 566