DD'yi önbelleklememeye veya önbellekten okumamaya zorla


22

Dd'nin busybox versiyonuna sahip gömülü bir sistem üzerinde çalışıyorum. Sürücüye bir silme işlemini dışarıdaki bir yardımcı programdan sınamaya çalışıyorum, ancak dd silme işleminden sonra diskten tekrar okumadı, ancak bana önbelleğe alınmış verileri gösteriyor.

İlk dd'yi yaptığım gibi verileri dd'ye daralttım, verileri görün, önbelleği temizlemek için sistemimi yeniden başlattım, sildim ve ardından tüm sıfırlarla tekrar dd çıktı.

Bununla birlikte, fabrika ayarlarında gs yapmam durumunda, sürücüyü silip, yeniden başlatmadan tekrar gs yapmam, yeniden başlatana kadar tüm sıfırları göstermeyecektir.

GNU manpage'de gg'nin nocache bayrağıyla iflag opt'i desteklediğini okudum, ancak busybox bu seçeneği desteklemiyor, bu yüzden söz konusu değil.

Sorum şu: dd'yi önbellekten ziyade tekrar diskten okumaya nasıl zorlayabilirim?


2
Potansiyel nitpicking, ancak ... dd önbelleğe almaz. Çekirdek / disk sistemi yok. Bu nedenle Frostschutz'un (dd'ye göndermeyen) emri çalışıyor.
Hennes

Dönmeyi beklemek yerine sürücüyü uyanık tutmak için buna ihtiyacım var.
AslaMind9

Yanıtlar:


11

Deneyebilirsin

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

hangi her türlü önbellek bırakır.

Ayrıntılar için bkz /usr/src/linux/Documentation/sysctl/vm.txtüzerinde drop_caches.

(Not: soru, bugüne kadar hala desteklemeyen meşgul gg gdi hakkındaydı iflag=direct.)


1
Sadece bir not: bu sadece Linux ile çalışır. Ayrıca, /procdosya sistemi Linux'un bazı yerleşik yapılandırmalarında devre dışı bırakılmıştır.

@EvanTeitelman Doğru, Yine de burada çalışıyor gibi görünüyor, bu yüzden bu cevabı oylayacağım ve kabul edeceğim.
ateşli

2
Bunun bir kereye mahsus etkisi olup olmadığını merak ediyorum. Göre bu etki bir kez kapalıdır.
Craig McQueen

Bu, önbellekleri düşürür, ancak ddbüyük miktarda veri aktarıyorsa, işlem sırasında onları atmalarını engellemek için hiçbir şey yapmaz .
Jan Hudec

9

@ Sendmoreinfo'nın cevabına dayanarak:

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

Okuma önbelleğini etkilemez.


Bu işe yarıyor ama aynı zamanda okunmakta olanı da önbelleğe almıyor mu?
aslaMind9

1
Doğru. Amaç bu.
Ole Tange

8

Doğrudan G / Ç (açık mod O_DIRECT) çalışması gerekir, ancak çekirdeğiniz ve / veya dddesteklemeyebilir.


4
Bu doğru cevap: dd if = / dev / aygıt iflag = direct bs = 1M; okuma önbelleğini etkilemez.
Ole Tange,

1
@OleTange: Neden bunu kendi cevabınız olarak göndermiyorsunuz? Bu, "dd no önbellek" için google’da 1 numaralı isabet ve gerçek doğru cevap, kabul edilmeyen bazı cevapların
yorumunda

5

İflag için küçük bir gelişme = doğrudan cevap; bir ilerleme çubuğu da sağlayın:

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

İflag / oflag olmadan pv bittiğini rapor eder ve sonra asılmış gibi görünür; ancak cihaza dd hala önbellekte çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.