अगर मैं dd को ड्राइव करता है, जहाँ dd रहता है, तो क्या होता है?


10

क्या यह आदेश dd if=/dev/zero of=/dev/sda bs=1Mसफल होगा : यदि dd कमांड मूल रूप से / dev / sda पर था? क्या यह पूरा होगा क्योंकि dd उस समय मेमोरी में है?

जवाबों:


40

तीन चीजें हो सकती हैं:

  1. कमांड शुरू होता है, पूरा होने तक चलता है और आप तुरंत वापस चले जाते हैं। चूंकि डिस्क को प्रभावी ढंग से मिटा दिया जाता है आप उसके बाद बहुत कुछ नहीं कर सकते, हालांकि आप कुछ शेल बिल्ड-इन कमांड के साथ भाग्यशाली हो सकते हैं।
  2. आज्ञा शुरू होती है। कुछ बिंदु पर यह स्मृति दबाव के कारण बाहर निकल जाता है। आम तौर पर यह कोई समस्या नहीं है क्योंकि इसके कुछ हिस्सों को बस स्वैप से डिस्क (अपरिवर्तित डेटा) से पुनः लोड किया जा सकता है। हालाँकि यदि आपने इन्हें मिटा दिया है तो डिस्क को भरने के दौरान dd कमांड आंशिक रूप से विफल हो जाएगी।
  3. तीसरा विकल्प बीएसडी से कुछ है। माउंटेड डिस्क पर एमबीआर को ओवर राइटिंग से सुरक्षित किया गया है। भले ही आप कमांड को रूट के रूप में चलाएं। दर्जनों लिनक्स वितरण हैं, सभी बस थोड़ा अलग हैं। यह बहुत संभव है कि उनमें से कुछ इसका अनुकरण करें।


सिद्धांत के लिए अब तक। अब प्रैक्टिकल परीक्षा के लिए।

मैंने VM पर एक नया Ubuntu 12.10 स्थापित किया। (VM7 वर्कस्टेशन पर win7-x64, डिफ़ॉल्ट विकल्प और 10 जीबी वर्चुअल डिस्क का उपयोग करके)।

Dd कमांड सफलतापूर्वक पूरा हो गया और जो काम कर रहा था, वह मुझे वापस मिल गया। मैं नए आदेश दर्ज कर सकता हूं, हालांकि वे स्पष्ट कारणों से विफल होंगे।

डिस्क को पोंछने के बाद उबंटू वीएम का स्क्रीनशॉट


9
व्यावहारिक परीक्षा के लिए बिग +1!
डग हैरिस

10
मैं देखता हूं Segmentation faultऔर आप दावा करते हैं कि यह सफलतापूर्वक पूरा हुआ ...?
एल्विन वोंग

1
ऐ। इसने डिस्क को अपठनीय बना दिया। मुझे लगता है कि यही लक्ष्य था। सुरक्षित मिटा देने के लिए आपको वास्तव में कुछ और प्रयास करना चाहिए (जैसे कि सुरक्षित मिटा आदेश)।
हेन्नेस

सबसे अच्छे उत्तरों में से एक जो मैंने कभी प्राप्त किया है। धन्यवाद!
अगस्त

6

लानत स्माल लिनक्स का उपयोग करते हुए एक वर्चुअल मशीन में एक त्वरित प्रयोग dd कमांड को इंगित करता है जो वास्तव में अपेक्षित है; कार्यक्रम को शुरू में चलाने के लिए मेमोरी में लोड किया गया है और यह प्रक्रिया के दौरान बार-बार निष्पादन योग्य को लोड करने के लिए बहुत कम समझ में आता है। आखिरकार, dd बाहर निकलेगा और 'डिवाइस पर कोई स्थान नहीं बचा' की रिपोर्ट करेगा।

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


4

mmapलिनक्स पर पेज से :

MAP_SHARED Share this mapping.  Updates to the mapping are visible to other processes that map this  file,
           and  are  carried  through  to the underlying file.  The file may not actually be updated until
           msync(2) or munmap() is called.


MAP_PRIVATE
           Create a private copy-on-write mapping.  Updates to the mapping are not visible to other  pro‐
           cesses  mapping  the  same  file,  and  are  not carried through to the underlying file.  It is
           unspecified whether changes made to the file after the mmap() call are visible  in    mapped
           region.

mmapकार्य के लिए आंतरिक कॉल के माध्यम से निष्पादनयोग्य को कर्नेल द्वारा मेमोरी में मैप किया जाता है । एक MAP_PRIVATEप्रकार की मैपिंग का अनुरोध किया गया है ( fs/binfmt_elf.cकर्नेल स्रोत ट्री को देखें)।

तो यह व्यवहार के लिए उबलता है mmap: चाहे फ़ाइल में परिवर्तन हो, या अंतर्निहित ब्लॉक डिवाइस जिसे उस फ़ाइल को संदर्भित किया जाता है, को मैपिंग के उन पृष्ठों पर वापस प्रचारित किया जाता है जो पहले से ही पृष्ठांकित हैं और मौजूद हैं।

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

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

लेकिन उस पृष्ठ को पिछले ddआह्वान से भी कैश किया जा सकता है।


1

हाँ। बेशक, यह भी आप अपने फाइल सिस्टम के अधिकांश खर्च होंगे, लेकिन संभवतः आप पहले से ही जानते हैं कि ...


0

मैंने हाल ही में एक गलती की। मैं एसडी कार्ड पर एक 2 जीबी img dd करने का इरादा है, लेकिन यह गलती से एसडीए के लिए किया था dd if=rasberrypi.img of=/dev/sda। मेरी गलती का एहसास हुआ और dd को रद्द कर दिया, लेकिन तब तक ~ 600MB (डिस्क पर ~ 500GB इस्तेमाल किया गया) लिखा जा चुका था। विभाजन की मेज बर्बाद हो गई।

डेस्कटॉप (10 जीबी मेमोरी के साथ और हफ्तों तक) कुछ घंटों के लिए कार्य करना जारी रखा, क्योंकि कुछ भी नहीं हुआ। हाल ही में महत्वपूर्ण फ़ाइलों को ड्रॉपबॉक्स में बदलने के लिए प्रबंधित, सामान्य रूप से क्रोम में ब्राउज़ किया गया। वास्तव में मैं dd को SD कार्ड में चला सकता हूं क्योंकि मैं मूल रूप से चाहता था, ठीक काम किया।

कुछ घंटों के बाद, मेरा फाइलसिस्टम केवल मोड में चला गया, और यादृच्छिक प्रोग्राम मरने लगे। मुझे कई अन्य प्रणालियों में sshed किया गया था, मैं उन सत्रों का उपयोग करना जारी रख सकता हूं, लेकिन नए सत्र को बनाने में त्रुटि हुई कि यह ssh प्रोग्राम ढूंढ नहीं सकता है। इस समय मैं क्रोम में खुले टैब स्विच कर सकता था, लेकिन टैब की सामग्री "लटका" हुई लगती है। यदि मैं ताज़ा करता हूं, तो मुझे हमेशा के लिए सफेद स्क्रीन मिलती है। rsyslogd किसी कारण से 100% cpu (1 कोर) ले रहा था, शायद यह उलझन में था कि यह डिस्क को लॉग फ्लश क्यों नहीं कर सकता है - शायद।

मेरे पास वीएलसी में एक 350 एमबी वीडियो खोला (और रोका गया) था, फिर भी मैं इसे खेल सकता था, और वीडियो के किसी भी भाग को छोड़ सकता था। संभवतः इसके हालिया डाउनलोड के बाद से।

मैं सिस्टम को सामान्य रूप से GUI का उपयोग करके बंद कर सकता था, कोई त्रुटि नहीं।

तो यह आपके सवाल का बिल्कुल जवाब नहीं देता है, लेकिन बताता है कि अगर डिस्क की भीख मांगने से क्या होता है ..

डिस्क पर अधिकांश चीजें अभी भी पुनर्प्राप्त करने योग्य हो सकती हैं, लेकिन im के बाद से परेशान नहीं होने की उम्मीद है (उम्मीद है) सब कुछ जिसकी मुझे परवाह है वह बैकअप है।


-1

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


2
ऐसी फ़ाइल का अनुरोध करना जो गायब है, कर्नेल से घबराएगी नहीं। यदि ऐसा होता है, तो मशीनें क्रैश हो जाती हैं यदि उनके पास सिर्फ एक अविश्वसनीय डिस्क होती है।
डेविड श्वार्ट्ज

@ राज्ड श्वार्ट्ज, यदि ऐसा होता तो #rm -rf / वास्तव में संपूर्ण फ़ाइल सिस्टम को हटा देता। मैं प्रयोगों से जानता हूं कि ऐसा नहीं है। जब तक किसी प्रकार की रैमडिस्क तकनीक को लागू नहीं किया जाता है, जो मानक नहीं है, तब तक सिस्टम पूरी तरह से राम से लंबे समय तक नहीं चल सकता है।
फ्रैंक थॉमस

@FrankThomas: क्या कर्नेल घबरा गया था?
डेविड श्वार्ट्ज

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