드라이브가 곧 실패할 예정이어서(C5 및 C6이 트리거됨) 아직 할 수 있을 때 또 다른 백업을 수행하기로 결정했습니다. 이를 위해 동일한 모델의 다른 드라이브에 dd를 사용합니다. 예상대로 입력/출력 오류가 발생했으며 오류가 발생하면 dd가 수행하는 작업을 알고 싶습니다. 아무 것도 쓰지 않고 해당 섹터를 건너뛰나요? 아니면 대상 드라이브의 이전 데이터를 0으로 대체합니까?
또한 64K 블록을 사용하고 있으므로 복사가 더 많은 데이터를 가져오지 못하는 경우 더 작은 블록 크기로 dd를 실행할 수 있습니까?
답변1
댓글에서 언급했듯이,암소 비슷한 일종의 영양ddrescue
이 사용 사례에 더 나은 도구입니다. 어쨌든, 귀하의 명백한 질문에 답변해 드리겠습니다 dd
.
dd
오류가 발생하면 어떻게 해야 하는지 알고 싶습니다.
주어지지 않으면 종료되어 conv=noerror
도구가 무시하게 됩니다.입력하다실수. 가정이 noerror
주어졌고 인쇄상 오류가 발생했습니다. 그 다음에
아무 것도 쓰지 않고 해당 섹터를 건너뛰나요? 아니면 대상 드라이브의 이전 데이터를 0으로 대체합니까?
그것은 당신이 그것을 사용했는지 여부에 따라 달라집니다 conv=sync
. 이렇게 하면 dd
각 입력 블록이 채워지고 ibs=
null 바이트가 추가됩니다. 나추측하다소스 블록 장치의 섹터 크기 와 ibs
같으면 읽기 오류가 발생할 경우 출력 스트림이 입력과 동기화된 상태로 유지됩니다. 그러나 잘못된 경우 ibs
읽기 오류로 인해 스트림이 비동기화될 가능성이 높습니다.이 훌륭한 답변. 도움이 될 것 같습니다 iflag=fullblock
.
또한 읽기 오류가 없더라도 출력이 입력보다 클 수 있습니다. 이는 버퍼가 가득 차기 전에 sync
마지막 블록이 EOF에 도달하는 경우 ibs
발생할 수 있습니다 .
참고 noerror
하고 sync
있습니다POSIX 요구 사항, fullblock
아니요.
dd
복사본에서 더 많은 데이터를 가져오지 못한 경우 더 작은 블록 크기로 실행할 수 있습니까 ?
이론적으로는 그렇습니다. 하지만 이를 위해서는 위의 문제를 계속 처리하면서 skip=
수동 으로 사용해야 합니다 . 새로운 블록 크기를 다시 계산 하고 그에 맞춰야 seek=
한다는 점을 잊지 마세요 . 가능하지만 곧 프로세스를 자동화하고 싶을 것입니다.skip
seek
이제 ddrescue
이러한 모든 문제를 GNU 기본 동작과 비교해 보세요.
- 읽기 오류는 건너뛰고 나중에 "의심스러운" 세그먼트로 돌아가서 점점 더 작은 청크로 읽으려고 시도합니다.
- 무슨 일이 있어도 적절한 오프셋을 유지합니다.