पूरी तरह से डिस्क पर लिखने के लिए dd कमांड की प्रतीक्षा करें


13

मैं iso फ़ाइल से बूट करने योग्य USB बनाने के लिए dd कमांड का उपयोग कर रहा हूं:

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M

प्रवेश करने के बाद इसे क्षण भर में बाहर निकाल दें और मुझे दें:

915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s

इसलिए यह पृष्ठभूमि में चलने जैसा है क्योंकि मैं देख सकता हूं कि फ्लैश ड्राइव काम कर रही है। आखिरकार यह कॉपी करना बंद कर देगा और मैं ड्राइव को सफलतापूर्वक हटा सकता हूं लेकिन सवाल यह है कि डीडी कमांड को कॉपी खत्म होने का इंतजार क्यों नहीं करना है। यह पृष्ठभूमि में क्यों चलता है? और मैं इसे कैसे प्रतीक्षा कर सकता हूं?


4
क्या आपने कोशिश की है sync?
कोरबा

1
@choroba क्या यह 'सिंक' चलाने के लिए समझ में आता है अगर सिस्टम फ्लैश ड्राइव पर पहले से ही डेटा लिख ​​रहा है?
किरिल इवले

मुझे यकीन नहीं है, बायट syncइंतजार कर सकता है।
चोरोबा

2
ddउदाहरण के लिए कुछ सिंक विकल्प भी हैं conv=fsync। उस ने कहा, मुझे /dev/sd*खुद ड्राइव करने के साथ इसका इस्तेमाल कभी नहीं करना पड़ा । यदि आप सचमुच /dev/sdxमेरे अनुमान का उपयोग करते हैं तो क्या आप /devअब ( रमदिस ) में एक बेकार 959MB फ़ाइल ...
frostschutz

1
@frostschutz मैंने अपने फ्लैश ड्राइव के लिए / sdc का उपयोग किया
Kirill Ivlev

जवाबों:


21

लोकप्रिय धारणा के बावजूद, ddयह एक पूरी तरह से सामान्य आदेश है, यह निम्न स्तर से अधिक catया नहीं है cp। आपकी कमांड डिस्क कैश से पढ़ती है और किसी अन्य कमांड की तरह डिस्क बफ़र्स को लिखती है।

यह सुनिश्चित करने के लिए कि डेटा पूरी तरह से भौतिक मीडिया को लिखा गया है, आपको कॉल करने की आवश्यकता है sync। कमांड syncसभी आउटपुट बफ़र्स को डिस्क (ओं) में फ्लश करता है। जब syncकमांड वापस आती है, तो डेटा पूरी तरह से लिखा गया है।

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M; sync

अधिकांश समय, आपको कॉल करने की आवश्यकता नहीं होती है sync, क्योंकि किसी फ़ाइल सिस्टम को अनमाउंट करना एक ही काम करता है। जब umountकमांड वापस आती है, या जब आपको "इजेक्ट" पर क्लिक करने के बाद एक पुष्टिकरण संदेश मिलता है, तो बफ़र्स को डिस्क पर लिखा गया है। यहां, आप सीधे माउंटेड फाइल सिस्टम के माध्यम से डिस्क पर लिख रहे हैं, इसलिए आपको बफर को स्पष्ट रूप से फ्लश करने की आवश्यकता है।

ध्यान दें कि इसके बजाय dd, आप उपयोग कर सकते हैं tee। इसके दो फायदे हैं: टाइपो के कारण स्रोत और गंतव्य को निष्क्रिय करने का कम जोखिम है, और यह शायद थोड़ा तेज है

<~/Desktop/ubuntu.iso sudo tee /dev/sdx >/dev/null; sync

1
कैसे "बेदखल" या "सुरक्षित रूप से निकालें" बटन / आइकन के बारे में। क्या "सूचना हटाने के लिए" सूचना देने से पहले वे सिंक को कॉल नहीं करेंगे?
user68186

1
आप संभवतः उपयोग करना चाहते हैं sudo tee /dev/sdx >/dev/null, अन्यथा डेटा को कंसोल आउटपुट में लिखे जाने के कारण कॉपी करने की प्रक्रिया अभी भी बहुत धीमी होगी।
लेकेनस्टेयन

1
@ user68186 वे syncकमांड नहीं कहते हैं , लेकिन वे हुड के तहत एक ही काम करते हैं।
गिलेस एसओ- बुराई को रोकना '

5
यह उत्तर गलत है। बिना conv=fdatasync, ddकमांड तब तक खत्म होने का इंतजार नहीं करता है जब तक कि डिस्क पर डेटा नहीं लिखा जाता है, जैसा कि ओपी ने अनुरोध किया है। इसके अलावा, syncकमांड एक सिंक ऑपरेशन को शेड्यूल करता है, लेकिन यह तुरंत वापस आ जाता है; यह डिस्क पर डेटा लिखे जाने तक लौटने का इंतजार नहीं करता है।
vy32

1
@ vy32 आप सही हैं ddकि कैश का इंतजार न करें conv=fdatasyncआदि के बिना, लेकिन गैर-प्राचीन लिनक्स पर आप syncप्रतीक्षा नहीं करने के बारे में गलत हैं । आप देख सकते हैं coreutils ' sync(8)बनाने sync(2)syscallsync(2)मानव पेज कहते हैं, "संस्करण 1.3.20 से पहले लिनक्स आई / ओ लौटने से पहले पूर्ण होने की प्रतीक्षा नहीं किया।" इसलिए sync(8)जब तक डिस्क लेखन को स्वीकार करता है (या एक त्रुटि शुरू हो रहा है) नहीं लौटेगा।
Anon

13

इसे इस्तेमाल करे:

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx conv=fdatasync bs=1m

यह सुनिश्चित करने के लिए विशेष विकल्पों का उपयोग करने के लिए conv=fdatasyncकहता ddहै कि डेटा भौतिक डिवाइस को लिखा गया है।

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