डीडी (यूनिक्स)

डीडी यूनिक्स, प्लान 9, इन्फर्नो (ऑपरेटिंग सिस्टम), और यूनिक्स जैसे ऑपरेटिंग सिस्टम और उससे आगे के लिए एक कमांड लाइन उपयोगिता है, जिसका प्राथमिक उद्देश्य फ़ाइलों को परिवर्तित और कॉपी करना है। यूनिक्स पर, हार्डवेयर के लिए डिवाइस ड्राइवर (जैसे कि हार्ड डिस्क ड्राइव) और विशेष डिवाइस फ़ाइलें (जैसे/देव/शून्य और/देव/यादृच्छिक) फ़ाइल सिस्टम में सामान्य फ़ाइलों की तरह दिखाई देती हैं; डीडी इन फ़ाइलों को पढ़ या लिख ​​भी सकते हैं, बशर्ते कि उनके संबंधित ड्राइवर में फलन कार्यान्वित किया गया हो। परिणामस्वरूप, डीडी हार्ड ड्राइव के प्रारंभिक क्षेत्र का बैकअप लेने और एक निश्चित मात्रा में यादृच्छिक डेटा प्राप्त करने जैसे कार्यों के लिए उपयोग किया जा सकता है। वह डीडी प्रोग्राम डेटा पर रूपांतरण भी कर सकता है क्योंकि इसे कॉपी किया जाता है, जिसमें बाइट क्रम स्वैपिंग और ASCII और EBCDIC टेक्स्ट एन्कोडिंग से रूपांतरण सम्मिलित है।

इतिहास
डीडी नाम आईबीएम की नौकरी नियंत्रण भाषा (JCL) में पाये जाने वाले डीडी कथन का एक संकेत है, जिसमें यह डेटा डेफिनिशन का संक्षिप्त नाम है। कमांड का वाक्य विश्लेषण अन्य यूनिक्स कमांड्स की तुलना में JCL स्टेटमेंट से अधिक मिलता-जुलता है, इतना अधिक कि एरिक एस रेमंड कहते हैं, "इंटरफ़ेस डिज़ाइन स्पष्ट रूप से एक मज़ाक था"। कमांड-लाइन विकल्प शैली का उपयोग करने के लिए योजना 9 के डीडी कमांड में इंटरफ़ेस को फिर से डिज़ाइन किया गया है।  इसकी ड्राइव-मिटाने की क्षमताओं के कारण इसे कभी-कभी मजाक में डिस्क डिस्ट्रॉयर भी कहा जाता है।

मूल रूप से एएससीआईआई और ईबीसीडीआईसी के बीच परिवर्तित करने का संकल्प है, dd पहली बार संस्करण 5 यूनिक्स में दिखाई दिया।  डीडी }} कमांड 1987 के एक्स/ओपन पोर्टेबिलिटी गाइड इश्यू 2 के बाद से निर्दिष्ट है। यह आईईईई स्टडी 1003.1-2008 (पॉज़िक्स) द्वारा विरासत में मिला है, जो एकल यूनिक्स विशिष्टता का हिस्सा है।

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

उपयोग
डीडी का कमांड लाइन वाक्य विश्लेषण कई अन्य यूनिक्स कार्यक्रमों से भिन्न है। यह अधिक मानक -option value या --option=value स्वरूपों के बजाय इसके कमांड-लाइन विकल्पों के लिएवाक्यविन्यास विकल्प = मान का उपयोग करता है। डिफ़ॉल्ट रूप से, डीडी स्टडिन से पढ़ता है और मानक बाहर को लिखता है, लेकिन इन्हें if (इनपुट फ़ाइल) और (आउटपुट फ़ाइल) विकल्पों का उपयोग करके बदला जा सकता है।

डीडी की कुछ विशेषताएं कंप्यूटर सिस्टम क्षमताओं पर निर्भर करती हैं, जैसे डीडी की प्रत्यक्ष मेमोरी एक्सेस के लिए एक विकल्प को लागू करने की क्षमता। चल रही डीडी प्रक्रिया में SIGINFO सिग्नल (या Linux पर USR1 सिग्नल) भेजने से यह एक बार मानक त्रुटि के लिए I/O आँकड़े प्रिंट करता है और फिर कॉपी करना जारी रखता है। डीडी कीबोर्ड से मानक इनपुट पढ़ सकता है। जब एंड-ऑफ-फाइल (ईओएफ) पहुंच जाता है, तो डीडी बाहर निकल जाएगा। साइगविन और ईओएफ सॉफ्टवेयर द्वारा निर्धारित किए जाते हैं। उदाहरण के लिए, विंडोज़ में पोर्ट किए गए यूनिक्स टूल्स ईओएफ के अनुसार भिन्न होते हैं: सिगविन Ctrl (सामान्य यूनिक्स ईओएफ) का उपयोग करता है और एमकेएस टूलकिट   (सामान्य विंडोज ईओएफ) का उपयोग करता है।

डीडी मंगलाचरण के गैर-मानकीकृत भाग कार्यान्वयन के बीच भिन्न होते हैं।

आउटपुट संदेश
पूरा होने पर, डीडी डेटा ट्रांसफर के आँकड़ों के बारे में stderr स्ट्रीम को प्रिंट करता है। प्रारूप POSIX में मानकीकृत है। जीएनयू डीडी के लिए मानकीकृत पेज इस प्रारूप का वर्णन नहीं करता है, लेकिन बीएसडी मानकीकृत करता है।

प्रत्येक "रिकॉर्ड्स इन" और "रिकॉर्ड्स आउट" लाइनें स्थानांतरित किए गए पूर्ण ब्लॉकों की संख्या + आंशिक ब्लॉकों की संख्या, उदा। क्योंकि पूरा ब्लॉक पढ़ने से पहले भौतिक माध्यम समाप्त हो गया था, या एक भौतिक त्रुटि ने पूरे ब्लॉक को पढ़ने से रोक दिया था।

ब्लॉक आकार
एक ब्लॉक एक इकाई है जो बाइटस की संख्या को मापता है जो एक समय में पढ़ा, लिखा या परिवर्तित किया जाता है। कमांड-लाइन विकल्प आउटपुट/राइटिंग (obs) की तुलना में इनपुट/रीडिंग (ibs) के लिए एक अलग ब्लॉक आकार निर्दिष्ट कर सकते हैं, चूंकि ब्लॉक आकार (bs) विकल्प ibs और obs दोनों को ओवरराइड करेगा। इनपुट और आउटपुट ब्लॉक आकार दोनों के लिए डिफ़ॉल्ट मान 512 बाइट्स (डिस्क का पारंपरिक ब्लॉक आकार, और "एक ब्लॉक" का POSIX-अनिवार्य आकार) है। कॉपी करने के लिए काउंट विकल्प को ब्लॉक में मापा जाता है, जैसे कि पढ़ने के लिए skip काउंट और लिखने के लिए seek काउंट दोनों हैं। रूपांतरण संचालन "रूपांतरण ब्लॉक आकार" (cbs) से भी प्रभावित होते हैं।

ब्लॉक आकार विकल्पों के लिए प्रदान किया गया मान बाइट्स की दशमलव (आधार 10) पूर्णांक संख्या के रूप में व्याख्या किया गया है। इसमें यह इंगित करने के लिए प्रत्यय भी हो सकते हैं कि ब्लॉक आकार बाइट्स की तुलना में बड़ी इकाइयों की एक पूर्णांक संख्या है। POSIX केवल 512 के लिए प्रत्यय b (ब्लॉक) और 1024 के लिए k (किबिबाइट्स) निर्दिष्ट करता है।  टेबिबाइट्स, एक्सबिबाइट्स, पेबिबाइट्स, ज़ेबिबाइट्स और योबिबाइट्स के लिए, जबकि जीएनयू समान इकाइयों के लिए एम(mebibytes) और जीगिबिबाइटस) का उपयोग करता है, केबी, एमबी और जीबी के साथ उनके एसआई इकाई समकक्षों (किलोबाइट्स) के लिए उपयोग किया जाता है।  उदाहरण के लिए, GNU डीडी के लिए, bs=16M 16 मेबिबाइट्स (16777216 बाइट्स) के ब्लॉक आकार को दर्शाता  है और bs=3kB 3000 बाइट्स निर्दिष्ट करता है।

इसके अतिरिक्त, कुछ कार्यान्वयन एक्स वर्ण को ब्लॉक आकार और गिनती पैरामीटर दोनों के लिए गुणा ऑपरेटर के रूप में समझते हैं। उदाहरण के लिए, bs=2x80x18b की व्याख्या 2 × 80 × 18 × 512 = $1,474,560 बाइट्स$ के रूप में की जाती है, जो 1440 किबा फ्लॉपी डिस्कका यथार्थ आकार है। यह पॉज़िक्स में आवश्यक है, लेकिन जीएनयू इसका समर्थन नहीं करता है।  परिणामस्वरूप,   के POSIX शेल अंकगणितीय वाक्य विश्लेषण का उपयोग करना अधिक पोर्टेबल है।

डीडी कमांड को कॉपी करने के प्रदर्शन पर ब्लॉक आकार का प्रभाव पड़ता है। कई छोटे पढ़ना या लिखना अधिकांश कम बड़े पढ़ने की तुलना में धीमा होता है। बड़े ब्लॉकों का उपयोग करने के लिए अधिक रैम की आवश्यकता होती है और त्रुटि पुनर्प्राप्ति को जटिल बना सकता है। जब डीडी का उपयोग चर-ब्लॉक-आकार के उपकरणों जैसे टेप ड्राइव या नेटवर्क के साथ किया जाता है, तो ब्लॉक आकार उपयोग किए गए संचार प्रोटोकॉल के आधार पर टेप रिकॉर्ड आकार या नेटवर्क पैकेट आकार निर्धारित कर सकता है।

== उपयोग ==

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

नीचे दिए गए उदाहरण मुख्य रूप से ब्लॉक आकार तर्क में जीएनयू डीडी के उपयोग को मानते हैं। उन्हें पोर्टेबल बनाने के लिए, उदा। bs=64M शेल अंकगणितीय अभिव्यक्ति के साथ bs=$((64*1024*1024)) या bs=$((64 << 20)) (थोड़ा बदलाव के साथ समतुल्य लिखा गया)।

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

noerror विकल्प का अर्थ है कि यदि कोई त्रुटि है तो चलते रहना, जबकि sync विकल्प के कारण आउटपुट ब्लॉक पैडेड हो जाते हैं।

इन-प्लेस संशोधन
डीडी डेटा को स्थान में संशोधित कर सकते हैं। उदाहरण के लिए, यह फ़ाइल के पहले 512 बाइट्स को शून्य बाइट्स के साथ ओवरराइट करता है:

dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc

notrunc }} रूपांतरण विकल्प का अर्थ है आउटपुट फ़ाइल को छोटा न करें - अर्थात, यदि आउटपुट फ़ाइल पहले से मौजूद है, तो केवल निर्दिष्ट बाइट्स को बदलें और शेष आउटपुट फ़ाइल को अकेला छोड़ दें। इस विकल्प के बिना, dd 512 बाइट लंबी आउटपुट फाइल बनाएगा।

मास्टर बूट दस्तावेज़ बैकअप और पुनर्स्थापित करें
ऊपर दिए गए उदाहरण का उपयोग डिवाइस के किसी भी क्षेत्र को फ़ाइल में बैक अप लेने और पुनर्स्थापित करने के लिए भी किया जा सकता है, जैसे मास्टर बूट रिकॉर्ड।

फ़्लॉपी डिस्क के पहले दो सेक्टरों को डुप्लिकेट करने के लिए: dd if=/dev/fd0 of=MBRboot.img bs=512 count=2

डिस्क वाइप
सुरक्षा कारणों से, कभी-कभी किसी छोड़े गए डिवाइस का डिस्क वाइप करना आवश्यक होता है। यह यूनिक्स विशेष फाइलों से डेटा ट्रांसफर द्वारा प्राप्त किया जा सकता है।


 * डिस्क पर शून्य लिखने के लिए, . का प्रयोग करें
 * किसी डिस्क पर यादृच्छिक डेटा लिखने के लिए, प्रयोग करें

ऊपर दिए गए डेटा संशोधन उदाहरण की तुलना में, notrunc रूपांतरण विकल्प की आवश्यकता नहीं है क्योंकि डीडी की आउटपुट फ़ाइल एक ब्लॉक डिवाइस होने पर इसका कोई प्रभाव नहीं पड़ता है।

}} विकल्प डीडी को एक बार में 16 मीबीबाइट पढ़ने और लिखने देता है। आधुनिक प्रणालियों के लिए, एक बड़ा ब्लॉक आकार तेज़ हो सकता है। ध्यान दें कि ड्राइव को यादृच्छिक डेटा से भरने में ड्राइव को शून्य करने से अधिक समय लग सकता है, क्योंकि यादृच्छिक डेटा सीपीयू द्वारा बनाया जाना चाहिए, जबकि शून्य बनाना बहुत तेज़ है। आधुनिक हार्ड-डिस्क ड्राइव पर, ड्राइव को शून्य करने से उसमें मौजूद अधिकांश डेटा स्थायी रूप से अपरिवर्तनीय हो जाएगा। चूँकि, अन्य प्रकार के ड्राइव जैसे फ्लैश मेमोरी के साथ, डेटा अवशेष द्वारा अभी भी बहुत डेटा पुनर्प्राप्त किया जा सकता है।

आधुनिक हार्ड डिस्क ड्राइव में एक सुरक्षित मिटाना कमांड होता है जिसे ड्राइव के हर सुलभ और दुर्गम हिस्से को स्थायी रूप से और सुरक्षित रूप से मिटाने के लिए डिज़ाइन किया गया है। यह कुछ सॉलिड-स्टेट ड्राइव (फ्लैश ड्राइव) के लिए भी काम कर सकता है। 2017 तक, यह USB फ्लैश ड्राइव पर और न ही सुरक्षित डिजिटल फ्लैश मेमोरी पर काम करता है। उपलब्ध होने पर, यह डीडी का उपयोग करने की तुलना में तेज़ और अधिक सुरक्षित दोनों है। लिनक्स मशीनों पर यह hdparm कमांड के माध्यम से पहुँचा जा सकता है --security-erase-enhanced विकल्प।

टुकड़ा (यूनिक्स) प्रोग्राम एकाधिक अधिलेखन प्रदान करता है, साथ ही व्यक्तिगत फ़ाइलों को अधिक सुरक्षित विलोपन प्रदान करता है।

डेटा रिकवरी
डेटा रिकवरी में एक ड्राइव से पढ़ना सम्मिलित है जिसमें कुछ हिस्से संभावित रूप से दुर्गम हैं। dd अपनी लचीली स्किपिंग (seek) और अन्य निम्न-स्तरीय सेटिंग्स के साथ इस नौकरी के लिए उपयुक्त है। चूँकि, वैनिला dd उपयोग करने के लिए अनाड़ी है क्योंकि उपयोगकर्ता को त्रुटि संदेशों को पढ़ना पड़ता है और मैन्युअल रूप से उन क्षेत्रों की गणना करनी होती है जिन्हें पढ़ा जा सकता है। एकल ब्लॉक आकार भी रिकवरी की ग्रैन्यूरिटी को सीमित करता है, क्योंकि एक ट्रेड-ऑफ करना पड़ता है: या तो अधिक डेटा रिकवर करने के लिए छोटे ब्लॉक का उपयोग करें या गति के लिए बड़े ब्लॉक का उपयोग करें।

dd_rescue नामक एक C कार्यक्रम अक्टूबर 1999 में लिखा गया था। इसने dd की रूपांतरण कार्यक्षमता को दूर किया, और दुविधा से निपटने के लिए दो ब्लॉक आकारों का समर्थन किया। यदि बड़े आकार का उपयोग करने वाला पठन विफल हो जाता है, तो जितना संभव हो उतना डेटा एकत्र करने के लिए यह छोटे आकार में वापस आ जाता है। यह पीछे की ओर भी दौड़ सकता है। 2003 में, एक dd_rhelp स्क्रिप्ट को dd_rescue का उपयोग करने की प्रक्रिया को स्वचालित करने के लिए लिखा गया था, यह ट्रैक करते हुए कि किन क्षेत्रों को स्वयं पढ़ा गया है।

2004 में, GNU ने dd से असंबंधित एक अलग उपयोगिता लिखी, जिसे ddrescue कहा जाता है। इसमें एक अधिक परिष्कृत गतिशील ब्लॉक-साइज एल्गोरिदम है और आंतरिक रूप से जो पढ़ा गया है उसका ट्रैक रखता है। dd_rescue और dd_rhelp दोनों के लेखक इसे अपने कार्यान्वयन से बेहतर मानते हैं। नए GNU प्रोग्राम को पुरानी स्क्रिप्ट से अलग करने में सहायता के लिए, कभी-कभी GNU के ddrescue के लिए वैकल्पिक नामों का उपयोग किया जाता है, जिसमें addrescue (freecode.com और Freshmeat.net पर नाम), gddrescue (डेबियन पैकेज नाम), और gnu_ddrescue (ओपनएसयूएसई पैकेज नाम) सम्मिलित हैं।

एक अन्य ओपन-सोर्स प्रोग्राम जिसे savehd7 कहा जाता है एक परिष्कृत कलन विधि का उपयोग करता है, लेकिन इसके लिए Seed7 की अपनी प्रोग्रामिंग-भाषा दुभाषिया की स्थापना की भी आवश्यकता होती है।

बेंचमार्किंग ड्राइव प्रदर्शन
ड्राइव बेंचमार्क टेस्ट करने और अनुक्रमिक (और सामान्यतः सिंगल-थ्रेडेड) सिस्टम का विश्लेषण करने के लिए 1024-बाइट ब्लॉक के लिए प्रदर्शन पढ़ें और लिखें:
 * प्रदर्शन लिखें:
 * प्रदर्शन पढ़ें:

यादृच्छिक डेटा के साथ एक फ़ाइल बनाना
कर्नेल रैंडम ड्राइवर का उपयोग करके 100 रैंडम बाइट्स की फ़ाइल बनाने के लिए: dd if=/dev/urandom of=myrandom bs=100 count=1

फ़ाइल को अपर केस में कनवर्ट करना
फ़ाइल को अपरकेस में बदलने के लिए: dd if=filename of=filename1 conv=ucase,notrunc

प्रगति सूचक
मुख्य रूप से फ़िल्टर के रूप में डिज़ाइन किया गया प्रोग्राम होने पर, dd सामान्यतः कोई प्रगति संकेत प्रदान नहीं करता है। इसे भेजकर इसे दूर किया जा सकता हैचल रही GNU dd प्रक्रिया (INFO on BSD सिस्टम) को USR1 सिग्नल भेजकर इसे दूर किया जा सकता है, जिसके परिणामस्वरूप dd स्थानांतरित ब्लॉकों की वर्तमान संख्या को प्रिंट करता है।।

जब तक dd-pid को dd की प्रक्रिया-आईडी से बदल दिया जाता है, तब तक स्थानांतरण समाप्त होने तक प्रत्येक 10 सेकंड में निम्न वन-लाइनर प्रगति के निरंतर आउटपुट का परिणाम देता है: while kill -USR1 dd-pid ; do sleep 10 ; done जीएनयू के नए संस्करण dd का समर्थन विकल्प, जो एसटीडीआरआर को अंतरण आँकड़ों की आवधिक छपाई को सक्षम बनाता है।

डीसीएफएलडीडी
dcfldd जीएनयू dd का एक कांटा है जो निक हार्बर द्वारा विकसित एक उन्नत संस्करण है, जो उस समय संयुक्त राज्य अमेरिका के रक्षा कंप्यूटर फोरेंसिक प्रयोगशाला विभाग के लिए काम कर रहा था।  की तुलना में dd, dcfldd एक से अधिक आउटपुट फ़ाइल की अनुमति देता है, एक साथ कई चेकसम गणनाओं का समर्थन करता है, फ़ाइल मिलान के लिए एक सत्यापन मोड प्रदान करता है, और एक ऑपरेशन की प्रतिशत प्रगति प्रदर्शित कर सकता है। आखिरी रिलीज 2021 में हुई थी।

dc3dd
dc3dd युनाइटेड स्टेट्स रक्षा साइबर अपराध केंद्र विभाग (DC3) का एक और उन्नत GNU dd है। इसे dcfldd की निरंतरता के रूप में देखा जा सकता है, जब भी GNU अपस्ट्रीम को अपडेट किया जाता है, अपडेट करने के एक घोषित उद्देश्य के साथ। इसकी आखिरी रिलीज 2018 में हुई थी।

यह भी देखें

 * बैकअप
 * डिस्क क्लोनिंग
 * डिस्क कॉपी
 * डिस्क छवि
 * .img (फ़ाइल नाम एक्सटेंशन)
 * यूनिक्स कमांड की सूची
 * ddrescue एक GNU संस्करण जो दूषित फ़ाइलों से डेटा कॉपी करता है

बाहरी संबंध

 * dd: manual page from the GNU Core Utilities.
 * dd for Windows.
 * savehd7 – save a potentially damaged harddisk partition
 * Softpanorama dd page.
 * DD at Linux Questions Wiki.
 * Forensics (DD) Dcfldd
 * ddpt – a variant specialized in files that are block devices
 * sg_dd – Linux specialized variant for devices that use the SCSI command set
 * DD at Linux Questions Wiki.
 * Forensics (DD) Dcfldd
 * ddpt – a variant specialized in files that are block devices
 * sg_dd – Linux specialized variant for devices that use the SCSI command set