Продолжить ddrescue из поврежденного файла журнала

Продолжить ddrescue из поврежденного файла журнала

Несколько дней назад я запустил ddrescue на своем разделе объемом 180 ГБ, но через 3 дня (и 99,91% восстановления и на этапе 3 при последней проверке) система зависла, поэтому я выключил компьютер, удерживая нажатой кнопку выключения.

При включении я сделал резервную копию файла образа и файла журнала, но файл журнала не скопировался полностью, выдало сообщение об ошибке копирования, но из 106 кб файла журнала скопировалось 104 кб (странная вещь).

И когда я снова запустил команду ddrescue, появилось сообщение «Ошибка в mapfile discoC.Logfile, строка 4092».

команда:

sudo ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile

Это моеНеполный файл журнала на PasteBin, строка 4092 — последняя. Это часть файла журнала:

# Mapfile. Created by GNU ddrescue version 1.23
# Command line: ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
# Start time:   2021-12-15 01:56:33
# Current time: 2021-12-18 20:11:51
# Scraping failed blocks... (forwards)
# current_pos  current_status  current_pass
0xC5A65E00     /               1
#      pos        size  status
0x00000000  0x00003400  -
0x00003400  0x00000200  +
0x00003600  0x00000800  -

0x00003E00  0x00000800  +

0x00004600  0x00000200  -

0x00004800  0x00000200  +

0x00004A00  0x00000400  -

....... (Lot of - and +)........

0xC564C600  0x00000400  +
0xC564CA00  0x00000600  -
0xC564D000  0x00000200  +
0xC564D200  0x00000200  -
0xC564D400  0x00000800  +
0xC564DC00  0x00000400  -
0xC564E000  0x00000600  +
0xC564E600  0x00000200  -
0xC564E800  0x00001A00  +
0xC5650200  0x00000200  -
0xC5650400  0x00000E00  +
0xC5651200  0x00000200  -
0xC

Можете ли вы мне помочь, чтобы процесс мог продолжиться?

решение1

В соответствии сhttps://www.electric-spoon.com/doc/gddrescue/html/Mapfile-structure.htmlФайл карты (лог-файл) довольно легко интерпретировать и редактировать с помощью текстового редактора.

Я бы предпочел сделать его копию и удалить строки 4091 и 4092, что, как я ожидаю, позволит ddrescue продолжить с последней зафиксированной точки.

Кажется, он ужасно много падает. Интересно, если запустить его с конца в обратном порядке (т. е. добавив переключатель -R), можно ли быстрее захватить часть данных. (Нет ничего плохого в попытке сделать это).

решение2

Извините, что прочитал вопрос так поздно.

Было бы легко восстановить что-то действительное для отсутствующей строки 4092:

0xC5651400 <remaining-size> ?

Где:

  • 0xC5651400— это начало нового блока блоков, полученное путем суммирования начальной позиции предыдущего блока в строке 4091 0xC5651200и размера этого блока блоков 0x00000200.
  • ?это означает, что блоки, начинающиеся с 0xC5651400, еще не были опробованы, и поэтому необходимо попытаться клонировать их.
  • <remaining size>: см. ниже.

Как рассчитать значение для <remaining size>:

  • если в вашем лог-файле есть строка 4093: разница между начальным смещением в строке 4093 и вычисленным начальным смещением, указанным в строке 4092 (т.е. 0xC5651400), в шестнадцатеричном формате
  • или, если строки 4093 нет: разница между размером вашего dev/sdb3раздела и начальным смещением в строке 4092 (т.е. 0xC5651400).

Размер раздела dev/sdb3можно узнать с помощью команд терминала, например, fdisk -lили запустив процесс клонирования в другой файл образа, а при отсутствии файла журнала — в другой файл журнала. ddrescue должен отобразить сообщение типа «Собирается скопировать N байт». Возможно, вам придется разделить на размер сектора (например, 512) и преобразовать в шестнадцатеричное число.

Связанный контент