บังคับการไม่ให้แคชหรือไม่อ่านจากแคช


22

ฉันกำลังทำงานกับระบบฝังตัวด้วยรุ่น busybox ของวว ฉันพยายามทดสอบการลบไดรฟ์จากยูทิลิตีภายนอกบางตัว แต่ dd ไม่ได้อ่านจากแผ่นดิสก์อีกครั้งหลังจากการลบ แต่แสดงให้ฉันเห็นว่าข้อมูลแคช

ฉัน จำกัด ให้แคบลงเป็น dd เมื่อฉันทำ dd เริ่มต้นดูข้อมูลรีสตาร์ทระบบของฉันเพื่อล้างแคชทำการลบแล้ววิ่ง dd อีกครั้งโดยมีศูนย์ทั้งหมด

อย่างไรก็ตามถ้าฉันทำการตั้งค่าจากโรงงานให้ลบไดรฟ์และทำ dd อีกครั้งโดยไม่ต้องเริ่มระบบใหม่จะไม่แสดงค่าศูนย์ทั้งหมดให้ฉันจนกว่าจะรีสตาร์ท

ฉันได้อ่านใน GNU manpage ที่ dd สนับสนุน iflag opt ด้วยการตั้งค่าสถานะ nocache แต่ 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

มันไม่ส่งผลกระทบต่อ read-cache


ใช้งานได้ แต่มันไม่ได้แคชสิ่งที่กำลังอ่านอยู่หรือไม่?
neverMind9

1
แก้ไข. นั่นคือเป้าหมาย
Ole Tange

8

Direct I / O (โหมดเปิดO_DIRECT) ควรใช้งานได้ แต่เคอร์เนลของคุณและ / หรือddอาจไม่รองรับ


4
นี่คือคำตอบที่ถูกต้อง: dd if = / dev / device iflag = direct bs = 1M; มันไม่ส่งผลกระทบต่อ read-cache
Ole Tange

1
@OleTange: ทำไมคุณไม่โพสต์สิ่งนี้เป็นคำตอบของคุณเอง? นี่คือ # 1 hit on google สำหรับ "dd no cache" และคำตอบที่ถูกต้องจริงอยู่ในความคิดเห็นของคำตอบที่ไม่ได้รับการยอมรับ ...
mic_e

5

เล็ก ๆ ที่เจริญงอกงามไปยังคำตอบ iflag = โดยตรง; ให้แถบความคืบหน้าด้วย:

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.