두 개의 ddrescue 이미지를 병합하는 방법은 무엇입니까?

두 개의 ddrescue 이미지를 병합하는 방법은 무엇입니까?

동일한 미디어에 대한 연속적인 복구 시도로 생성된 두 개의 ddrescue 이미지가 있습니다. 두 이미지의 크기는 동일하지만 보완적인 데이터가 있습니다.

$ od part-one/ddrescue_image --skip-bytes 227966006774 --read-bytes 32
3242365232766 113056 016517 102014 074371 144073 000000 000000 000000
3242365233006 000000 000000 000000 000000 000000 000000 000000 000000
3242365233026
$ od part-two/ddrescue_image --skip-bytes 227966006774 --read-bytes 32
3242365232766 000000 000000 000000 000000 000000 124616 163450 064251
3242365233006 074567 134433 012742 022160 044301 054235 140604 020633
3242365233026

이를 완전한 이미지로 병합하는 방법은 무엇입니까?

세부 사항

  • 두 번째 그림은 다음과 같이 첫 번째 복구 시도의 연속입니다.

    $ ddrescue corrupt-partition part-one/ddrescue_image part-one/ddrescue_log
    $ mkdir part-two; cp part-one/ddrescue_log part-two/ddrescue_log
    $ ddrescue corrupt-partition part-two/ddrescue_image part-two/ddrescue_log
    
  • 두 번째 이미지는 거의 완전히 0이지만 1847개의 격리된 영역에 분산된 18KB의 복구된 데이터를 포함합니다.

  • 언급된 기술을 사용해 보았습니다.이 메일링 리스트에,

    $ ddrescue --domain-logfile=part-two/ddrescue_log part-two/ddrescue_image part-one/ddrescue_image part-one/ddrescue_log
    
    
    GNU ddrescue 1.16
    Press Ctrl-C to interrupt
    Initial status (read from logfile)
    rescued:   937286 MB,  errsize:   62976 B,  errors:     122
    Current status
    rescued:   937286 MB,  errsize:   62976 B,  current rate:        0 B/s
       ipos:         0 B,   errors:     122,    average rate:        0 B/s
       opos:         0 B,     time since last successful read:       0 s
    Finished
    

    하지만 아무것도 바뀌지 않는 것 같습니다.

답변1

복사하려는 데이터 범위를 정확히 알고 있는 경우 다음을 사용할 수 있습니다 dd.

dd conv=notrunc if=input of=output seek=123456 skip=123456 bs=4k count=128

그러면 123456부터 시작하여 입력에서 출력까지 128개의 4k 블록이 복사됩니다.

덮어쓰려는 블록을 먼저 백업하는 것이 좋습니다.

dd if=output skip=123456 bs=4k count=128 of=output-backup-bs4k-pos123456

어떤 데이터 영역을 복사해야 할지 모르거나 확신이 없다면 GNU dd알아두세요 sparse.

dd conv=notrunc,sparse if=input of=output bs=4k

이는 0이 아닌 모든 4k 입력 블록을 출력으로 복사합니다. bs=512블록이 작다면 이것을 사용하세요!

이 방법으로는 백업이 되지 않으므로 파일이 중요한 경우 파일의 복사본을 만드는 것이 좋습니다.

답변2

이런 것을 시도해 보시겠습니까?

dd if=part-one/ddrescue_image bs=1 count=227966006784 >result
dd if=part-two/ddrescue_image bs=1 seek=227966006785 >>result

청크 크기가 작으면 속도가 매우 느려집니다. 더 큰 청크 크기를 사용하도록 리팩터링하고 여전히 올바른 오프셋에 도달하면 속도가 빨라집니다.

그렇게 할 수 없는 경우 dd작업을 더 많은 호출로 분할하는 것이 좋습니다. 청크 크기(예: 65536)를 사용하여 가장 가까운 64K 경계까지 읽은 다음 거기에서 속도를 늦춥니다(점진적으로 1K 블록으로 드롭다운 가능) ) 크기를 가장 가까운 1K 경계로 조정한 다음 단일 바이트까지 줄인 다음 세밀한 작업이 끝나면 다시 속도를 높입니다.

관련 정보