dd가 캐시하지 않거나 캐시에서 읽지 않도록 강제


22

busybox 버전의 dd로 임베디드 시스템에서 작업하고 있습니다. 외부 유틸리티에서 드라이브 지우기를 테스트하려고하지만 지우기 후에 디스크에서 dd를 다시 읽지 않지만 캐시 된 데이터를 보여줍니다.

초기 dd를 수행하고 데이터를 확인하고 캐시를 플러시하기 위해 시스템을 다시 시작한 다음 지우기를 수행 한 다음 dd를 다시 실행하여 dd로 좁혔습니다.

그러나 공장 설정에서 dd를 수행하면 드라이브를 지우고 다시 시작하지 않고 dd를 다시 수행하면 다시 시작할 때까지 0이 모두 표시되지 않습니다.

GNU 맨 페이지에서 dd는 nocache 플래그와 함께 iflag opt를 지원하지만 busybox는 해당 옵션을 지원하지 않으므로 문제가 아닙니다.

내 질문은 어떻게 dd가 캐시가 아닌 디스크에서 다시 읽도록 할 수 있습니까?


2
잠재적 인 nitpicking이지만 ... dd는 캐시하지 않습니다. 커널 / 디스크 시스템은 그렇게합니다. 이것이 Frostschutz의 명령 (dd로 전송되지 않음)이 작동하는 이유입니다.
Hennes

회전을 기다리지 않고 드라이브를 깨우려면이 기능이 필요합니다.
neverMind9

답변:


11

당신은 시도 할 수 있습니다

sync
echo 3 > /proc/sys/vm/drop_caches

모든 종류의 캐시를 삭제합니다.

자세한 내용은 참조 /usr/src/linux/Documentation/sysctl/vm.txtdrop_caches.

(참고 : 질문은 busybox dd에 대해 아직까지 지원하지 않습니다 iflag=direct.)


1
참고 사항 : Linux에서만 작동합니다. 또한 /proc일부 임베디드 Linux 구성에서 파일 시스템이 비활성화되어 있습니다.

@EvanTeitelman 맞습니다. 여기서 효과가있는 것 같으 므로이 답변을 찬성하고 받아 들일 것입니다.
열렬한

2
이것이 일회성 효과인지 또는 진행 중인지 궁금했습니다. 에 따르면 ,이 효과는 한 번 꺼져 있습니다.
Craig McQueen

이렇게하면 캐시가 삭제되지만 dd대량의 데이터를 전송하는 경우 프로세스 에서 캐시 를 휴지통 에 버리지 않도록 아무 것도 수행하지 않습니다 .
Jan Hudec

9

@sendmoreinfo의 답변을 바탕으로 :

dd if=/dev/device iflag=direct bs=1M

읽기 캐시에는 영향을 미치지 않습니다.


작동하지만 읽을 내용을 캐시하지 않습니까?
neverMind9

1
옳은. 그것이 목표입니다.
Ole Tange

8

직접 I / O (열기 모드 O_DIRECT)는 작동하지만 커널이 dd지원하지 않을 수 있습니다.


4
정답입니다. dd if = / dev / device iflag = direct bs = 1M; 읽기 캐시에는 영향을 미치지 않습니다.
Ole Tange

1
@OleTange : 그렇다면이 답변을 본인의 답변으로 게시하지 않겠습니까? 이것은 "dd no cache"에 대한 Google의 첫 번째 명중이며 실제 정답은 허용되지 않는 답변에 대한 주석입니다 ...
mic_e

5

iflag = direct answer에 약간의 번영; 진행률 표시 줄도 제공하십시오.

dd iflag=direct if=~/source.iso | pv | dd oflag=direct of=/dev/sdb bs=8M

iflag / oflag가 없으면 pv 보고서가 완료된 다음 중단 된 것처럼 보입니다. 그러나 장치에 대한 dd는 여전히 캐시에서 작업 중입니다.

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