3

Я пытаюсь спасти раздел на отказавшем 500 ГБ жестком диске в /dev/sdb используя ddrescue на второй диск 1 ТБ. Команда ddrescue, которую я использую для первого прохода:

ddrescue -n /dev/sdb2 core.img core.log

с последующим вторым проходом:

ddrescue -d -r 3 /dev/sdb2 core.img core.log

Проблема в том, что я случайно набрал неверное имя для второй команды. Вместо core.img я пишу core.ing и я не понял этого до следующего утра, когда второй проход прошел, и core.log был перезаписан, чтобы сообщить о 100% -ом успехе.

Теперь я застрял с 2 массивными файлами. Повторное выполнение всей работы неосуществимо, поскольку я все еще sdb3 . Я уже проверил с помощью hexedit и 2 файла дополняют друг друга (то есть, если в смещении от 0x5000 до 0x7000 core.img заполнен нулем, то такое же смещение в core.ing заполнено реальными данными, и наоборот.)

Я думаю о dd -ing core.img в /dev/sdc2 (диск для замены sdb я подготовил), а затем каким-то образом скопировать только ненулевые байты в core.ing в /dev/sdc2 но я не уверен, как могу ли я только копировать ненулевые байты и использовать что, так как решения, которые я могу придумать, очень громоздки и для их завершения потребуется вечность.

Для справки, я использую Gentoo-SystemRescueCD 4.9.6, sdb2 - это NTFS.

1 ответ1

2

Как я могу объединить два разных спасения?

(Это предполагает GNU ddrescue)

тл; др:

  1. Создайте mapfile/logfile для первой копии: ddrescue --generate-mode infile outfile mapfile

  2. Создайте объединенную копию из 2-го → 1-го, как описано в сообщении в ddrescue рассылки ddrescue : ddrescue -m logfile2 image2 image1 logfile1


1. Создайте файл журнала для первого изображения

Это немного сложно, поскольку у вас фактически нет файла журнала для первого прохода. Тем не менее, вы можете сгенерировать один:

Когда ddrescue вызывается с --generate-mode он работает в "режиме генерации", который отличается от "режима восстановления" по умолчанию. То есть, если вы используете опцию --generate-mode, ddrescue ничего не спасет. Он только пытается сгенерировать файл-файл для последующего использования.

...

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

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

ddrescue --generate-mode infile outfile mapfile

(акцент мой)

из руководства по ddrescue GNU ; раздел 12 « Режим генерации ».

Таким образом, вы можете сделать это для первого изображения (которое я предлагаю переименовать, чтобы избежать путаницы, например, core-1.img):

ddrescue -G /dev/sdb2 core-1.img core-1.log

"Я все еще читаю из /dev/sdb , будет ли создание журнала мешать этому?"

Обратите внимание, что ddrescue восстанавливает в основном из outfile (в данном случае core-1.img), с очень небольшим чтением из infile . Я проверил это с inotifywatch:

$ inotifywatch 840-linux.img # infile
$ inotifywatch 840-linux2.img # outfile
$ inotifywatch 840-linux2.log
$ ddrescue -G 840-linux.img 840-linux2.img 840-linux2.log

total  close_nowrite  open  filename
6      3              3     840-linux.img
17467  17465   1              1     840-linux2.img

total  access  modify  close_write  close_nowrite  open  filename
196    1       189     2            1              3     840-linux2.log

Так что это безопасно выполнять, пока другой процесс выполняется на sdb (в случае OP, еще одна попытка восстановления в другом разделе), так как чтение незначительно.

2. Объединить две частичные копии

Такая ситуация возникла раньше:

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

К счастью, их можно объединить с помощью --domain-mapfile:

--domain-mapfile=file
   Restrict the rescue domain to the blocks marked as 
   finished in the mapfile file. This is useful for 
   merging partially recovered images of backups, or if 
   the destination drive fails during the rescue. Use 
   '-' as file to read from standard in`

И решение аналогичной проблемы включало этот вариант:

Вы можете объединить изображения, набрав:

cd dir1
ddrescue -m dir2/logfile dir2/image image logfile

Это создает файлы dir1/logfile dir1/image со всеми данными, которые были спасены в данный момент. Затем вы можете продолжить спасение, например, так:

В вашем случае, если вы сгенерировали файл журнала для core.img и отметили их 1 , а core.ing и core.log 2 (чтобы не было путаницы!):

ddrescue -m core-2.log core-2.img core-1.img core-1.log

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