conv=fsync를 설정하지 않으면 컴퓨터가 꺼지면 복사가 불완전할 수 있다는 의미입니까?

conv=fsync를 설정하지 않으면 컴퓨터가 꺼지면 복사가 불완전할 수 있다는 의미입니까?

그래서 내가 아는 한 conv=fsync는 dd가 종료되기 전에 캐시가 완전히 기록되었음을 의미합니다. 하지만 이는 dd가 종료될 때 쓰기가 아직 완료되지 않았음을 의미합니까? 예를 들어 컴퓨터를 종료하면(dd가 완료된 것으로 보인 후) 파일이 불완전할 수 있습니까?

dd를 사용하여 하드 드라이브에 모두 0을 쓰는 것은 어떻습니까?

답변1

dd conv=fsyncdd가 종료하기 전에 쓰고 있는 파일의 운영 체제 캐시를 플러시하도록 합니다.

일반적으로 이 옵션이 없으면 운영 체제가 기록할 모든 데이터를 승인하면 dd가 종료됩니다. 운영 체제를 종료하면 종료되기 전에 내용을 디스크에 플러시하고 파일 시스템을 마운트 해제합니다.

따라서 정상적으로 종료하는 경우 fsync 옵션을 사용하는 것과 크게 다르지 않습니다. 그러나 dd 없이 실행하고 완료될 때까지 기다린 다음 플러그를 뽑으면 모든 베팅이 취소됩니다. 물론 fsync 옵션을 사용하더라도 이렇게 하면 상황이 제대로 진행되지 않을 수 있지만 최소한 dd의 출력은 디스크에 남게 됩니다.

dd conv=fsync다시 말하지만, 이것이 이동식 드라이브인 경우 fsync를 사용한 다음 디스크를 꺼내거나 사용하지 않고 디스크를 꺼내는 것은 아무런 차이가 없습니다. 플러시 버퍼 존. 그러나 이동식 디스크를 꺼내지 않고 꺼내면 모든 버퍼에 쓸 기회가 있는지 확신할 수 없습니다.

여기서 가장 큰 차이점은 아마도 fsync 옵션을 사용하면 dd(또는 pop)가 완료되기를 기다리는 동안 OS가 버퍼를 즉시 플러시하도록 강제한다는 것입니다. 그렇지 않으면 버퍼가 백그라운드에서 기회적으로 플러시되고 커널이 다른 I를 위해 버퍼 플러시를 지연할 수 있습니다. 먼저 플러시하세요. /O.

여기서 중요한 점은 커널이 다른 더 중요한 I/O(예: 동일한 장치에 대한 읽기 또는 다른 쓰기)를 위해 일부 쓰기를 연기한다는 것입니다. fsync(또는 꺼내기)를 사용하면 이 특정 I/O가 가장 중요하다는 것을 커널에 알려 지금 완료합니다.

여기서는 데이터 소스가 중요하지 않으며 데이터가 작성된 위치와 대기 시간만 중요합니다.

관련 정보