9

Я должен восстановить свой 1 ТБ USB HD. Я использую ddrescue для достижения этой цели. Есть ли способ возобновить ddrescue после его запуска?

Я использую команду:

ddrescue /dev/sdd1 ./bye1t.dd_rescue.image

5 ответов5

13

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

Файл журнала будет третьим параметром:

ddrescue /dev/sdd1 ./bye1t.dd_rescue.image ~/sdd1.log

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

Примечание: ddrescue и dd_rescue - это разные программы.

6

Даже если вы забыли указать лог-файл, может быть надежда:

Сформировать режим

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

Или, может быть, вы начали копировать диск с помощью dd conv=noerror,sync и теперь находитесь в той же ситуации, как описано выше. В этом случае обратите внимание, что вы не можете использовать копию, созданную dd, если она не была вызвана с аргументом преобразования sync .

Не отчаивайтесь (пока). В некоторых случаях Ddrescue может сгенерировать приблизительный файл журнала из входного файла и (частичной) копии, который почти так же хорош, как и точный файл журнала. Это можно сделать, просто предполагая, что сектора, содержащие все нули, не были спасены.

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

Например, если вы впервые попробовали одну из этих команд:

ddrescue infile outfile

или же

dd if=infile of=outfile conv=noerror,sync

вы можете создать приблизительный лог-файл с помощью этой команды:

ddrescue --generate-mode infile outfile logfile
3

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

2

Поскольку вы не указали файл журнала в качестве третьего параметра, возобновление не может быть выполнено автоматически. Вы можете создать файл журнала вручную, если вы знаете уже спасенные сектора, синтаксис прост. Просто запустите другое фиктивное восстановление в другой файл, указав журнал, и позвольте ему читать различные области. Затем отредактируйте журнал, чтобы представить уже спасенные области в вашем первом файле. Теперь повторите вашу предыдущую команду, но в качестве третьего параметра укажите имя файла журнала. Затем ddrescue возобновит работу с первым непроверенным сектором.

2

Согласно https://wiki.archlinux.org/index.php/Disk_cloning, кажется, что с помощью переключателя conv=noerror,sync dd фактически добавляет нули в конце блока, а не именно там, где произошли ошибки чтения. Это противоречит информации, содержащейся в ответе Майлза Вольбе от 2013-08-29.

Например, если правильная последовательность 198123283 и в середине есть ошибка чтения, она будет писать 198283000 , а не 198000283 .

Таким образом, в случае, если были действительно ошибки чтения, предлагаемый метод не будет точным - будут области, которые были бы читаемыми, которые в конечном итоге будут заполнены нулями, но будут считаться "спасенными".

Кстати, рекомендуется начинать такую попытку восстановления, заполняя целевой диск нулями (или, по крайней мере, свободным пространством, что, например, можно сделать с помощью WinHex).

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