क्या dd किसी भी प्रकार का सत्यापन करता है?


16

मैं ddएक पुराने हार्ड ड्राइव से डेटा को एक नए में कॉपी करने के लिए उपयोग कर रहा हूं । मैं यह सुनिश्चित करना चाहता हूं कि डेटा की अखंडता सुरक्षित हो।

इस जवाब पर , गिल्स कहते हैं

यदि [dd] को सफलतापूर्वक समाप्त कर दिया गया है, तो बैकअप सही है, एक हार्डवेयर फॉल्ट को रोक कर ...

इसका सबसे सही मतलब क्या है? क्या ddसत्यापन में किसी प्रकार का निर्माण किया गया है?

अगर मुझे इसके बजाय rsync का उपयोग करना था, तो मैं --checksumसत्यापित करने के लिए एक दूसरा पास भी चलाता हूं । क्या उस तरह का व्यामोह जायज है?


परिभाषित करें "अखंडता सुरक्षित है"।
थोरबजोर्न रेवन एंडरसन

@ ThorbjørnRavnAndersen मेरा मतलब है कि प्रतिलिपि मूल के समान है।
स्पार्कहॉक

यदि आपके पास केवल समतल फ़ाइलें हैं, तो फ़ाइलों की प्रतिलिपि बनाने का पारंपरिक तरीका टार या cpio का उपयोग कर रहा है। GNU टार में एक सत्यापित ध्वज है: gnu.org/software/tar/manual/html_section/tar_81.html । ये दिन rsyncशायद सबसे सरल होगा।
थोरबजर्न रेवन एंडरसन

1
"हार्डवेयर दोष को रोकना" इंगित करता है कि यह कोई सत्यापन नहीं करता है । यदि यह किया जाता है, तो यह हार्डवेयर विफलता का पता लगा सकता है।
बरमार

जवाबों:


20

ddया किसी भी अन्य अनुप्रयोग में "कुछ प्रकार के सत्यापन में निर्मित" इस अर्थ में नहीं है कि आप शायद इस बारे में सोच रहे हैं: यह स्टोरेज माध्यम से डेटा की तुलना नहीं करता है कि क्या लिखा गया था। यह ऑपरेटिंग सिस्टम का काम है।

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

हालांकि, एप्लिकेशन यह सत्यापित करते हैं कि डेटा का क्या होता है, इस अर्थ में कि वे सत्यापित करते हैं कि ऑपरेटिंग सिस्टम ने डेटा के लिए जिम्मेदारी स्वीकार कर ली है। सभी सिस्टम कॉल में त्रुटि की स्थिति होती है। यदि कोई सिस्टम कॉल एक त्रुटि स्थिति देता है, तो अनुप्रयोग को उस त्रुटि को उपयोगकर्ता को प्रचारित करना चाहिए, आमतौर पर एक त्रुटि संदेश प्रदर्शित करके और नॉनजेरो एग्जिट स्थिति को लौटाता है।

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

डेटा कॉपी करने की श्रृंखला में, दो प्रकार की त्रुटियां उत्पन्न हो सकती हैं।

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

मेरा मानना ​​है कि ज्यादातर स्टोरेज माध्यम एकल बिट फ्लिप का पता लगाने के लिए पर्याप्त FEC का उपयोग करते हैं।
बागीचा

2
बेशक अगर आप dd के साथ एक पूरी हार्ड डिस्क कॉपी करते हैं और फिर तुरंत हार्ड डिस्क की तुलना करते हैं, जो आपको पता है कि यह काम किया है क्योंकि कैश काफी बड़ा नहीं है।
जोशुआ

1
उत्तर के लिए धन्यवाद (+1)। मुझे शायद उल्लेख करना चाहिए कि मैं एक काफी बुनियादी का उपयोग कर रहा हूं dd if=/dev/sdc of=/dev/sdb bs=4M, इसलिए मेरी समझ यह है कि त्रुटियों और गति की अनदेखी के मुद्दे (तुलना में कम या ज्यादा cat), मूट है। क्या आप बढ़ते हुए आकार को जांचने के लिए कह रहे हैं df?
स्पार्कवाक

4

नहीं, ddएक स्पष्ट सत्यापन नहीं करता है। यदि आप अपनी डिस्क या उसके किसी भाग की फॉरेंसिकली सत्यापित प्रतिलिपि चाहते / चाहते हैं, तो उपयोग करें dcflddजो ddयूएस डिपार्टमेंट ऑफ डिफेंस कंप्यूटर फॉरेंसिक लैब द्वारा विकसित किया गया है।


4

"सुनिश्चित" होने का एकमात्र तरीका अतिरिक्त रीड-एंड-तुलना पास (कैश छोड़ने के बाद) करना है।

इसके अलावा, ddसभी अन्य प्रोग्रामों को उसी तरह पढ़ने और लिखने में त्रुटियों का पता लगाता है ... यदि ड्राइव (और अन्य घटक शामिल) रिपोर्ट त्रुटियों को काम करता है; ड्राइव के लिए जो डेटा को चुपचाप स्वीकार करते हैं w / o वास्तव में उन्हें लिखना आप भाग्य से बाहर हैं।

क्या उस तरह का व्यामोह जायज है?

यदि आप विश्वसनीय होने के लिए अपने हार्डवेयर पर भरोसा नहीं कर सकते, तो चीजें जटिल हो जाती हैं ...


यह इससे अधिक जटिल है , दोनों पढ़ने और तुलना करने और ddत्रुटियों का पता लगाने के बारे में ।
गिलेस एसओ- बुराई को रोकना

ठीक है, अगर आपको लगता है कि अब तक जा रहे हैं, ddहै गंभीर डेटा भ्रष्टाचार का कोई मुद्दा लेकिन विशेष मामलों इन के रूप में इस तरह के सवाल का हिस्सा नहीं थे।
ठंढकुट्ज़

उन भ्रष्टाचार के मुद्दों का उपयोग कर उत्पादित डेटा को सत्यापित करने को सही ठहराया जा सकता है dd। असली समाधान कुछ भी उपयोग करना है लेकिन ddचूंकि मौन डेटा भ्रष्टाचार की विशेषता है dd
गिल्स एसओ- बुराई को रोकना

2
@ गिल्स, या सिर्फ ddत्रुटियों को अनदेखा करने के लिए मत कहो । आप वास्तव में क्या आप इसे करने के लिए कहा के लिए एक कार्यक्रम को दोष नहीं दे सकते।
मार्क

@Mark और कैसे, प्रार्थना, आप ddत्रुटियों को अनदेखा नहीं करने के लिए कहते हैं? और नहीं, conv=noerrorएक सही जवाब नहीं है। एक उदाहरण के लिए फ्रॉस्ट्सचुट्ज़ का उत्तर देखें । मैं कर के डिजाइन दोष ddअनदेखी त्रुटियों एक डिफ़ॉल्ट मोड बनाने के लिए, और एक है कि बहुत ठीक अपने आंतरिक यांत्रिकी जानने के बिना बंद नहीं किया जा सकता है।
गिल्स एसओ- बुराई पर रोक '21

2

हां, दोषपूर्ण हार्डवेयर कुछ दर पर मेगाबाइट की एक बिट के रूप में डेटा में यादृच्छिक त्रुटि बिट्स डाल सकता है, यह संभव है और कभी-कभी व्यवहार में होता है।

आमतौर पर, मैं डेटा को सत्यापित करने के लिए md5 या sha1 हैश का उपयोग करता हूं, स्रोत और गंतव्य दोनों को फिर से पढ़कर, जैसे:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

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


डिवाइस के लिए फाइल सिस्टम कैश लिखने के लिए ओएस को बाध्य करने के लिए फाइल सिस्टम को अनमाउंट / माउंट करना पर्याप्त है।
चमत्कार 173

miracle173, लेकिन सिंक करने के बाद भी, OS कैश में नहीं रखता है कि उसने क्या लिखा है? इसलिए मुझे यकीन नहीं है कि अनमाउंटिंग रैम से सभी कैश को साफ कर देगा।
मैट

1

से man dd:

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

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

ddहर बार जब यह किसी ब्लॉक की नकल करता है तो इनपुट / ouput ब्लॉक आकार से मेल खाता है। यदि वे नहीं करते हैं, तो यह एक चेतावनी या घातक त्रुटि के साथ त्रुटि को संभालता है (ओवरड्यूड noerror)। यही कारण है कि ddलगभग हर समय काम करता है।

फिर भी, यह आपकी डिस्क की अखंडता की पुष्टि करने के लिए मैन्युअल रूप से प्रतिस्थापित नहीं करता है। यदि जानकारी आपके लिए मूल्यवान है, तो हाँ, आपका व्यामोह उचित है । एक बार ddसमाप्त होने के बाद मैन्युअल सत्यापन चलाएं ।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.