손상된 로그 파일에서 ddrescue 계속하기

손상된 로그 파일에서 ddrescue 계속하기

며칠 전 180GB 파티션에서 ddrescue를 실행했지만 3일 후(그리고 99.91% 복구 및 마지막 확인 단계 3에서) 시스템이 정지되었으므로 끄기 버튼을 계속 눌러 컴퓨터 전원을 끕니다.

켰을 때 이미지파일과 로그파일을 백업했는데 로그파일이 완전히 복사가 안되고 복사할 때 오류가 났다고 하는데 로그파일에서 106kb에서 104kb가 복사됐네요(이상한건 ).

그리고 ddrescue 명령을 다시 실행하면 "error in mapfile discoC.Logfile, line 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> ?

어디:

  • 0xC56514000xC56512004091 행에서 이전 청크의 시작 위치 와 해당 블록 청크의 크기를 합산하여 얻은 새로운 블록 청크의 시작입니다 0x00000200.
  • ?이는 아직 시도되지 않은 곳 에서 시작하는 블록에 0xC5651400대해 복제를 시도해야 함을 의미합니다.
  • <remaining size>: 아래를 참조하세요.

값을 계산하는 방법 <remaining size>:

  • 로그 파일에 라인 4093이 있는 경우: 라인 4093의 시작 오프셋과 라인 4092(예: 0xC5651400)에 언급된 계산된 시작 오프셋 간의 차이(16진수)
  • 또는 4093행이 없는 경우: 파티션 크기 dev/sdb3와 4092행의 시작 오프셋 간의 차이입니다(예: 0xC5651400).

파티션 의 크기는 다른 이미지 파일에 대한 복제 프로세스를 시작하거나 로그 파일 없이 다른 로그 파일을 시작하는 것과 dev/sdb3같은 터미널 명령을 통해 알 수 있습니다 . fdisk -lddrescue는 "N 바이트 복사 정보"와 같은 메시지를 표시해야 합니다. 섹터 크기(예: 512)로 나누어 16진수로 변환해야 할 수도 있습니다.

관련 정보