बूट करने योग्य लिनक्स यूएसबी स्टिक बनाते समय सिंक इतना महत्वपूर्ण क्यों है?


15

आर्क लिनक्स विकी से: https://wiki.archlinux.org/index.php/USB_flash_installation_bia

# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

[...] USB ड्राइव खींचने से पहले सिंक को पूरा करने से चूकें।

मैं जानना चाहता हूँ

  • यह क्या करता है?
  • यदि छोड़ दिया जाए तो क्या परिणाम होते हैं?

टिप्पणियाँ

ddवैकल्पिक के साथ प्रयुक्त कमांड status=progress:

tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync

या pvप्रगति के लिए उपयोग कर रहा है

tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync

जवाबों:


19

ddजब यह, एक डिवाइस के लिए लिखते हैं तो डेटा का कुछ हिस्सा हो सकता है अभी तक के लिए नहीं लिखा जा गिरी डिस्क कैश बाईपास नहीं है USBपर छड़ी ddपूरा होने। यदि आप USBउस समय अपनी छड़ी को अनप्लग करते हैं, तो छड़ी पर मौजूद सामग्री USBअसंगत होगी। इस प्रकार, आपका सिस्टम इस USBस्टिक से बूट करने में विफल हो सकता है ।

Sync डिवाइस में किसी भी स्थिर डेटा को फ्लश करता है।

लागू करने के बजाय syncआप fdatasync ddरूपांतरण विकल्प का उपयोग कर सकते हैं :

fdatasync

परिष्करण से पहले शारीरिक रूप से आउटपुट फ़ाइल डेटा लिखें

आपके मामले में, कमांड होगी:

tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync

conv=fdatasyncबनाता है ddप्रभावी रूप से फोन fdatasync()बस से पहले हस्तांतरण के अंत में सिस्टम कॉल ddबाहर निकलता है (मैं के साथ इस जाँच ddके सूत्रों का कहना है)।

यह पुष्टि करता है कि ddजब तक स्पष्ट रूप से ऐसा करने का निर्देश नहीं दिया जाता है तब तक कैश को बाईपास नहीं किया जाएगा और न ही फ्लश किया जाएगा।


आपके योगदान के लिए धन्यवाद, हालांकि मुझे नहीं लगता है कि यह कथन सही है हूँ गिरी डिस्क कैश जब यह एक डिवाइस के लिए लिखते हैं बाईपास नहीं है । फ़ाइल में लिखते समय (कर्नेल की फ़ाइल सिस्टम परत के ऊपर), चीजें कैश की जाती हैं। हालांकि, मैं उपकरणों के लेखन के बारे में चिंतित हूं। कृपया उस कथन के लिए एक स्रोत प्रदान करें यदि आप कर सकते हैं, क्योंकि वह इस प्रश्न का लिंचपिन है। यदि यह सच है, तो यह एक --डिवाइस ऑपरेशन के बाद चलने का एक वैध कारण प्रदान करेगा । ddsyncdd
जोनाथन कोमार

हाँ, यह कैश्ड है। कैशिंग कर्नेल के ब्लॉक डिवाइस इन्फ्रास्ट्रक्चर के अंदर होता है। फ़ाइल कार्रवाई ही कैश नहीं है। अंतर्निहित ब्लॉक डिवाइस इंटरफ़ेस कैशिंग करता है। स्रोत: lxr.free-electrons.com/source/block/blk-flush.c
सर्ज

@ macmadness86 अपडेटेड उत्तर देखें
सर्ज

7
मैं उपयोग करने से पहले पीड़ित हूं oflag=sync, इसलिए प्रगति वास्तविक हस्तांतरण की गति को आउटपुट करती है और कैश नहीं किया गया है (इसलिए एक दूसरे 100 एमबी / एस के बजाय एक स्थिर 10 एमबी / एस और फिर स्टाल के 10 सेकंड)।
बार्ट पोलोट

ब्लॉक डिवाइस पर लिखना VFS को पूरी तरह से बायपास करता है। दूसरे शब्दों में: फ़ाइल को लिखने से कर्नेल को कैश किया जा सकता है (और यह आमतौर पर है) लेकिन डिवाइस पर लिखना कर्नेल द्वारा कभी भी कैश नहीं किया जाता (और यह नहीं हो सकता)।
एरिक

0

सिंक (1) मैनुअल पेज से: "सिंक - कैश्ड सिंक करें लगातार स्टोरेज को लिखता है"। मूल रूप syncसे यह सुनिश्चित करता है कि आपके सभी डेटा को कैश से छड़ी पर लिखा गया है।


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