dd 복원 및 오류 읽기, 숫자 건너뛰기/찾기

dd 복원 및 오류 읽기, 숫자 건너뛰기/찾기

다음 명령을 사용하여 심각하게 손상된 CD에서 데이터를 복사하려고 합니다.

dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress

그러나 "of" 장치의 연결이 끊어지고 dd가 중지됩니다(아래 출력).

...
dd: error reading '/dev/sr1': Input/output error
1074889+17746 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s
dd: writing to 'IDT.img': Input/output error
1074889+17747 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s

계속할 수 있습니다.

dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress seek=1092635 skip=1092635

아니면 찾기/건너뛰기 숫자가 둘 다여야 할까요 1092636, 아니면 건너뛰기/찾기가 서로 달라야 할까요, 아니면 완전히 달라야 할까요?

PS 아마도 잘못된 명령을 사용하고 있다는 것을 알고 있습니다. 예를 들어 ddrescue가 더 나을 수도 있습니다. 그러나 나는 아마도 지금(?) dd에 갇혀 있을 것입니다. 출력 파일과 관련하여 더 이상 오류가 발생하지 않을 것으로 예상됩니다.

답변1

읽기 오류가 발생하므로 이러한 옵션은 conv=sync,noerror거의 확실하게 데이터 흐름을 변경하여 불행히도 출력 파일을 쓸모없게 만들거나 적어도 부정확한 복사본으로 만듭니다.

이 옵션은 입력에 오류 읽기(짧은 읽기)가 있을 때마다 conv=sync블록을 NUL 바이트로 채웁니다 . 명령 은 dd중단된 입력 스트림을 계속하려고 시도하지만 이제 출력에는 알 수 없는 수의 NUL 바이트가 삽입됩니다.

사용을 중단 dd하고 사용해야 합니다ddrescue, 불량 미디어에서 데이터를 복구하기 위해 만들어졌습니다.

유사한 주제에 대한 답변 참조

답변2

사용구조하다. 손상된 미디어를 읽고 손상된 부분을 "보존"할 수 있지만 dd는 그렇지 않습니다.

원시 데이터를 상상해보세요.

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c d e f g h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

손상 후( X)는 다음과 같습니다.

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c X X X X h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

dd conv=sync,noerror는 다음을 읽습니다:

  +-+-+-+-+-+-+-+-+
  |a b c h i j k l|
  +-+-+-+-+-+-+-+-+

ddrescue가 읽을 내용.

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c 0 0 0 0 h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

보시다시피 dd가 읽은 원본 메시지는 왜곡되어 있으며 이런 방식으로 파일 시스템 이미지를 생성하면 사용할 수 없게 됩니다. 문제 없이 Ddrescue 이미지를 설치할 수 있어 평소처럼 손상되지 않은 데이터에 액세스하는 데 도움이 되며 손상된 데이터를 쉽게 치워두고 다음 단계로 진행할 수 있습니다.

관련 정보