dd कमांड bs ऑप्शन डिस्क के अंत में


10

अगर मैं ddकमांड का उपयोग इस प्रकार था:

dd if=/dev/zero of=/dev/sdX bs=16M

डिस्क के अंत में क्या होता है अगर यह 16M का एक सटीक एकाधिक नहीं है? इसका मतलब है कि डिस्क के पिछले शेष हिस्से को शून्य नहीं किया गया है?

मैंने https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ में देखा , वह लिखते हैं कि अमेरिकी सरकार उपयोग करती है

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

क्या conv=notruncविकल्प हर अंतिम बाइट को सुनिश्चित करने का तरीका है?

dd 

जवाबों:


12

पूरे आउटपुट डिवाइस को मिटा दिया जाता है, चाहे उसका आकार आपके द्वारा पास किए जाने वाले ब्लॉक आकार का एक बहु हो ddया नहीं।

notruncजब उत्पादन एक युक्ति फ़ाइल है, क्योंकि एक युक्ति फ़ाइल छोटा कोई प्रभाव नहीं है झंडा कोई प्रभाव नहीं है। यदि आउटपुट एक नियमित फ़ाइल थी, तो इसका प्रभाव यह होगा कि लिखने से पहले आउटपुट फ़ाइल को छोटा नहीं किया जाता है, जो कुछ फाइल सिस्टम पर होता है, जिसका अर्थ है कि पुराना डेटा ओवरराइट किया गया है (जैसा कि डेटा के नए ब्लॉक लिखने और बाकी अनासक्त छोड़ने पर, हालाँकि यह उपयोगी नहीं होगा क्योंकि यह संपत्ति सभी फाइल सिस्टम द्वारा गारंटी नहीं है और इसके अलावा कमांड न केवल फ़ाइल को अधिलेखित करेगा, बल्कि यह तब तक लिखता रहेगा जब तक कि यह आउटपुट डिस्क (या कुछ और त्रुटि) न हो।

उपयोग करने ddऔर इस बारे में चिंता करने के बजाय कि क्या आप इसे सही तरीके से उपयोग कर रहे हैं (जैसा कि ऐसा होता है, यह इस विशेष मामले में काम करता है, लेकिन यह जटिल है और कभी-कभी काम नहीं करता है ), बस उपयोग करेंcat

cat /dev/zero >/dev/sdX

वेब पर लोकप्रिय विश्वास के बावजूद, इसमें कोई जादू नहीं है, ddजो इसे किसी भी तरह डिस्क पर लिखने के लिए बेहतर बनाता है। मैजिक /devफाइलों में है। कोई भी उपकरण जो बाइनरी डेटा के साथ सामना कर सकता है, जैसे कि कोई भी आधुनिक catया head, वही काम कर सकता है ddजब तक आप झंडे को पास नहीं कर रहे हैं जैसे कि seekया skip

ध्यान दें कि एक समस्या ने साझा किया है ddऔर catयह है कि सफल संचालन पर, वे "डिवाइस पर कोई जगह नहीं छोड़ते" (ENOSPC) के साथ त्रुटि करेंगे। यदि आप इसे एक स्क्रिप्ट में रखते हैं, तो आपको या तो यह जांचना होगा कि त्रुटि ENOSPC है या किसी अन्य विधि का उपयोग करें। एक अधिक विश्वसनीय विधि पहले डिवाइस के आकार (जैसे /proc/partitionsलिनक्स के तहत उपयोग करना ) का निर्धारण करना है , फिर उपकरण जैसे कि बाइट्स की सही संख्या लिखें head

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX

8

कोई समस्या नहीं है - ddबहुत अंत तक लिखते हैं ( No space left on device), जब तक कि यह इनपुट से बाहर नहीं निकलता है, द्वारा सीमित है count=x, या एक और त्रुटि उत्पन्न होती है (जैसे खराब क्षेत्रों, घटिया केबल आदि)।

यदि एक संपूर्ण ब्लॉकबाइड को अधिलेखित करना आपका लक्ष्य है, shredतो उपयोग करना आसान है।

shred -v -n 1 /dev/deleteme     # pseudorandom data
shred -v -n 0 -z /dev/deleteme  # zeroes

या cryptsetupसत्यापन चरण के साथ यादृच्छिक डेटा के लिए (शून्य को यादृच्छिक डेटा में एन्क्रिप्ट किया गया है; यादृच्छिक डेटा वापस शून्य पर डिक्रिप्ट किया गया है)।

या blkdiscardएसएसडी के लिए।

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

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