`if`와 `of`에 이미 동일한 내용이 있는 경우 dd는 데이터를 변경합니까?

`if`와 `of`에 이미 동일한 내용이 있는 경우 dd는 데이터를 변경합니까?

나는 dd( dd if=/dev/arch_data/root of=/dev/sdd3)를 사용하여 한 파티션을 다른 파티션으로 복사하려고 계획했는데 제대로 작동했습니다. 그런데 실수로 같은 명령을 다시 실행했는데 시간이 좀 걸려 Ctrl+C를 눌렀습니다.

이로 dd인해 데이터가 변경됩니까?

답변1

짧은 대답은 안전해야 한다는 것입니다.만약에/dev/arch_data/root두 명령 /dev/sdd3사이에 다른 어떤 것도 변경되지 않았습니다 .dd

기본적으로 dd데이터는 하드 드라이브의 표준 섹터 크기인 512바이트 블록으로 복사됩니다.(참고 1 참조). 즉, dd를 일찍 중지하면 하드 드라이브의 전체 섹터를 쓰려고 시도한 후에 중지됩니다. 어떤 상황에서도 dd는 디스크에 무언가를 쓴 다음 변경하지 않습니다. 따라서 일찍 중지하면 dd가 중지하기 전에 마지막으로 수행하는 작업은 운영 체제에 전체 섹터를 디스크로 보내도록 요청하기 때문에 아무 것도 변경되지 않습니다.


참고 1

최근에는 4096바이트 섹터로 구성된 하드 드라이브가 많이 생산되고 있습니다. 하드 드라이브는 운영 체제에 512바이트 섹터를 지원한다고 보고하며 운영 체제가 512바이트 쓰기를 시도하면 정상적으로 작동합니다. 그러나 작업을 수행하기 위해 하드 드라이브는 내부적으로 4096바이트 섹터를 읽고 512바이트를 변경한 다음 전체 4096바이트를 다시 씁니다. 이는 부패로 이어지지 않습니다. 하지만 이렇게 하면 쓰기 속도가 느려집니다. 가지고 있는 하드 드라이브가 무엇인지 모르는 경우 bs=4096만일을 대비해 하드 드라이브를 설정해 두는 것이 좋습니다.

답변2

예, dd호출할 때마다 데이터가 복사됩니다. 분명히 입력 파일( 로 지정됨)을 변경하지 않으면 if=출력 파일( 으로 지정됨 of=)은 동일하게 됩니다. 그러나 파일을 마지막으로 읽거나 쓴 시간 ( atime및 ) 과 같은 일부 메타데이터는 변경됩니다 .mtime

관련 정보