
dd
기존 하드 드라이브에서 새 하드 드라이브로 데이터를 복사하는 데 사용하고 있습니다 . 나는 데이터의 무결성이 안전한지 확인하고 싶습니다.
이에답변, Gilles는 말합니다.
[dd]가 성공적으로 종료되면 하드웨어 결함을 제외하고 백업이 올바른 것입니다.
그게 정확히 무슨 뜻인가요? dd
일종의 검증 기능이 내장되어 있나요 ?
대신 rsync를 사용하려면 두 번째 패스도 실행하여 --checksum
확인합니다. 그런 종류의 편집증이 정당화됩니까?
답변1
dd
또는 다른 응용 프로그램에는 여러분이 생각하는 것과 같은 "어떤 종류의 내장된 검증"이 없습니다. 즉, 기록된 내용과 비교하기 위해 저장 매체에서 데이터를 다시 읽지 않습니다. 그것이 운영체제의 역할이다.
애플리케이션에서 하드웨어에 대한 읽기-검증을 수행하는 것은 실제로 불가능합니다. 일부 시나리오에서는 작동하지만 대부분의 경우 아무것도 달성하지 못합니다. 애플리케이션은 방금 작성한 내용을 다시 읽을 수 있습니다.저장 매체에 직접 쓰는 경우, 그러나 이는 일반적으로 메모리 내 캐시에서 다시 읽혀 유용한 보증을 제공하지 않습니다. ~ 안에당신이 인용한 예는 dd
파이프에 쓰고 있으며 이 경우 라인 아래의 데이터에 어떤 일이 발생하는지 제어할 수 없습니다. rsync 예에서 두 번째 패스는 rsync --checksum
의미가 없습니다. 이론적으로는 오류를 포착할 수 있지만 실제로 오류가 발생하면 두 번째 패스는 아마도 잘못된 것을 보고하지 않을 것이므로 뭔가에 노력을 낭비하고 있는 것입니다. 실제로 유용한 보증을 제공하지는 않습니다.
그러나 응용 프로그램하다운영 체제가 데이터에 대한 책임을 수락했는지 확인한다는 의미에서 데이터에 어떤 일이 발생하는지 확인합니다. 모든 시스템 호출은 오류 상태를 반환합니다. 시스템 호출이 오류 상태를 반환하는 경우 응용 프로그램은 일반적으로 오류 메시지를 표시하고 0이 아닌 종료 상태를 반환하여 해당 오류를 사용자에게 전파해야 합니다.
이는 dd
예외이므로 주의하세요. 명령줄 매개변수에 따라dd
일부 오류는 무시할 수 있음. 이는 매우 이례적인 일입니다. dd
이 속성을 사용하는 유일한 공통 명령입니다. cat
대신 사용 dd
하면 손상 위험을 방지하고그게 더 빠를 수도 있지.
일련의 데이터 복사에서는 두 가지 종류의 오류가 발생할 수 있습니다.
- 손상: 전송 중에 비트가 뒤집혔습니다. 애플리케이션 수준에서 이를 확인할 수 있는 방법은 없습니다. 왜냐하면 그런 일이 발생하면 다시 읽을 때 동일한 손상을 일으킬 가능성이 높은 프로그래밍 버그나 하드웨어 오류 때문이기 때문입니다. 이러한 손상이 발생하지 않았는지 확인하는 유일한 유용한 방법은 미디어를 물리적으로 연결 해제하고 다시 시도하는 것입니다. RAM에 문제가 있는 경우 다른 컴퓨터에서 시도하는 것이 좋습니다.
- 잘림: 복사된 모든 데이터가 올바르게 복사되었지만 일부 데이터는 전혀 복사되지 않았습니다. 이 하나~이다명령의 복잡성에 따라 가끔 확인해 볼 가치가 있습니다. 이를 위해 데이터를 읽을 필요는 없습니다. 크기만 확인하면 됩니다.
답변2
아니요, dd
명시적인 확인을 수행하지 않습니다. 디스크 또는 그 일부에 대해 법의학적으로 검증된 복사본이 필요하거나 필요한 경우 미국 국방부 컴퓨터 법의학 연구소에서 개발 dcfldd
한 향상된 버전을 사용하세요.dd
답변3
"확실"할 수 있는 유일한 방법은 추가 읽기 및 비교 단계를 수행하는 것입니다(캐시를 삭제한 후).
그 외에도 dd
다른 모든 프로그램과 동일한 방식으로 읽기 및 쓰기 오류를 감지합니다. 드라이브(및 관련된 기타 구성 요소)가 오류를 보고하면 작동합니다. 실제로 데이터를 쓰지 않고 자동으로 데이터를 받아들이는 드라이브의 경우 운이 좋지 않습니다.
그런 종류의 편집증이 정당화됩니까?
하드웨어의 신뢰성을 신뢰할 수 없다면 상황은 복잡해집니다.
답변4
에서 man dd
:
완료되면 dd는 전체 및 부분 입력 및 출력 블록, 잘린 입력 레코드 및 홀수 길이 바이트 스와핑 블록의 수를 표준 오류 출력에 표시합니다.
부분 입력 블록은 입력 블록 크기보다 작은 블록을 읽은 블록입니다. 부분 출력 블록은 출력 블록 크기보다 작게 쓰여진 블록입니다. 테이프 장치에 대한 부분 출력 블록은 치명적인 오류로 간주됩니다. 그렇지 않으면 블록의 나머지 부분이 기록됩니다. 문자 장치에 대한 부분 출력 블록은 경고 메시지를 생성합니다.
dd
블록을 복사할 때마다 입력/출력 블록 크기가 일치하는지 확인합니다. 그렇지 않은 경우 경고 또는 치명적인 오류( 로 재정의됨 noerror
)로 오류를 처리합니다. 이것이 dd
바로 거의 항상 작동하는 이유입니다.
하지만 디스크 무결성을 수동으로 확인하는 작업을 대체할 수는 없습니다. 정보가 귀하에게 가치가 있다면 그렇습니다.당신의 편집증은 정당합니다. dd
완료 되면 수동 확인을 실행하세요 .