dd는 어떤 종류의 검증을 수행합니까? 하드 드라이브에서 새 하드 드라이브로 데이터를 복사하는

dd오래된 하드 드라이브에서 새 하드 드라이브로 데이터를 복사하는 데 사용 하고 있습니다. 데이터 무결성이 안전한지 확인하고 싶습니다.

답변 에서 Gilles는 말합니다.

[dd]가 성공적으로 종료되면 하드웨어 오류를 제외하고 백업이 올바른 것입니다…

정확히 무엇을 의미합니까? 않습니다 dd검증 내장의 일종?

rsync를 대신 사용하는 경우 --checksum확인을 위해 두 번째 패스도 실행합니다 . 그런 종류의 편집증이 정당한가요?



답변

dd또는 다른 응용 프로그램은 아마도 여러분이 생각하고있는 의미에서 “일종의 내장 검증”기능을 가지고 있지 않습니다. 기록 된 내용과 비교하기 위해 저장 매체의 데이터를 다시 읽지 않습니다. 이것이 운영 체제의 일입니다.

실제로 응용 프로그램에서 하드웨어로 읽기 확인을 수행하는 것은 불가능합니다. 일부 시나리오에서는 작동하지만 대부분의 경우 아무것도 달성하지 못합니다. 응용 프로그램은 저장 매체에 직접 쓰는 경우 방금 쓴 내용을 읽을 수는 있지만 일반적으로 메모리 내 캐시에서 읽으 므로 유용한 보증을 제공하지 않습니다. 에서 당신이 인용 예를 들어 , dd파이프에 쓰고, 그 경우는 선 아래로 추가 데이터 처리에 제어하지 않습니다. rsync 예제에서 두 번째 패스는rsync --checksum 이론적으로는 오류를 잡을 수 있지만 실제로는 오류가 발생하면 두 번째 단계에서 잘못된 점이보고되지 않으므로 실제로 유용한 보증을 제공하지 않는 작업에 노력을 낭비하고 있습니다.

그러나 응용 프로그램 운영 체제가 데이터에 대한 책임을 수락했는지 확인한다는 의미에서 데이터에 어떤 일이 발생하는지 확인합니다. 모든 시스템 호출은 오류 상태를 반환합니다. 시스템 호출이 오류 상태를 리턴하면 응용 프로그램은 일반적으로 오류 메시지를 표시하고 0이 아닌 종료 상태를 리턴하여 해당 오류를 사용자에게 전파해야합니다.

그주의 dd예외입니다 : 명령 줄 매개 변수에 따라 dd약간의 오차가 무시할 수 있습니다 . 이것은 매우 드문 일입니다. dd이 속성의 유일한 공통 명령입니다. 사용 cat대신에 dd, 당신이 위험에 손상을하지 않는 그런 식으로하고 그것을 잘 빠를 수 있습니다 .

일련의 데이터 복사에서 두 가지 종류의 오류가 발생할 수 있습니다.

  • 손상 : 전송 중에 비트가 뒤집 힙니다. 응용 프로그램 수준에서이를 확인할 수있는 방법은 없습니다. 그럴 경우 다시 읽을 때 동일한 손상을 일으킬 가능성이 높은 프로그래밍 버그 또는 하드웨어 오류 때문입니다. 이러한 손상이 발생하지 않았 음을 확인하는 유일한 유용한 방법은 미디어에 물리적으로 연결을 끊고 RAM에 문제가있는 경우 다른 컴퓨터에서 다시 시도하는 것입니다.
  • 잘림 : 복사 된 모든 데이터가 올바르게 복사되었지만 일부 데이터가 전혀 복사되지 않았습니다. 이것은 하나 입니다 가치가 명령의 복잡성에 따라, 때로는 검사합니다. 데이터를 읽을 필요가 없습니다. 크기 만 확인하면됩니다.

답변

아니요, dd명시 적으로 확인하지 않습니다. 법 의학적으로 검증 된 디스크 사본이나 그 일부를 원할 경우 미 국방성 컴퓨터 법의학 연구소 dcfldd에서 dd개발 한 고급 버전을 사용 하십시오.


답변

“확실한”유일한 방법은 캐시를 삭제 한 후 추가 읽기 및 비교 패스를 수행하는 것입니다.

그 외에도, dd다른 모든 프로그램과 같은 방식으로 읽기 및 쓰기 오류를 감지합니다. 드라이브 (및 관련된 다른 구성 요소)에서 오류를보고하면 작동합니다. 실제로 데이터를 쓰지 않고 데이터를 자동으로 수락하는 드라이브의 경우 운이 좋지 않습니다.

그런 종류의 편집증이 정당한가요?

하드웨어를 신뢰할 수 있다고 믿을 수 없다면 상황이 복잡해집니다 …


답변

예. 결함이있는 하드웨어는 메가 바이트 수당 1 비트로 임의의 속도로 데이터에 임의의 오류 비트를 삽입 할 수 있습니다. 이는 가능하며 때로는 실제로 발생합니다.

일반적으로 소스와 대상을 모두 다시 읽음으로써 md5 또는 sha1 해시를 사용하여 데이터가 손상되지 않았는지 확인합니다.

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

이것은 데이터가 파일 시스템 캐시보다 훨씬 크다고 가정합니다. 그렇지 않으면, 캐시 내용이 아닌 매체의 실제 데이터를 확인하기 위해 시스템을 다시 시작하거나 다른 시스템을 사용해야 할 수도 있습니다.


답변

보낸 사람 man dd:

완료되면 dd는 표준 오류 출력에 대한 전체 및 부분 입력 및 출력 블록, 잘린 입력 레코드 및 홀수 길이의 바이트 스와핑 블록 수를 표시합니다.

부분 입력 블록은 입력 블록 크기보다 작은 크기입니다. 부분 출력 블록은 출력 블록 크기보다 적은 크기입니다. 테이프 장치에 대한 부분 출력 블록은 치명적인 오류로 간주됩니다. 그렇지 않으면 블록의 나머지 부분이 기록됩니다. 문자 장치에 대한 부분 출력 블록은 경고 메시지를 생성합니다.

dd블록을 복사 할 때마다 입력 / 출력 블록 크기가 일치하는지 확인합니다. 그렇지 않은 경우 경고 또는 치명적인 오류로 오류를 처리합니다 (noerror . 그것이 dd거의 항상 작동하는 이유 입니다.

여전히 디스크의 무결성을 수동으로 확인하는 것으로 대체되지는 않습니다. 정보가 당신에게 가치가 있다면, 그렇습니다 . 편집증은 정당 합니다. dd완료 되면 수동 확인을 실행하십시오 .


답변