अवलोकन
लिनक्स सिस्टम एडमिनिस्ट्रेशन में स्टोरेज ड्राइव्स की क्लोनिंग, डेटा का सुरक्षित बैकअप तैयार करने और परीक्षण हेतु डमी फाइल्स जनरेट करने के लिए dd टूल सबसे प्रभावी उपयोगिताओं में से एक है। इस व्यावहारिक गाइड में हम bs, count, status=progress, conv, और oflag जैसे अत्यंत उपयोगी विकल्पों की कार्यप्रणाली को सीधे लिनक्स टर्मिनल पर प्रयोगों के माध्यम से समझेंगे।
1. dd के मूलभूत सिद्धांत: if, of और ब्लॉक साइज (bs, count) का नियंत्रण
सिस्टम पर बिना किसी जोखिम के अभ्यास करने के लिए सबसे पहले एक सुरक्षित अस्थायी डायरेक्टरी तैयार करते हैं। इसके लिए mkdir -p /tmp/dd_demo && cd /tmp/dd_demo कमांड चलाकर फोल्डर बनाएं और उसमें प्रवेश करें।

मूल रूप से dd टूल बाइट या ब्लॉक स्तर पर रॉ डेटा (raw data) कॉपी करने और उसे आवश्यकतानुसार रूपांतरित करने का कार्य करता है। नीचे दिए गए उदाहरण में विशेष स्यूडो-डिवाइस /dev/zero से शून्य बाइट्स लेकर 1MB के 10 ब्लॉक्स प्रोसेस किए जाते हैं, जिससे ठीक 10MB की परीक्षण फाइल sample_10m.img तैयार होती है।
⚙️ [महत्वपूर्ण पैरामीटर्स का विवरण]
if=FILE : स्रोत (Input File) यानी जहाँ से डेटा पढ़ा जाना है, उस फ़ाइल या डिवाइस नोड का पाथ निर्धारित करता है।of=FILE : गंतव्य (Output File) यानी जिस फ़ाइल या डिस्क पार्टीशन में डेटा लिखा जाना है, उसका पाथ सेट करता है।bs=BYTES : एकल चक्र में पढ़े और लिखे जाने वाले ब्लॉक का आकार तय करता है।count=N : इनपुट से पढ़े जाने वाले कुल ब्लॉक्स की संख्या सीमित करता है।status=LEVEL : टर्मिनल स्क्रीन पर ट्रांसफर प्रगति दर्शाने का स्तर चुनता है (जैसे कि progress)।conv=CONVS : ट्रांसफर प्रक्रिया के दौरान डेटा रूपांतरण या डिस्क सिंक रणनीतियों को लागू करता है (उदा. sync, fdatasync)।

फाइल के सफलतापूर्वक बनने और उसका आकार वास्तविक 10MB होने की पुष्टि हेतु ls -lh sample_10m.img चलाकर विवरण जांचें।

2. बड़े डेटा ट्रांसफर में रियल-टाइम प्रगति देखना: status=progress का उपयोग
अगले परीक्षण के लिए पहले तैयार की गई वर्कस्पेस डायरेक्टरी में वापस जाने के लिए cd /tmp/dd_demo निष्पादित करें।

डिफ़ॉल्ट रूप से dd पृष्ठभूमि में बिना किसी फीडबैक के चलता रहता है, जिससे बड़े स्टोरेज टास्क में अनिश्चितता बनी रहती है। इस स्थिति में status=progress फ्लैग जोड़ा जाता है। यहाँ 100MB की sample_100m.img फ़ाइल तैयार करते समय वास्तविक समय में बाइट ट्रांसफर और स्पीड मैट्रिक्स की निगरानी की जाती है। डिस्क क्लोनिंग जैसे बड़े कार्यों में यह लाइव ट्रैकिंग काफी उपयोगी साबित होती है।

डिस्क पर निर्मित sample_100m.img की वास्तविक क्षमता और एलोकेशन की पुष्टि के लिए ls -lh sample_100m.img कमांड दर्ज करें।

3. डेटा रूपांतरण और सुरक्षित प्रतिलिपि: conv फ्लैग का व्यावहारिक प्रयोग
रूपांतरण तकनीकों को परखने के लिए परीक्षण फोल्डर में बने रहने हेतु पुनः cd /tmp/dd_demo कमांड रन करें।

टेक्स्ट कन्वर्जन क्षमता का विश्लेषण करने के लिए छोटे अक्षरों (lowercase) वाली एक साधारण टेक्स्ट फाइल input.txt तैयार करते हैं। इसके लिए echo 'hello linux ubuntu dd command tutorial' > input.txt निष्पादित करें।

यहाँ conv=ucase निर्देशिका का प्रयोग करके इनपुट फाइल के सभी छोटे अक्षरों को अपरकेस (राजधानी अक्षरों) में बदलते हुए आउटपुट फाइल output_upper.txt में राइट किया जाता है। साथ ही status=none जोड़ देने से टर्मिनल पर सामान्य I/O आंकड़ों का आउटपुट बंद हो जाता है और केवल रूपांतरित फाइल ही तैयार होती है।

परिणामी फाइल में टेक्स्ट वास्तव में बड़े अक्षरों में परिवर्तित हुआ है या नहीं, इसे देखने के लिए cat output_upper.txt कमांड चलाएं।

4. डिस्क I/O राइट परफॉर्मेंस टेस्ट: oflag=direct और क्लीनअप
स्टोरेज राइट थ्रूपुट का सटीक मापन करने के लिए cd /tmp/dd_demo के माध्यम से फिर से टेस्ट डायरेक्टरी में कार्य शुरू करते हैं।

सामान्य तौर पर लिनक्स कर्नल रैम में मौजूद बफर कैश का उपयोग करता है, जिससे कृत्रिम रूप से उच्च गति दिखाई देती है। वास्तविक हार्डवेयर क्षमता जांचने के लिए oflag=direct का प्रयोग किया जाता है, जो ओएस कैश को बायपास करते हुए सीधे ड्राइव पर 50MB डेटा राइट करता है। status=progress के साथ इसे चलाने पर आपको स्टोरेज की वास्तविक, अनकैश्ड लिखने की गति का सटीक लाइव डेटा प्राप्त होता है।

परीक्षण पूर्ण हो जाने पर सिस्टम स्टोरेज को साफ रखने के लिए बनाई गई अस्थायी डायरेक्टरी और सभी परीक्षण फाइलों को rm -rf /tmp/dd_demo चलाकर सुरक्षित रूप से हटा दें।

इस ट्यूटोरियल में हमने उबंटू लिनक्स पर dd यूटिलिटी के मुख्य विकल्पों और डिस्क बेंचमार्किंग के व्यावहारिक तरीकों को विस्तार से समझा। चूँकि dd एक बेहद शक्तिशाली लो-लेवल टूल है और छोटी सी चूक भी डेटा हानि का कारण बन सकती है, इसलिए कमांड रन करने से पहले अपने आउटपुट पाथ (of) की दोबारा पुष्टि अवश्य करें।