Dd कमांड में 'bs', 'count' और 'seek' के बीच क्या अंतर है?


24

मैं कई गाइड और मंच पदों कैसे उपयोग करने के लिए का वर्णन पढ़ा है dd, लेकिन एक बात मैंने देखा है कि लोगों को हमेशा के लिए अलग मान का उपयोग करें bs=, count=और seek=स्विच।

कृपया कोई यह बता सकता है कि ये स्विच वास्तव में क्या करते हैं (मैन पेज बहुत विस्तृत नहीं है), और समझाएं कि विभिन्न कार्यों के लिए सबसे अच्छी सेटिंग्स क्या हैं, जैसे / देव / यादृच्छिक या / dev / शून्य, और ओवरराइटिंग से फाइलें बनाना। विभाजन और बाहरी ड्राइव।


जवाबों:


27

मैं वास्तव में नहीं जानता कि यह कैसे समझा जा सकता है जो मैनपेज से बेहतर है।

bs=bs=1Mblockize को सेट करता है, उदाहरण के लिए 1MiB blockize होगा।

count=केवल इस ब्लॉक की संख्या की प्रतिलिपि बनाता है (डिफ़ॉल्ट dd के लिए हमेशा के लिए जा रहा है या जब तक इनपुट समाप्त नहीं हो जाता है)। आदर्श रूप से ब्लॉक bs=आकार के होते हैं, लेकिन अधूरे पढ़े जा सकते हैं, इसलिए यदि आप count=किसी विशिष्ट डेटा ( count*bs) को कॉपी करने के लिए उपयोग करते हैं, तो आपको आपूर्ति भी करनी चाहिए iflag=fullblock

seek= आउटपुट डिवाइस की बहुत शुरुआत के लिए लिखने के बजाय आउटपुट में इस ब्लॉक की संख्या की तलाश करता है।

इसलिए, उदाहरण के लिए, यह 1MiB y\nआउटपुटफाइल की स्थिति 8MiB के लायक है । तो कुल filesize 9MiB होगा।

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

चूंकि आप /dev/randomविभाजन का उल्लेख करते हैं और ओवरराइटिंग करते हैं ... यह हमेशा के लिए /dev/random(साथ ही साथ /dev/urandom) बहुत धीमी हो जाएगी। आप shred -v -n 1इसके बजाय बस का उपयोग कर सकते हैं , यह तेज है और आमतौर पर कहीं भी उपलब्ध है।


21

ठीक है, आपने कहा कि मैन पेज विस्तृत नहीं हैं, इसलिए मैं समझाऊंगा कि वे एक चलते हुए आदमी के बारे में रूपकों को समझने में आसान के साथ क्या मतलब रखते हैं (यह नाम से जाता है dd):

   bs=BYTES
          read and write up to BYTES bytes at a time

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

   count=N
          copy only N input blocks

यह निर्धारित करेगा कि वह कितनी मात्रा में बक्से ले जाएगा। इस संदर्भ में बक्से डिस्क पर ब्लॉक हैं । आप उसे 5 बक्से को स्थानांतरित करने के लिए कहें, वह केवल 5 बक्से ले जाता है, भले ही 5 बक्से से अधिक हो (यदि 5 बक्से से कम हैं, तो वह एक फूलदान ले जाएगा जो इसे जोड़ने के लिए बक्से के अलावा मिला)। यदि आप केवल 5 ddको बताते हैं count, और इसे कहीं लिखते हैं, तो वह पहले 5 ब्लॉकों की प्रतिलिपि बनाता है जिन्हें वह देखता है और उन्हें लिखता है जहां आप चाहते हैं।

   seek=N skip N obs-sized blocks at start of output

आदमी सामान्य रूप से लोड को छोड़ने के लिए पहली उपलब्ध जगह पाता है, यह आम तौर पर शुरुआत (डिस्क के) पर होता है, और अंत तक भरना जारी रखता है। खैर, इसके साथ आप ddआगे शुरू करने के लिए कहते हैं, हॉल के बजाय कहें कि अंदर के एक कमरे में शुरू करें। यह सिर्फ शुरुआती ब्लॉकों को "स्किप" करता है।

अब, आप जो कर रहे हैं, उसके आधार पर, आपको स्रोत और गंतव्य के आधार पर विभिन्न संयोजनों की आवश्यकता होगी, साथ ही प्रारूप के साथ उन्हें पढ़ा और लिखा जाएगा। मैं आपको उन्हें अलग करने के लिए खोज करने की सलाह देता हूं।


"वह इसे जोड़ने के लिए बक्से के अलावा एक फूलदान ले जाएगा"। यह रूपक किस लिए खड़ा है?
इनि

1
@ यदि ऐसा है कि यदि कोई निकटवर्ती ब्लॉक जो कि पढ़ने के लिए नहीं है, तो dd इसे पढ़ेगा और इसे स्थानांतरित भी करेगा। एक फूलदान एक बॉक्स नहीं है, फिर भी dd इसे स्थानांतरित करता है।
बृहम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.