फ़ोर्स dd कैश नहीं है या कैश से नहीं पढ़ना है


22

मैं dd के व्यस्त संस्करण के साथ एक एम्बेडेड सिस्टम पर काम कर रहा हूं। मैं कुछ बाहरी उपयोगिता से ड्राइव को मिटाने का परीक्षण करने की कोशिश कर रहा हूं, हालांकि dd मिटाए जाने के बाद फिर से डिस्क से नहीं पढ़ता है, लेकिन मुझे कैश्ड डेटा दिखाता है।

मैंने इसे dd तक सीमित कर दिया है जब मैं एक आरंभिक dd करता हूं, तो डेटा देखें, कैश को फ्लश करने के लिए अपने सिस्टम को पुनरारंभ करें, इरेज़ किया और फिर dd को फिर से चलाए यह सभी शून्य के साथ आया।

हालाँकि, अगर मैं फ़ैक्टरी सेटिंग्स पर dd करता हूँ, ड्राइव को मिटाता हूँ, और dd को फिर से शुरू किए बिना इसे फिर से शुरू करने तक मुझे सभी शून्य नहीं दिखाएगा।

मैंने GNU मैनपेज में पढ़ा है कि dd iflag ऑप्ट का समर्थन करता है, जो कि एक नॉच फ्लैग के साथ है, लेकिन बिजीबॉक्स उस विकल्प का समर्थन नहीं करता है, इसलिए यह प्रश्न से बाहर है।

मेरा सवाल यह है कि मैं कैश से बजाय डिस्क से पढ़ने के लिए dd को कैसे मजबूर कर सकता हूं?


2
संभावित नाइटपैकिंग, लेकिन ... dd इसे कैश नहीं करता है। कर्नेल / डिस्क सिस्टम करता है। यही कारण है कि Frostschutz की कमांड (जो dd को नहीं भेजती है) काम करती है।
हेनस

स्पिन करने के लिए प्रतीक्षा करने के बजाय मुझे ड्राइव को जागृत रखने के लिए इसकी आवश्यकता है।
neverMind9

जवाबों:


11

तुम कोशिश कर सकते हो

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

जो सभी प्रकार के कैश को छोड़ देता है।

जानकारी के लिए देखते हैं /usr/src/linux/Documentation/sysctl/vm.txtपर drop_caches

(नोट: यह सवाल व्यस्तबॉक्स डीडी के बारे में था जो आज भी समर्थन नहीं करता है iflag=direct।)


1
बस एक नोट: यह केवल लिनक्स के साथ काम करता है। इसके अलावा, /procफ़ाइल सिस्टम लिनक्स के कुछ एम्बेडेड कॉन्फ़िगरेशन में अक्षम है।

@EvanTeitelman राइट, हालांकि यह यहाँ काम करने लगता है, इसलिए मैं इसे उत्तर देने जा रहा हूँ।
उत्साही

2
मुझे आश्चर्य हुआ कि क्या इसका एक बार प्रभाव है, या चल रहा है। के अनुसार इस प्रभाव एक बार बंद है।
क्रेग मैकक्वीन

यह कैश को गिरा देगा, लेकिन ddबड़ी मात्रा में डेटा स्थानांतरित करने पर उन्हें इस प्रक्रिया में फंसने से रोकने के लिए कुछ भी नहीं करता है ।
Jan Hudec

9

@ Sendmoreinfo के उत्तर के आधार पर:

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

यह रीड-कैश को प्रभावित नहीं करता है।


यह काम करता है, लेकिन क्या यह भी कैश नहीं है कि क्या पढ़ा जा रहा है?
neverMind9

1
सही बात। यही लक्ष्य है।
ओले तांगे

8

प्रत्यक्ष I / O (ओपन मोड O_DIRECT) काम करना चाहिए, लेकिन आपका कर्नेल और / या ddइसका समर्थन नहीं कर सकता है।


4
यह सही उत्तर है: dd if = / dev / डिवाइस iflag = direct bs = 1M; यह रीड-कैश को प्रभावित नहीं करता है।
ओले तांगे

1
@OleTange: आप इसे अपने स्वयं के उत्तर के रूप में पोस्ट क्यों नहीं करते? यह "dd no cache" के लिए Google पर # 1 हिट है, और वास्तविक सही उत्तर कुछ गैर-स्वीकृत उत्तर के लिए एक टिप्पणी में है ...
mic_e

5

Iflag के लिए एक छोटा सा पनपता है = सीधा जवाब; एक प्रगति पट्टी भी प्रदान करें:

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

Iflag /lll के बिना pv रिपोर्ट समाप्त हो गई है और फिर ऐसा लग रहा है कि यह लटका हुआ है; लेकिन डिवाइस पर dd अभी भी कैश पर काम कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.