dd는 어떤 종류의 검증을 수행합니까?


16

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

답변 에서 Gilles는 말합니다.

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

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

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


"무결성 보안"을 정의하십시오.
Thorbjørn Ravn Andersen은

@ ThorbjørnRavnAndersen 사본이 원본과 동일하다는 것을 의미합니다.
Sparhawk

플랫 파일 만있는 경우 파일을 복사하는 일반적인 방법은 tar 또는 cpio를 사용하는 것입니다. GNU tar에는 gnu.org/software/tar/manual/html_section/tar_81.html 확인 플래그가 있습니다. 요즘 rsync아마도 가장 단순 할 것입니다.
Thorbjørn Ravn Andersen

1
"하드웨어 결함 금지"는 확인을 수행 하지 않음을 나타냅니다 . 그럴 경우 하드웨어 오류를 감지 할 수 있습니다.
Barmar

답변:


20

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

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

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

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

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

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

대부분의 저장 매체는 단일 비트 플립을 감지하고 수정하는 데 충분한 FEC를 사용한다고 생각합니다.
gardenhead

2
물론 전체 하드 디스크를 dd로 복사 한 다음 캐시가 충분히 크지 않기 때문에 하드 디스크를 즉시 비교하는 경우.
Joshua

1
답변 주셔서 감사합니다 (+1). 아마도 내가 상당히 기본적인 것을 사용하고 있다고 언급해야 dd if=/dev/sdc of=/dev/sdb bs=4M하므로 내 이해는 오류와 속도를 무시하는 문제 (와 비교하여 다소 cat)가 무의미 하다는 것입니다 . 장착 후 크기를 확인하는 것 df입니까?
Sparhawk

4

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


4

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

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

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

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


읽기 및 비교와 dd오류 감지에 대해 이보다 더 복잡 합니다.
Gilles 'SO- 악마 그만해'

당신이 지금까지 그런 거라면 글쎄, dd심각한 데이터 손상 문제를 그러나이 같은 질문의 일부가 아닌 특별한 경우.
frostschutz

이러한 손상 문제는를 사용하여 생성 된 데이터를 검증하는 것을 정당화 할 수 dd있습니다. 실제 솔루션은 무엇이든 사용하는 것이지만 dd자동 데이터 손상은 전문 분야이기 때문 dd입니다.
Gilles 'SO- 악의를 멈추십시오

2
@Gilles 또는 dd오류를 무시하도록 지시 하지 마십시오 . 당신이 요청한 것을 정확하게하는 것에 대한 프로그램을 정확하게 비난 할 수는 없습니다.
Mark

@ Mark 그리고 어떻게, dd오류를 무시하지 말라고기도 하겠습니까? 그리고 아니요, conv=noerror정답이 아닙니다. 예제는 frostschutz의 답변 을 참조하십시오 . 내가 의 디자인을 비난 dd무시하는 오류를 기본 모드를 만들기위한, 그리고 매우 정밀 내부 역학을 모르고 해제 할 수 없습니다 하나.
질 'SO- 악마 그만'

2

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

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

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

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


OS가 파일 시스템 캐시를 장치에 쓰도록 파일 시스템을 마운트 해제 / 마운트하면 충분합니다.
miracle173

miracle173, 그러나 동기화 후에도 OS가 작성한 것을 캐시에 보관하지 않습니까? 마운트를 해제하면 RAM에서 모든 캐시가 지워질 것입니다.
Matt

1

보낸 사람 man dd:

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

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

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

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.