चाहेंगे
dd if=/dev/zero of=somepartition bs=512
के बाद भी विभाजन मिटा somepartition
या अंत somepartition
?
चाहेंगे
dd if=/dev/zero of=somepartition bs=512
के बाद भी विभाजन मिटा somepartition
या अंत somepartition
?
जवाबों:
dd
dd
एक बहुत शक्तिशाली लेकिन खतरनाक उपकरण है। यह वह करता है जो आप इसे बिना किसी प्रश्न के करने के लिए कहते हैं। इसलिए यदि आप इसे पारिवारिक चित्रों को पोंछने के लिए कहते हैं, ... और यह एक छोटी टाइपिंग त्रुटि है।
लेकिन अगर आप चेक और डबल चेक करते हैं, तो आप इसका उपयोग कर सकते हैं।
dd if=/dev/zero of=somepartition bs=512
या मैं सुझाव दूंगा
dd if=/dev/zero of=/dev/sdxn bs=4096
x
ड्राइव अक्षर कहां है और n
विभाजन संख्या है और ब्लॉक आकार 4096 बाइट्स लिखने की प्रक्रिया को तेज करता है।
यह महत्वपूर्ण है कि आप इस मामले में एक विभाजन को लिखें । यदि आप पूरी ड्राइव (ड्राइव हेड एंड) /dev/sdx
पर लिखते हैं, तो पूरी ड्राइव ओवरराइट हो जाएगी। लेकिन विभाजन को लिखना विभाजन के अंत में बाधित होगा और इसके पीछे के विभाजन संरक्षित रहेंगे। (मैंने अब ल्यूबंटू 16.04 एलटीएस में एक यूएसबी पेनड्राइव पर परीक्षण किया है , इसलिए मुझे पता है कि यह उसी तरह काम करता है।)
एक विस्तारित विभाजन के लिए एक अपवाद है (जो तार्किक विभाजन के लिए एक कंटेनर है, ताकि MSDOS विभाजन तालिका में चार से अधिक विभाजन हों)। यह निम्नलिखित लिंक में वर्णित है,
क्या मैं dd का उपयोग करके 'विस्तारित' विभाजन की छवि बना सकता हूं?
लेकिन एक और समस्या भी है। मैंने परीक्षण वातावरण में आपकी आज्ञा का परीक्षण किया, और dd ने केवल एक kibibyte (1024 बाइट्स) पढ़ा जब मैं चाहता था कि यह एक विस्तारित विभाजन की एक छवि बना सके।
मैंने अब ल्यूबंटू 16.04 एलटीएस में एक यूएसबी पेनड्राइव पर भी इसका परीक्षण किया, और यह लेखन (साथ ही पढ़ने के लिए) पर लागू होता है। केवल पहली kibibyte अधिलेखित है।
इसलिए संक्षेप में, प्राथमिक विभाजन और तार्किक विभाजन को अधिलेखित करना इस उत्तर में मुख्य विवरण के अनुसार काम करता है। लेकिन एक विस्तारित विभाजन को अधिलेखित करने के लिए इस पद्धति का उपयोग न करें क्योंकि केवल पहली किबिबाइट को ओवरराइट किया जाएगा। विस्तारित विभाजन के तार्किक विभाजन अब विभाजन तालिका के माध्यम से नहीं मिलेंगे, लेकिन उनमें संग्रहीत डेटा अभी भी हैं।
dd
और यह जोखिम भरा है, ताकि आप इसका उपयोग करते समय बहुत सावधान रहें। सौभाग्य :-) सामान्य रूप से, आपके पास हमेशा सभी फ़ाइलों का बैकअप होना चाहिए , जिसे आप खो नहीं सकते।
एक विभाजन डिवाइस के लिए लिखता है कि विभाजन के बाहर नहीं होगा, dd या कुछ और के साथ। आपको एक विभाजन के बाहर किसी भी प्रभाव के लिए व्होलडिसक डिवाइस का उपयोग करने की आवश्यकता होगी।
(कैविएट: जब तक आपकी डिस्क में अतिव्यापी विभाजन के साथ विभाजन तालिका नहीं होती है, जो कभी नहीं होनी चाहिए।)
मुझे लगता है कि आपका सवाल एक बुनियादी गलतफहमी पर आधारित है कि कैसे dd
(और वास्तव में यूनिक्स की तरह ऑपरेटिंग सिस्टम) काम करते हैं:
dd
आसन्न विभाजन को अधिलेखित नहीं कर सकता, बस इसलिए कि dd
विभाजन, अवधि को अधिलेखित नहीं कर सकता ।
dd
बस फ़ाइलों को लिखता है । बस।
अब, यदि आपdd
एक फाइल पास करते हैं जो कई विभाजनों का प्रतिनिधित्व करती है , तो उस फाइलdd
को ओवरराइट कर देगा । लेकिन उस मामले में, यह dd
विभाजन के अंत में नहीं लिख रहा है। dd
अभी भी फ़ाइल के अंत तक लिखेंगे, और केवल फ़ाइल के अंत तक।
लेकिन, यदि आप dd
एक फाइल पास करते हैं जो केवल एक विभाजन का प्रतिनिधित्व करती है, तो dd
इस विभाजन के अंत में पिछले नहीं लिखेंगे। फिर, इससे कोई लेना-देना नहीं है dd
। dd
बस उस फ़ाइल को लिखता है जिसे आप इसे लिखना चाहते हैं। तथ्य यह है कि यह फ़ाइल एकल विभाजन का प्रतिनिधित्व करती है (इस मामले में) कर्नेल में ब्लॉक डिवाइस ड्राइवर द्वारा सुनिश्चित की गई है। dd
उससे कोई लेना-देना नहीं है।
तो, संक्षेप में: dd
फ़ाइलों को लिखता है। उन फ़ाइलों का प्रतिनिधित्व करते हैं, dd
चिंता का कोई नहीं है । dd
विभाजन के बारे में कुछ नहीं पता है।
dd
कच्चे विभाजन में लिखने के लिए उपयोग नहीं कर सकते । आप केवल फाइलों पर लिख सकते हैं। आप निश्चित रूप से एक ब्लॉक डिवाइस फाइल को लिख सकते हैं जो एक विभाजन (जैसे ) का प्रतिनिधित्व करती है /dev/sda1
, लेकिन आप एक कच्चे विभाजन को नहीं लिख सकते। और चूँकि आप केवल एक फाइल को लिख सकते हैं जो विभाजन का प्रतिनिधित्व करती है, आप विभाजन के अंत को नहीं लिख सकते हैं, क्योंकि फाइल केवल विभाजन का प्रतिनिधित्व करती है, और विभाजन का नहीं और अंत से थोड़ा अतीत।
/dev/sda
अपने टेक्स्ट एडिटर में खोल सकते हैं और डेटा को बदल dd
सकते हैं, विभाजन तक पहुंचने में सक्षम होने के मामले में किसी भी अन्य कार्यक्रम से अलग नहीं है। बहुत अच्छा जवाब!
एक खतरनाक, लेकिन दुर्लभ विशेष परिदृश्य है जिसमें यह गैर-छोटी गाड़ी ब्लॉक डिवाइस ड्राइवरों के साथ भी हो सकता है:
आपको dd से सावधान रहना होगा जैसे कि यदि आप कोई गलती करते हैं तो आप उससे अधिक सौदेबाजी कर सकते हैं जिसके लिए आप सौदेबाजी कर रहे हैं और यह इस बात पर निर्भर करता है कि आप dd के लिए क्या उपयोग कर रहे हैं (dd के उपयोग में ओपी अस्पष्ट था और dd का सटीक सिंटैक्स। आदेश)।
यदि आप एक विभाजन निर्दिष्ट करते हैं तो यह उस विभाजन को लिख देगा जब तक कि विभाजन पूरा नहीं हो जाता।
यदि आप कोई गलती करते हैं और पूरी ड्राइव डालते हैं, तो उदाहरण के लिए = / dev / sda, dd पूरे ड्राइव को लिखना शुरू कर देगा ताकि आपकी विभाजन तालिका की अनदेखी (और ओवरराइटिंग) हो।
आप हमें डिलीट की गई फाइलों को ओवरराइट करने के लिए एक पार्टीशन पर dd भी कर सकते हैं (डिलीट की गई फाइल्स विभाजन पर बनी रह सकती हैं और विभिन्न रिकवरी टूल्स द्वारा सफलता की विभिन्न डिग्री के साथ खोज की जाती हैं, जब तक कि वे लिखित न हों। इस मामले में आप फ्री स्पेस भरने के लिए dd का उपयोग कर सकते हैं। एक फ़ाइल के लिए लेखन।
dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file
आप जो भी कर रहे हैं, उसके आधार पर, आप फ़ाइलों को सुरक्षित रूप से हटाने के लिए एक वैकल्पिक उपकरण का उपयोग करना चाह सकते हैं। देखें कि कैसे सुरक्षित तरीके से फ़ाइल को हटाएं? विकल्पों के लिए।
dd
वह निम्न स्तर नहीं है। वास्तव में लोगों द्वारा उपयोग की जाने वाली अधिकांश चीजें dd
बस उसी के साथ की जा सकती थीं cat
। वास्तव में cat
यह थोड़ा तेज है क्योंकि यह dd
डिफ़ॉल्ट रूप से बड़े ब्लॉक का उपयोग करता है। सभी निम्न स्तर का कोड कर्नेल में है। और ड्राइवर वास्तव में परवाह नहीं करता है यदि आप उपयोग कर रहे हैं dd
या cat
।
dd if=/dev/zero of=/dev/sda bs=512 count=1
या dd if=/dev/zero of=/dev/sda bs=512
उदाहरण हैं। दूसरे कमांड के साथ यह विभाजन तालिका को "अनदेखा" करते हुए पूरी डिस्क को लिखता रहेगा और भरता रहेगा। यदि आप एक विभाजन निर्दिष्ट करते हैं तो dd if=/dev/zero of=/dev/sda1
यह विभाजन से आगे नहीं जाएगा। Dd के साथ आप क्या करना चाहते हैं, इस पर निर्भर करता है।
of=somepartition
, इसलिए ऐसा मामला जहां आप पूरी डिस्क डिवाइस पर लिखते हैं वह लागू नहीं होता है। dd
डिवाइस ड्राइवर के प्रतिबंधों के आसपास नहीं जा सकते।
/dev/sda1
, कर्नेल द्वारा इस तरह से बनाए गए हैं कि उनके माध्यम से आसन्न भंडारण तक पहुंचना असंभव है (यह मानते हुए कि पिछली बार पढ़ने के बाद विभाजन तालिका को बदल नहीं दिया गया था)। यदि आप उस तरह से आसन्न भंडारण तक पहुंच सकते हैं, तो इसे एक विशाल बग माना जाएगा।