dd의 콘솔 출력을 파일과 콘솔에 복사

dd의 콘솔 출력을 파일과 콘솔에 복사

I/O 오류가 발생하는 dd를 사용하여 하드 드라이브의 이미지를 생성하려고 합니다. 결과적으로 'noerror' 매개변수를 추가했지만 복구를 시도하기 위해 오류를 추적하고 싶습니다.

현재 시도는 다음과 같습니다.

sudo dd if=/dev/sdb bs=1M conv=sync,noerror of=output.img 2>&1 | tee output.log

이를 통해 output.img와 output.log가 모두 생성되지만 둘 다 크기가 0바이트이며 dd를 종료하면 터미널에 출력이 출력되지 않습니다.

저는 ddrescue와 같은 도구를 사용하기 전에 'noerror' 옵션을 사용하여 dd를 사용하는 것을 선호합니다. 왜냐하면 저는 dd에 더 익숙하기 때문입니다.

또한 이 드라이브에는 단일 NTFS 파티션이 포함되어 있으므로 비트가 누락된 NTFS 파티션을 복구하는 방법에 대한 조언이 도움이 될 것입니다(드라이브는 500GB이고 처음 발생한 오류는 약 30GB였습니다).

감사해요!

답변1

그냥 사용하는 것이 좋습니다ddrescue- 작업에 적합한 도구를 피하지 마십시오. 실행하는 것도 어렵지 않으며 스트레스도 덜 수 있습니다.

호출은 간단합니다.

첫 번째 실행:

  • -p- 사전 할당된 공간
  • -b 4M- 속도를 위해 큰 섹터 크기를 사용하십시오.
ddrescue -p -b 4M ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

후속 실행: ( 와 달리 dd여러 번 실행할 수 있으며 로그 파일을 참조하여 중단된 부분부터 계속됩니다.)

  • -b 512- 더 작은 섹터 크기를 사용하여 간격을 메우십시오.
  • -r 10- 여러 번의 재시도 패스 사용
ddrescue -b 512 -r 10 ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

읽기 오류가 있는 섹션에는 (기본적으로) 0이 포함되며, 아래와 유사한 로그 파일이 생성됩니다.

#      pos        size  status
0x00000000  0x00014E00  +
0x00014E00  0x00000200  -
0x00015000  0x00005800  +
0x0001A800  0x00000200  -
0x0001AA00  0x00028000  +
0x00042A00  0x00000200  -
0x00042C00  0x00125400  +

표시된 선은 +오류가 없는 영역이고 표시된 선은 -오류가 있는 영역입니다.


읽기 오류의 성격에 따라 다음 옵션 중 일부를 조사해야 할 수도 있습니다.

   -d, --direct
          use direct disc access for input file

   -K, --skip-size=<min>[,<max>]
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -O, --reopen-on-error
          reopen input file after every read error

   -r, --retry-passes=<n>
          exit after <n> retry passes (-1=infinity) [0]

   -R, --reverse
          reverse the direction of all passes

귀하의 질문에 대한 직접적인 답변:

  1. 아마도 버퍼링 문제가 발생했을 것입니다. 많은 줄이 한꺼번에 나타나고 다시는 아무 것도 나타나지 않을 것입니다.unbuffer
  2. sudo비밀번호를 요구할 수도 있지만 프롬프트를 리디렉션했기 때문에 아무 일도 일어나지 않습니다.

관련 정보