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

у меня был сбой жесткого диска на 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...

похоже, что в то время как "ошибки" отсчет мучительно медленно, IPO/opos подсчитывает, сколько данных он должен сбивать, и он, кажется, работает со скоростью 750 МБ/час. При такой скорости он завершится через ~ 53 часа. Фу!

Edit #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...
25
задан Matt Beckman
24.03.2023 22:12 Количество просмотров материала 2558
Распечатать страницу

7 ответов

я заметил, что с помощью -n (без разделения) опция вместе с -r 1 (повторить один раз) и параметр -c (размер кластера) к меньшему значению может помочь.

мое впечатление, что шаг расщепления очень медленно, как ddrescue разделяет и разделяет снова поврежденные области. Это занимает много времени, потому что ddrescue пытается восстановить очень небольшие фрагменты данных. Поэтому я предпочитаю использовать -n (без разделения) вместе с -c 64,-c 32,-c 16, a.С. o.

наверное the -n (без разделения) всегда должно использоваться для первого прохода в прямом и обратном направлениях. Похоже, чем больше данных было разделено, тем медленнее клонирование, хотя я не уверен в этом. Я предполагаю, что чем больше необработанные участки, тем лучше при работе ddrescue опять же, потому что больше смежных секторов клонировать.

поскольку я использую лог-файл, я без колебаний отменяю команду с помощью Ctrl+C когда скорость чтения данных будет два низкий.

и -R (обратный) режим, и после первого прохода он часто дает мне более высокие скорости чтения назад, чем вперед.

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

наверное -i (ввод координат) флаг может помочь ускорить вещи.

14
отвечен user208233 2023-03-26 06:00

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

простая команда ddrescuelog -t YourLog.txt выведет эти славные infos:

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 работает...

7
отвечен nza 2023-03-26 08:17

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

3
отвечен MvG 2023-03-26 10:34

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

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

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

3
отвечен Josep 2023-03-26 12:51

еще один способ мониторинга прогресса ddrescue (по крайней мере, в Linux) - использование strace.

во-первых, найти PID для процесса ddrescue с помощью "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

затем запустите "strace" против этого процесса. Вы увидите что-то вроде:

root@mojo:~# strace -p 12083
Process 12083 attached - interrupt to quit
lseek(4, 1702220261888, SEEK_SET)       = 1702220261888
write(4, "01653733o7M652101653733o7M6521"..., 512) = 512
lseek(3, 1702220261376, SEEK_SET)       = 1702220261376
read(3, "01653733o7M652101653733o7M6521"..., 512) = 512
lseek(4, 1702220261376, SEEK_SET)       = 1702220261376
write(4, "01653733o7M652101653733o7M6521"..., 512) = 512
^C

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

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

в этом примере "1702212676608" приравнивается к " объему данных, которые все еще необходимо обработать на этом диске 2 Тб, который вы пытаетесь спасти." (Да. Ой.) ddrescue выплевывает аналогичное число-хотя и "1720 ГБ" - в своем выводе на экран.

strace дает вам гораздо более высокий поток данных детализации для вас, чтобы изучить; это еще один способ оценить скорость ddrescue и оценить дату завершения.

запуск его постоянно, вероятно, плохой план, так как он будет конкурировать с ddrescue для процессорного времени. Я взял, чтобы трубопровод его "голову", так что я могу захватить первые 10 значений:

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

надеюсь, это кому-то поможет.

3
отвечен Peter K 2023-03-26 15:08

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

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

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

0
отвечен Dirk 2023-03-26 17:25

для более быстрого и быстрый вариант, чтобы спасти диск, вы можете использовать файл скрипта sh и запустить файл с "ш filename.sh". Он содержит этой строке показано, просто повторите "судо ddrescue" и "сон 3" несколько раз, сон используется для того, чтобы ездить отдыхать несколько секунд, это может быть хорошо по ряду причин:

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

the-r0 без ответов. -E +0 для выхода на 1 ошибку. К -Т 1С выходит с 1 секунды не читать. Есть опции, которые можно использовать как-d для direct и-n для no царапина, которая может ускорить.

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

0
отвечен Dealazer 2023-03-26 19:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх