सिंक विकल्प को 'dd' कमांड के साथ क्यों प्रयोग किया जाता है?


13

इस पृष्ठ पर दिए गए निर्देशों के बाद , पृष्ठ ने अंत में एक ddकमांड और एक syncविकल्प दिखाया । कमांड निम्नलिखित है:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M sync

मुझे पता है कि यह क्या है ddऔर कैसे काम करता है, लेकिन मैंने इसके syncसाथ विकल्प के बारे में कभी नहीं सुना या इसका उपयोग नहीं किया है और इसका मैनुअल पेज प्रविष्टि इस तरह है:

sync   pad every input block with NULs to  ibs-size;  when  used  with
       block or unblock, pad with spaces rather than NULs

यह क्या है NULऔर इसे क्यों पेड किया गया है ibs-size, और डेटा ब्लॉक को पेडिंग करने के लिए परेशान क्यों है और कमांड के syncसाथ विकल्प का उपयोग करें dd? इसे सरल और सहज क्यों नहीं रखा?

जब मैं syncकमांड के साथ चलने की कोशिश करता हूं, तो यह उपयुक्त स्थान और मूल्यों के साथ है, जो मुझे निम्न त्रुटि मिलती है:

dd: unrecognized operand ‘sync’
Try 'dd --help' for more information. 

जवाबों:


21

आप कमांड को गलत बता रहे हैं। आईटी इस:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M 
sync

syncयहाँ एक अलग कमांड है। देखें man 1 sync:

NAME
       sync - flush file system buffers

SYNOPSIS
       sync [OPTION]

DESCRIPTION
       Force changed blocks to disk, update the super block.

जाहिर है कि यह कैशिंग के बारे में सोचने के बाद इसका उपयोग क्यों किया जाता है।

के रूप में ddविकल्प आप पढ़ सकते हैं, इसके लिए एक मूल्य है विकल्प :conv

Each CONV symbol may be:
   ascii  from EBCDIC to ASCII
   ...
   sync   pad every input block with NULs  to  ibs-size;  when  used  with
          block or unblock, pad with spaces rather than NULs

यदि इसका उपयोग किया गया था (जो यह नहीं है), तो इसका उपयोग इस प्रकार किया जाएगा:

dd ... conv=sync

3
अच्छा जवाब, बहुत विस्तृत। अच्छा लगा कि आपने dd ... conv=syncतर्क का भी वर्णन किया ।
बाइट कमांडर

उन्हें आप ताना मत देना! ;-) अच्छा जवाब: आपने उस समस्या को देखा, जिसे मैंने देखा भी नहीं था। > :-) +1
Fabby

1
इसके अलावा conv=syncविकल्प के विवरण से यह काफी स्पष्ट लगता है कि इसका उपयोग क्यों नहीं किया जाता है। सबसे अच्छी बात यह है कि कुछ भी नहीं होगा, कम से कम यह नकल के दौरान छवि को भ्रष्ट करेगा।
कैस्परल्ड

5
वास्तव में निर्देशों को dd विकल्प के लिए कॉल करना चाहिए oflag=fsync(जो आउटपुट dd लिखा है) एक syncकमांड के बजाय (जो सिस्टम पर सब कुछ फ्लश करता है।
psusi

यह उत्तर भ्रामक है। Dd के साथ, syncदोनों के लिए एक तर्क है convऔर iflagया oflagविकल्प।
Dan Loewenherz

3

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

Dd इसे तब तक दोहराता रहेगा जब तक कि निर्दिष्ट गणना पूरी नहीं हो जाती है, या यह इनपुट पर ईओएफ, या इनपुट या आउटपुट पर त्रुटि देखता है। जब यह पूरा हो जाता है, तो dd इसे पढ़े और लिखे गए पूर्ण और आंशिक रिकॉर्ड की संख्या की रिपोर्ट करता है।

यह व्यवहार किसी फ़ाइल सिस्टम या टीसीपी नेटवर्क कनेक्शन पर साधारण फ़ाइल की प्रतिलिपि बनाने के लिए ठीक है, क्योंकि इसे बाइट्स की एक धारा माना जाता है। लेकिन अन्य फाइलसिस्टम ऑब्जेक्ट्स, जैसे कि कच्ची डीवीडी और चुंबकीय टेप, लिखने के आकार की आवश्यकता होती है जो कुछ सीमाओं के भीतर होते हैं और कुछ राशि (जैसे 512 या 2048 बाइट्स) का एक गोल एकाधिक होते हैं। उदाहरण के लिए, यदि आपके पास एक डिस्क छवि है जो 63 512-बाइट सेक्टरों के 255 ट्रैक है, और एक टेप लिखना चाहता है जिसमें 1024 बाइट्स के ब्लॉक आकार की आवश्यकता होती है, तो आपको कुछ ऐसा करने की आवश्यकता होगी

dd if=disk.img of=/dev/rmt0 bs=1k conv=sync

यह सुनिश्चित करने के लिए कि dd आखिर में 512-बाइट ब्लॉक को लिखने की कोशिश नहीं करता है। अंत में छोटे ब्लॉक को शून्य या रिक्त स्थान के साथ गद्देदार किया जाएगा। जीरो के साथ पैडिंग एक सुरक्षित, आम पसंद है। Dd से पैड के लिए रिक्त स्थान के लिए विकल्प एक अलग स्थिति में उपयोगी है - एक फाइल को परिवर्तित करना जिसमें चर-लंबाई की लाइनें निश्चित लंबाई वाली लाइनों के साथ एक होती हैं।


0

मैंने पाया है कि लिनक्स सिस्टम, dd नहीं, बफ़र्स को कैश करता है। इसलिए, जब dd कमांड पूरा हो गया है, मैं के रूप में सिंक चलाते हैं

sudo dd if=my.downloaded.iso of=/dev/sd(?) bs=1M && sync

मैंने बफर फ्लशिंग के कारण किसी भी आंतरिक dd विकल्प का उपयोग नहीं किया है। आमतौर पर यद्यपि, जब मैं वितरण का USB संस्करण बना रहा हूं, तो मैं कंप्यूटर पर केवल एक ही हूं, इसलिए मेरे पास मेरी पोस्टेड कमांड को नुकसान पहुंचाने के बारे में कोई योग्यता नहीं है। चूंकि मैं सिंक को && के रूप में चलाता हूं, इसलिए सिंक sudo अधिकारों के साथ किया जाता है और मुझे यकीन है कि मेरे द्वारा बनाया गया USB पूर्ण है।


0

आप syncआउटपुट के लिए विकल्प का उपयोग कर सकते हैं , जो प्रतीक ddद्वारा कॉमैंड में शामिल है oflag:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M oflag=sync
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.