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

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

इतिहास
नाम dd आईबीएम की नौकरी नियंत्रण भाषा (JCL) में पाया जाने वाला जॉब कंट्रोल लैंग्वेज#इन-स्ट्रीम इनपुट का संकेत है, जिसमें यह डेटा डेफिनिशन का संक्षिप्त नाम है। कमांड का सिंटैक्स अन्य यूनिक्स कमांड्स की तुलना में JCL स्टेटमेंट से अधिक मिलता-जुलता है, इतना अधिक कि एरिक एस रेमंड का कहना है कि इंटरफ़ेस डिज़ाइन स्पष्ट रूप से एक मज़ाक था। कमांड-लाइन विकल्प शैली का उपयोग करने के लिए बेल लैब्स के dd कमांड से योजना 9 में इंटरफ़ेस को फिर से डिज़ाइन किया गया है।  इसकी ड्राइव-मिटाने की क्षमताओं के कारण इसे कभी-कभी मजाक में डिस्क डिस्ट्रॉयर भी कहा जाता है। मूल रूप से एएससीआईआई और ईबीसीडीआईसी के बीच परिवर्तित करने का इरादा है, dd पहली बार संस्करण 5 यूनिक्स में दिखाई दिया।  dd }} कमांड 1987 के एक्स/ओपन पोर्टेबिलिटी गाइड इश्यू 2 के बाद से निर्दिष्ट है। यह आईईईई स्टडी 1003.1-2008 (पॉज़िक्स) द्वारा विरासत में मिला है, जो एकल यूनिक्स विशिष्टता का हिस्सा है। का संस्करण  GNU coreutils में बंडल पॉल रुबिन, डेविड मैकेंज़ी और स्टुअर्ट केम्प द्वारा लिखा गया था। सामान्य GNU यूनिक्स जैसी उपयोगिताओं के मूल निवासी (कंप्यूटिंग) Windows API में porting के UnxUtils संग्रह के भाग के रूप में कमांड Microsoft Windows के लिए एक अलग पैकेज के रूप में उपलब्ध है।

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

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

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

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

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

ब्लॉक आकार
एक ब्लॉक (डेटा स्टोरेज) एक इकाई है जो एक बार में पढ़े, लिखे या परिवर्तित बाइट्स की संख्या को मापता है। कमांड-लाइन विकल्प इनपुट/रीडिंग के लिए एक भिन्न ब्लॉक आकार निर्दिष्ट कर सकते हैं (ibs) आउटपुट/लेखन की तुलना में (obs), हालांकि ब्लॉक आकार (bs) विकल्प दोनों को ओवरराइड करेगा ibs तथा obs. इनपुट और आउटपुट ब्लॉक आकार दोनों के लिए डिफ़ॉल्ट मान 512 बाइट्स (डिस्क का पारंपरिक ब्लॉक आकार और ब्लॉक का POSIX-अनिवार्य आकार) है। count }} कॉपी करने के विकल्प को ब्लॉक में मापा जाता है, जैसा कि दोनों हैं skip पढ़ने के लिए गिनें और seek लिखने के लिए गिनें। रूपांतरण संचालन भी रूपांतरण ब्लॉक आकार से प्रभावित होते हैं (cbs). ब्लॉक आकार विकल्पों के लिए प्रदान किया गया मान बाइट्स की दशमलव (आधार 10) पूर्णांक संख्या के रूप में व्याख्या किया गया है। इसमें यह इंगित करने के लिए प्रत्यय भी हो सकते हैं कि ब्लॉक आकार बाइट्स की तुलना में बड़ी इकाइयों की एक पूर्णांक संख्या है। POSIX केवल प्रत्यय निर्दिष्ट करता है b (ब्लॉक) 512 के लिए और k (kibibytes) 1024 के लिए। कार्यान्वयन उनके द्वारा समर्थित अतिरिक्त प्रत्यय पर भिन्न होता है: (मुक्त) बीएसडी लोअरकेस का उपयोग करता है m (mebibytes), g (गिबिबाइट्स), और इसी तरह tebibite, exbibit, pebibyte, पराजित और yobibit्स के लिए, जबकि जीएनयू उपयोग करता है M तथा G उसी इकाइयों के लिए, साथ kB, MB, तथा GB यूनिट समकक्षों (किलोबाइट्स) की उनकी अंतर्राष्ट्रीय प्रणाली के लिए उपयोग किया जाता है। उदाहरण के लिए, जीएनयू के लिए dd, bs=16M 16 मेबिबाइट्स (16777216 बाइट्स) के ब्लॉक आकार को इंगित करता है और bs=3kB 3000 बाइट्स निर्दिष्ट करता है।

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

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

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

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

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

इन-प्लेस संशोधन
dd डेटा को जगह में संशोधित कर सकते हैं। उदाहरण के लिए, यह फ़ाइल के पहले 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 रूपांतरण विकल्प की आवश्यकता नहीं है क्योंकि इसका कोई प्रभाव नहीं पड़ता है ddकी आउटपुट फाइल एक ब्लॉक डिवाइस है।

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

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

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

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

ए सी कार्यक्रम कहा जाता है dd_rescue अक्टूबर 1999 में लिखा गया था। इसने की रूपांतरण कार्यक्षमता को समाप्त कर दिया dd, और दुविधा से निपटने के लिए दो ब्लॉक आकारों का समर्थन करता है। यदि बड़े आकार का उपयोग करने वाला पठन विफल हो जाता है, तो जितना संभव हो उतना डेटा एकत्र करने के लिए यह छोटे आकार में वापस आ जाता है। यह पीछे की ओर भी दौड़ सकता है। 2003 में, ए dd_rhelp स्क्रिप्ट का उपयोग करने की प्रक्रिया को स्वचालित करने के लिए लिखा गया था dd_rescue, किन क्षेत्रों को अपने आप पढ़ा गया है, इस पर नज़र रखना। 2004 में, जीएनयू ने एक अलग उपयोगिता लिखी, जो इससे संबंधित नहीं थी 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 आमतौर पर कोई प्रगति संकेत प्रदान नहीं करता है। इसे भेजकर इसे दूर किया जा सकता है USR1 चल रहे GNU को संकेत dd प्रक्रिया (INFO बीएसडी सिस्टम पर), जिसके परिणामस्वरूप dd हस्तांतरित ब्लॉकों की वर्तमान संख्या को प्रिंट करना।

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

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

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

यह भी देखें

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

इस पेज में लापता आंतरिक लिंक की सूची

 * UNIX- जैसे
 * इन्फर्नो (ऑपरेटिंग सिस्टम)
 * मानक त्रुटि धारा
 * फाइल समाप्त
 * ब्लॉक (डेटा संग्रहण)
 * इकाइयों की अंतर्राष्ट्रीय प्रणाली
 * पॉज़िक्स खोल
 * बिट शिफ्ट
 * सिक्योर डिजिटल
 * यूएसबी फ्लैश ड्राइव
 * डाटा रिकवरी
 * openSUSE
 * कांटा (सॉफ्टवेयर विकास)

बाहरी संबंध

 * 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