जवाबों:
तीन चीजें हो सकती हैं:
सिद्धांत के लिए अब तक। अब प्रैक्टिकल परीक्षा के लिए।
मैंने VM पर एक नया Ubuntu 12.10 स्थापित किया। (VM7 वर्कस्टेशन पर win7-x64, डिफ़ॉल्ट विकल्प और 10 जीबी वर्चुअल डिस्क का उपयोग करके)।
Dd कमांड सफलतापूर्वक पूरा हो गया और जो काम कर रहा था, वह मुझे वापस मिल गया। मैं नए आदेश दर्ज कर सकता हूं, हालांकि वे स्पष्ट कारणों से विफल होंगे।
Segmentation fault
और आप दावा करते हैं कि यह सफलतापूर्वक पूरा हुआ ...?
लानत स्माल लिनक्स का उपयोग करते हुए एक वर्चुअल मशीन में एक त्वरित प्रयोग dd कमांड को इंगित करता है जो वास्तव में अपेक्षित है; कार्यक्रम को शुरू में चलाने के लिए मेमोरी में लोड किया गया है और यह प्रक्रिया के दौरान बार-बार निष्पादन योग्य को लोड करने के लिए बहुत कम समझ में आता है। आखिरकार, dd बाहर निकलेगा और 'डिवाइस पर कोई स्थान नहीं बचा' की रिपोर्ट करेगा।
बाद में, ऑपरेटिंग सिस्टम पहली नज़र में सामान्य रूप से कार्य करता है, लेकिन पहली कमांड के बाद यह लटका देता है कि यह स्पष्ट कारणों के लिए निष्पादित नहीं कर सकता है और अनुत्तरदायी बन जाता है। हार्ड ड्राइव सामग्री का एक संक्षिप्त निरीक्षण दिखाता है कि विभाजन वास्तव में शून्य हो गया है।
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
आह्वान से भी कैश किया जा सकता है।
हाँ। बेशक, यह भी आप अपने फाइल सिस्टम के अधिकांश खर्च होंगे, लेकिन संभवतः आप पहले से ही जानते हैं कि ...
मैंने हाल ही में एक गलती की। मैं एसडी कार्ड पर एक 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 के बाद से परेशान नहीं होने की उम्मीद है (उम्मीद है) सब कुछ जिसकी मुझे परवाह है वह बैकअप है।
सबसे अधिक संभावना है कि यह पूरा नहीं होगा, क्योंकि कुछ अन्य निष्पादन घटक एक फ़ाइल का अनुरोध करेंगे जो गायब है और कर्नेल को आतंकित करेगा। यदि आप वास्तव में डिस्क को शून्य करना चाहते हैं, तो एक लाइव सीडी का उपयोग करें; अन्यथा आप परिणाम की गारंटी कभी नहीं दे सकते।