나는 dd의 busybox 버전을 사용하여 임베디드 시스템을 개발 중입니다. 일부 외부 유틸리티에서 드라이브 지우기를 테스트하려고 하는데 dd가 지운 후 디스크에서 다시 읽지 않고 대신 캐시된 데이터를 표시합니다.
초기 dd를 수행하고 데이터를 살펴보고 시스템을 재부팅하여 캐시를 플러시하고 지우고 dd를 다시 실행했을 때 결과가 모두 0이었기 때문에 dd로 범위를 좁혔습니다.
그러나 공장 설정에서 dd를 수행하고 드라이브를 지운 다음 재부팅하지 않고 다시 dd를 수행하면 재부팅할 때까지 모든 0이 표시되지 않습니다.
dd가 nocache 플래그와 함께 iflag opt를 지원한다는 GNU 매뉴얼 페이지를 읽었지만 busybox는 해당 옵션을 지원하지 않으므로 불가능합니다.
내 질문은 dd가 캐시 대신 디스크에서 다시 읽도록 강제하는 방법입니다.
답변1
@sendmoreinfo의 답변을 바탕으로 :
dd if=/dev/device iflag=direct bs=1M
읽기 캐싱에는 영향을 주지 않습니다.
답변2
당신은 시도 할 수 있습니다
sync
echo 3 > /proc/sys/vm/drop_caches
다양한 캐시를 삭제합니다.
/usr/src/linux/Documentation/sysctl/vm.txt
자세히 보다 drop_caches
.
참고: 문제는 iflag=direct
당시 지원되지 않는 busybox dd에 관한 것입니다. busybox v1.33.0(2020-12-29)에 추가되었습니다.busybox dd: O_DIRECT I/O 지원. 사용 예는 다른 답변을 참조하세요.
답변3
iflag=direct 답변의 작은 강조 표시도 진행률 표시줄을 제공합니다.
dd iflag=direct if=~/source.iso | pv | dd oflag=direct of=/dev/sdb bs=8M
iflag/oflag가 없으면 pv는 완료되었다고 보고한 다음 정지된 것처럼 보이지만 장치에 대한 dd는 여전히 캐시에서 작동 중입니다.
답변4
직접 I/O(개방 모드 O_DIRECT
)는 작동해야 하지만 커널 및/또는 dd
이를 지원하지 않을 수 있습니다.