Файл журнала DDRescue поврежден после 6-недельного восстановления

578
Arnaud Paris

Я запускал DDRescue на диске 3 ТБ в течение почти 2 месяцев, и я восстановил около 2,8 ТБ, когда произошел сбой системы и файл журнала, который я использовал, вышел поврежденным. Мне удалось восстановить часть этого файла журнала, но в восстановленном журнале есть пробелы в секторах, из-за которых DDRescue выдает ошибку при повторном запуске. Вот ссылка для просмотра файла журнала: https://we.tl/58aSOeCOJo

Я попытался отредактировать файл журнала, чтобы удалить поврежденные данные, но поскольку это создает «разрыв» в хронологии секторов, DDRescue, похоже, не нравится.

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

0
Какую команду вы используете при запуске ddrescue? Pimp Juice IT 6 лет назад 0
ddrescue -f -d -R -r3 / dev / sde / dev / sdf /mnt/somedir/logfiles/log3.log Arnaud Paris 6 лет назад 0
Кто-нибудь имеет представление о том, как я мог возобновить ddrescue с последней точки, она закончилась в файле журнала? Кажется, что в строке 880828, где написано «0x2BA923A0000 0x00010000 *» Arnaud Paris 6 лет назад 0
«Я пытался отредактировать файл журнала, чтобы получить поврежденные данные» - как ты это сделал? Удаление двоичного блока мусора недостаточно, потому что последующие строки являются лишь полусуществующими, они повторяют более ранние строки. Вы их тоже удалили? Kamil Maciorowski 6 лет назад 0
Да, я пытался удалить поврежденные строки, но это не сработало, DDrescue сказал бы, что в моем файле журнала есть проблема с точным номером строки, из которой я удалил. Arnaud Paris 6 лет назад 0

1 ответ на вопрос

1
Kamil Maciorowski

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

# Rescue Logfile. Created by GNU ddrescue version 1.18.1 # Command line: ddrescue -f -d -R -r3 /dev/sde /dev/sdf /mnt/somedir/logfiles/log3.log # Start time: 2017-08-14 10:22:44 # Current time: 2017-08-14 12:13:09 # Copying non-tried blocks... Pass 1 (backwards) # current_pos current_status 0x27BF0520000 ? # pos size status 0x00000000 0x02870000 + 0x02870000 0x001A0000 * 0x02A10000 0x00010200 + 0x02A20200 0x0005FE00 * # ... many lines here 0x2BA92360000 0x00040000 ? 0x2BA923A0000 0x00010000 * # binary garbage here 0xE4E1710000 0x00010000 * # ... many lines here 0x13D75970000 0x00000200 + 0x13D75970200 0x00 

Вы определили строку как раз перед двоичным мусором, чтобы быть последним допустимым. Это говорит, 0x2BA923A0000 0x00010000 *и это номер строки 880829 в вашем случае. Это имеет смысл, потому что строки после мусора имеют более низкие позиции (первые числа), они, кажется, дублируют более ранние строки.

я сделал

<log3.txt head -n 880829 > log3new.txt 

и запустить ddrescue( infileбудучи зацикленным устройством из большого разреженного файла, это не должно иметь значения). Жаловался на линию 583658.

Это линия с ее окрестностями:

# ... 0x186C6940000 0x00000200 + 0x186C6940200 A9520200 0x0001FE00 * # <- this line here 0x24AA9540000 0x00000200 + # ... 

Чтобы это исправить, вы должны охватить весь диапазон от 0x186C6940200до 0x24AA9540000, поэтому лог-файл является непрерывным. Длина 0x24AA9540000- 0x186C6940200= 0xC3E2BFFE00. Вся строка 583658 должна быть:

0x186C6940200 0xC3E2BFFE00 ? 

где ?означает непробованные блоки.

Я исправил

sed -i '583658s/.*/0x186C6940200 0xC3E2BFFE00 ?/' log3new.txt 

Полученный лог-файл действителен для ddrescue.


РЕДАКТИРОВАТЬ

Однако проблема, с которой я столкнулся, заключается в том, что он заставляет DDrescue думать, что он восстановил только 2041 ГБ, а когда произошел сбой, он был выше 2800 ГБ, и, как вы можете себе представить, эти последние 800 ГБ заняли много недель, чтобы их восстановить.

На самом деле мы не знаем, те же самые 800 ГБ. Есть инструмент ddrescueview (с графическим интерфейсом, доступный как ddrescueviewпакет в Ubuntu), который покажет вам, где именно эти неиспробованные блоки, которые мы ввели. Обратите внимание, что текущая позиция находится в другом месте:

ddrescueview screenshot


Поэтому мне интересно, может ли информация, связанная с мусором, иметь к этому отношение? В любом случае мы можем включить его в файл журнала?

Я выделил эту часть «после мусора», последние 129289 строк:

tail -n 129289 log3.txt > extra.txt 

Эта команда покажет вам строки, которые есть, extra.txtно не в log3new.txt:

diff --suppress-common-lines extra.txt log3new.txt | grep -e '^<' 

Выход

< 0x13D75970200 0x00 

Это означает, что только последняя (неполная) строка после мусора не находится перед мусором в оригинале log3.txt. Извините, мне кажется, log3new.txtэто уже лучшее, что вы можете получить.

Спасибо, Камил, это было очень полезно! Мне удалось изменить файл журнала и принять его от DDrescue. Однако проблема, с которой я столкнулся, заключается в том, что он заставляет DDrescue думать, что он восстановил только 2041 ГБ, а когда произошел сбой, он был выше 2800 ГБ, и, как вы можете себе представить, эти последние 800 ГБ заняли много недель, чтобы их восстановить. Поэтому мне интересно, может ли информация, связанная с мусором, иметь к этому отношение? В любом случае мы можем включить его в файл журнала? В очередной раз благодарим за помощь! Arnaud Paris 6 лет назад 0
@ArnaudParis Я расширил свой ответ. Kamil Maciorowski 6 лет назад 0
Понятно ... Думаю, мне придется перезапустить процесс с 2.04Tb, и надеюсь, что эти 800Gb - не те, на восстановление которых ушло больше всего времени. Еще раз спасибо за все ваши объяснения, это делает весь процесс намного более понятным для меня. Теперь еще один вопрос, который у меня возник по поводу всего этого, заключается в том, что восстанавливаемый диск является частью RAID-массива, а все диски в этом массиве занимают 3 ТБ. Накопитель, на который я копирую, - это 4 ТБ, но если я захочу перенести то, что я до сих пор копировал, на чистый 3-ТБ накопитель, чтобы он соответствовал исходному диску, можно ли было бы сделать это с помощью DDrescue? Arnaud Paris 6 лет назад 0
И есть ли опция в DDrescue, которая позволила бы мне «сравнивать» два диска сектор за сектором? Arnaud Paris 6 лет назад 0
@ArnaudParis "Если бы я хотел перенести то, что я до сих пор скопировал, на чистый диск объемом 3 ТБ, чтобы он соответствовал оригинальному диску, было бы возможно сделать это с помощью DDrescue?" -- да. Если диски исправны, тогда подойдет обычный `dd` или даже` cat`, хотя `ddrescue` - безопасный выбор. - «А есть ли в DDrescue опция, которая позволила бы мне« сравнивать »два диска сектор за сектором?» - Я так не думаю. Если ваша цель состоит в том, чтобы сравнить этот диск объемом 4 ТБ с новым диском объемом 3 ТБ после копирования в него, используйте параметр `cmp` с` -n`. Количество байтов для сравнения будет точной емкостью меньшего диска. Kamil Maciorowski 6 лет назад 0