dd लिनक्स में सबसे महत्वपूर्ण कमांड में से एक है, जिसका उपयोग ज्यादातर हार्ड डिस्क और पार्टीशन का बैकअप लेने के लिए किया जाता है। जब सही ढंग से उपयोग किया जाता है, तो dd एक पार्टीशन से दूसरे में डेटा लिखने और फ़ाइलों के साथ विभिन्न कार्य करने के लिए एक शक्तिशाली उपकरण हो सकता है। यहां हम आपको दिखाते हैं कि dd कमांड को अच्छे उपयोग में कैसे लाया जाए।
dd की कहानी
कमांड मूल रूप से 1970 के दशक में AT&T बेल लेबोरेटरीज में केन थॉम्पसन नामक एक कंप्यूटर वैज्ञानिक द्वारा विकसित की गई थी। इसे यूनिक्स-आधारित सिस्टम के लिए विकसित किया गया था और इसे IBM के जॉब कंट्रोल लैंग्वेज में पाए गए एक स्टेटमेंट के संदर्भ के रूप में चुने गए नाम दिया गया था, जिसे "DD" कहा जाता था। यह ध्यान दिया जा सकता है कि कमांड का सिंटैक्स जॉब कंट्रोल लैंग्वेज में एक स्टेटमेंट से निकटता से मिलता जुलता है।
कमांड को मूल रूप से ASCII को EBCDIC में और इसके विपरीत बदलने के लिए एक उपयोगिता के रूप में डिज़ाइन किया गया था। इसे 1974 में ऑपरेटिंग सिस्टम के 5वें संस्करण के रिलीज के साथ यूनिक्स के एक संस्करण के साथ पहली बार एकीकृत किया गया था।
यूनिक्स समुदाय में dd को "डिस्क डिस्ट्रॉयर" कहा जाता है क्योंकि गलत तरीके से उपयोग किए जाने पर हार्ड डिस्क पर डेटा नष्ट करने की इसकी क्षमता के कारण।
बुनियादी ऑपरेंड
अब जब आप कमांड की पृष्ठभूमि और गलत तरीके से उपयोग किए जाने पर इसकी विनाशकारी क्षमताओं के बारे में थोड़ा जानते हैं, तो यह सीखने का समय है कि विभिन्न लिनक्स वितरण के उपयोगकर्ताओं को यह क्या प्रदान करता है इसका लाभ कैसे उठाया जाए।
सबसे पहले, --help फ्लैग का उपयोग करके मैनुअल देखें:
dd --help
कमांड के लिए दो ऑपरेंड हैं जो सबसे अधिक उपयोग किए जाते हैं। वे if और of हैं, जो क्रमशः "इनपुट फ़ाइल" और "आउटपुट फ़ाइल" के लिए खड़े हैं। if ऑपरेंड स्रोत स्थान का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, जबकि of ऑपरेंड उस स्थान का प्रतिनिधित्व करने के लिए उपयोग किया जाता है जहां आप इनपुट स्थान से डेटा सहेजना चाहते हैं।
dd if=<input file> of=<output file>
सबसे आम स्रोत और आउटपुट स्थानों में हार्ड डिस्क, पार्टीशन, और डिस्क इमेज शामिल हैं।
कमांड का उपयोग करने से पहले, अपने सिस्टम पर पार्टीशन देखने के लिए fdisk उपयोगिता का उपयोग करना उपयोगी हो सकता है। यह कमांड के -l फ्लैग का उपयोग करके आसानी से किया जा सकता है:
sudo fdisk -l
इस मामले में, if का उपयोग " /dev/sda " ड्राइव को प्रतिनिधित्व करने के लिए किया जाता है, और of " /dev/sdb " ड्राइव को प्रतिनिधित्व करता है, जहां " /dev/sda " से डेटा सहेजा जाएगा:
dd if=/dev/sda of=/dev/sdb
डिस्क इमेज बनाना
कमांड के लिए सबसे अच्छे उपयोग के मामलों में से एक ".img" फ़ाइल प्रारूप में डिस्क इमेज बनाना है। यह आपके लिनक्स-आधारित सिस्टम पर डेटा का बैकअप लेने के लिए अत्यंत उपयोगी है और पूरे हार्ड डिस्क का बैकअप लेने का सबसे तेज़ और आसान तरीका होने की संभावना है।
यहां तर्क मुख्य रूप से समान है, if ऑपरेंड " /dev/sda " ड्राइव को प्रतिनिधित्व करता है और of ऑपरेंड एक ".img" फ़ाइल को प्रतिनिधित्व करता है, जहां हार्ड डिस्क से डेटा सहेजा जाएगा:
dd if=/dev/sda of=example.img
डिस्क इमेज को पार्टीशन में सहेजना
कमांड के साथ डिस्क इमेज बनाना काफी सीधा है, लेकिन उस प्रक्रिया का उल्टा संस्करण भी उतना ही सीधा है।
इस परिदृश्य में, हमारी डिस्क इमेज फ़ाइल इनपुट फ़ाइल के रूप में कार्य कर रही है, और हमारा नया पार्टीशन आउटपुट फ़ाइल के रूप में कार्य कर रहा है। उपयोगिता हमारी डिस्क इमेज से डेटा को हमारे " /dev/sdb " पार्टीशन में सहेज रही है:
dd if=example.img of=/dev/sdb
संपीड़ित डिस्क इमेज बनाना
यदि आप पूर्ण आकार की हार्ड डिस्क की डिस्क इमेज बनाते हैं, तो आप कल्पना कर सकते हैं कि अंतिम डिस्क इमेज का फ़ाइल आकार काफी बड़ा होगा। इस कारण से, dd उपयोगिता में एक विशेषता है जो संपीड़ित डिस्क इमेज बनाती है।
पाइप | कमांड का उपयोग करके एक संपीड़ित डिस्क इमेज बनाई जा सकती है। इस मामले में, इसका उपयोग इनपुट फ़ाइल की सामग्री को लेने और -c फ्लैग के साथ gzip कमांड करने के लिए किया जाता है, जिसमें सामग्री को ".gz" फ़ाइल में पैक किया जाता है:
dd if=/dev/sda | gzip -c > image.gz
ब्लॉक आकार निर्दिष्ट करना
आप dd कमांड के ऑपरेशन की गति के साथ भी खेल सकते हैं। यह bs ऑपरेंड का उपयोग करके पूरा किया जा सकता है, जिसका उपयोग ब्लॉक आकार को प्रतिनिधित्व करने के लिए किया जाता है। ब्लॉक आकार एक ही बार में आउटपुट फ़ाइल में कॉपी किए गए बाइट्स की संख्या को प्रतिनिधित्व करता है। इसे 1024 बाइट्स के गुणकों का उपयोग करके दर्शाया जाता है, और डिफ़ॉल्ट मान 512 बाइट्स पर सेट होता है। ब्लॉक आकार जितना अधिक होगा, डेटा आउटपुट फ़ाइल में उतनी ही तेजी से सहेजा जाएगा।
इस मामले में, हम ब्लॉक आकार को 2048 पर सेट कर रहे हैं:
dd if=/dev/sda of=example.img bs=2048
ब्लॉक आकार को किलोबाइट्स में भी निर्दिष्ट किया जा सकता है:
dd if=/dev/sda of=example.img bs=2048K
हार्ड डिस्क वाइप करना
dd का उपयोग आपकी हार्ड डिस्क को वाइप करने के लिए भी किया जा सकता है। यह " /dev/zero " या " /dev/urandom " से शून्य या रैंडम वर्ण पढ़कर और उन्हें हार्ड डिस्क/पार्टीशन पर सहेजकर पूरा किया जाता है, जो उस पर डेटा को ओवरराइट करता है। यह तब अत्यंत उपयोगी होता है जब आप यह सुनिश्चित करना चाहते हैं कि आपकी हार्ड डिस्क को बेचने या अन्यथा निपटाने के बाद आपका डेटा आसानी से पुनर्प्राप्त नहीं किया जा सकता।
शून्य का उपयोग करके हार्ड डिस्क को ओवरराइट करना:
dd if=/dev/zero of=/dev/sdb
ओवरराइटिंग की प्रक्रिया रैंडम वर्णों का उपयोग करके भी की जा सकती है:
dd if=/dev/urandom of=/dev/sdb
बूट करने योग्य USB ड्राइव बनाना
कमांड का उपयोग करके ".iso" फ़ाइलों के साथ बूट करने योग्य USB फ्लैश ड्राइव बनाना सरल है:
dd if=os.iso of=<USB drive location>
निष्कर्ष
यह कहना सुरक्षित है कि dd कमांड को "स्विस आर्मी नाइफ" माना जा सकता है क्योंकि हार्ड ड्राइव, पार्टीशन, और डिस्क इमेज फ़ाइलों से संबंधित कई क्षेत्रों में इसकी उपयोगिता है। जब तक आप अपनी हार्ड डिस्क नष्ट नहीं करते, यह हार्ड डिस्क या USB ड्राइव को वाइप करने से लेकर संपीड़ित बैकअप बनाने तक किसी भी चीज़ के लिए एक प्रभावी और उपयोग में सरल उपकरण है।