`Dd if = / dev / zero of = / dev / sda` क्या करता है


19

संपादित: इसे तब तक न चलाएं जब तक आप डेटा को नष्ट नहीं करना चाहते।

क्या कोई मुझे समझने में मदद कर सकता है कि मुझे क्या मिला?

  1. dd if=/dev/zero of=/dev/sda bs=4096 count=4096

    क्यू: विशेष रूप से 4096 के लिए क्यों count?

  2. dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

    प्रश्न: वास्तव में यह क्या करता है?


4
आपको यह दुर्भावनापूर्ण कोड कहां मिला
Suici Doga

10
यह दुर्भावनापूर्ण कोड नहीं है।
माइकल हैम्पटन

12
@Michael Hampton: s / malicious / destructive / विध्वंसक कोड पोस्ट करते समय प्रति se malicious नहीं है, इसे स्पष्ट चेतावनी के बिना पोस्ट करना कि यह डेटा IS को नष्ट कर सकता है।
बेन वोइग्ट

1
डीडी को 'डिस्क डिस्ट्रॉयर' के रूप में सोचना सबसे अच्छा है जब इंटरनेट पर कोई आपको इस तरह से कमांड चलाने के लिए कहता है।
बॉबी सैकमनो

3
वास्तव में डीडी का अर्थ डेटा विवरण है
Suici Doga

जवाबों:


43

dd if = / dev / zero of = / dev / sda bs = 4096 count = 4096 Q: 4096 का उपयोग विशेष रूप से काउंटर के लिए क्यों किया जाता है?

यह ड्राइव के पहले 16 MiB को शून्य कर देगा। 16 MiB संभवतः "डिस्क की संरचना" शुरू करने के लिए पर्याप्त से अधिक है, जबकि यह बहुत छोटा है कि इसे बहुत लंबा नहीं लगेगा।

dd if = / dev / zero of = / dev / sda bs = 512 काउंट = 4096 चाहना = $ (expr blockdev --getz / dev / sda - 4096)

प्रश्न: यह वास्तव में क्या करता है?

blockdev --getsz"512 बाइट सेक्टर" में ब्लॉक डिवाइस का आकार मिलता है। तो यह कमांड ऐसा दिखता है जैसे कि ड्राइव के अंतिम 2 MiB को शून्य करना था।

दुर्भाग्य से इस कमांड को सिंटेक्स वाइज तोड़ा गया है। मुझे उम्मीद है कि कमांड मूल रूप से होने का इरादा था

dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)

और बैकटिक्स अलग-अलग वातावरणों के बीच इसे कॉपी / पेस्ट करते हुए लोगों की लाइन के साथ कहीं खो गए।

पुराने विभाजन तालिकाओं, LVM मेटाडेटा, छापे मेटाडाटा आदि एक ड्राइव का पुन: उपयोग करते समय समस्याएँ पैदा कर सकते हैं। ड्राइव के आरंभ और अंत में अनुभागों को ज़ीरोइंग करना आम तौर पर पूरी ड्राइव को शून्य करने की तुलना में बहुत तेज़ होने के दौरान इन समस्याओं से बचाएगा।


4
धन्यवाद। यह जवाब मुझे सबसे ज्यादा मिल रहा है जो मैं ढूंढ रहा था। दोनों आदेशों का उपयोग देरी के बाद किया जाता है। वे एक डिस्क को साफ करने के लिए पुन: उपयोग करने के लिए उपयोग किया जाता है।
JH

expr blockdev --getsz /dev/sda - 4096एक वाक्यविन्यास त्रुटि होगी expr। मुझे लगता है कि इरादा कमांड था ...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"। या बेहतर:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
स्टीफन चेज़लस

1
मेरा अनुमान है कि कमान में मूल रूप से बैकटिक्स थे और वे किसी समय खा गए।
प्लग

16

यह आपकी हार्ड ड्राइव के पहले 4096*4096=16MBऔर अंतिम को मिटा देगा 512*4096=2MB, जिसमें पुनर्प्राप्ति के लिए उपयोगी महत्वपूर्ण संरचनाएं हैं। मुझे लगता है कि यह कोड दुर्भावनापूर्ण तरीके से पोस्ट किया गया था।

मैंने कभी ऐसी स्थिति का सामना नहीं किया है जहां एक countदूसरे को स्पष्ट रूप से निर्दिष्ट करना 1उपयोगी था। मैं है पहले खंड मिट अगर मैं सुनिश्चित करने के लिए मैं एमबीआर के पीछे के किसी भी संकेत छोड़े नहीं किया गया था चाहता था ...


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

1
@shelvacu मुझे आश्चर्य होगा अगर ड्राइव ने इस तरह से हेरफेर किया sda। अधिक संभावना sdbया sdc। लेकिन मैं गलत हो सकता है ...
यो '

7
यह दुर्भावना नहीं है। यह डिस्क की शुरुआत में GPT और डिस्क के अंत में बैकअप GPT मिटा देता है।
माइकल हैम्पटन

2
@ शालवु: यह विनाशकारी है। यदि विनाशकारी आदेश यह क्या करता है की व्याख्या के बिना पोस्ट किया गया था, यह दुर्भावनापूर्ण है। यदि वे एक स्पष्टीकरण के साथ थे, तो ओपी यहां क्यों पूछ रहा है?
बेन वोइग्ट

2
तो, जो अपने संपूर्ण दिमाग में, अपने उद्देश्य को जाने बिना कहीं भी पाए गए कोड / पेस्ट को कॉपी करेगा? दुर्भावनापूर्ण नहीं है क्योंकि मैं मेट्रो में पाए जाने वाले किसी भी अजीब उपकरण को नहीं हिलाऊँगा।
मैग्नो सी

4

वे आदेश आपके sda डिवाइस को शून्य के साथ अधिलेखित कर देंगे - पहला 16MB (4096 का ब्लॉक आकार और 4096 ब्लॉक की गणना) करेगा और दूसरा दूसरा शून्य (4096 ब्लॉक के साथ 512 ब्लॉक) को फिर से लिखेगा। (यह तकनीकी रूप से मिटा नहीं है, और यह मेरे पहले बिंदु से संबंधित है।)

(यह वह हिस्सा था जो पहले से ही अन्य उत्तर में उल्लिखित है, इसमें पूर्णता के लिए यहां भी शामिल है)

एक और बात जो ध्यान देने योग्य है, वह यह है कि ब्लॉक साइज पर प्रभाव पड़ता है, लेकिन वे आम तौर पर केवल उच्च-मात्रा संचालन पर देखे जाते हैं। कमांड को निष्पादित करने का सबसे कुशल (सबसे तेज़) तरीका है यदि कमांड का ब्लॉक आकार डिवाइस के एक्सेस आकार से मेल खाता है, अन्यथा समय बर्बाद हो जाता है।

यदि आप रुचि रखते हैं, तो आप एक मिलियन 1-ब्लॉक विखंडू के साथ एक फ़ाइल बनाने की कोशिश कर सकते हैं, और 1 मिलियन ब्लॉक विखंडू के साथ एक फ़ाइल देखें:

[user@host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s

real    0m2.447s
user    0m0.177s
sys     0m2.269s
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s

real    0m0.003s
user    0m0.001s
sys     0m0.002s
[user@host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test2

जैसा कि आप देख सकते हैं, दक्षता पर बड़े पैमाने पर प्रभाव पड़ता है। यह शायद ओपी के लिए एक साइडबार है, लेकिन मुझे लगता है कि यह अभी भी प्रासंगिक है।

टीएल; डीआर: आप नेट पर मिलने वाले मनमाने कोड को निष्पादित नहीं करते हैं, या जिस पर आप भरोसा नहीं करते हैं वह आपको देता है। यह आपका दिन बर्बाद कर देगा।


7
Don't execute arbitrary code you find on the netलाइन के लिए +1
सर्गी कोलोडियाज़नी

7
"ध्यान दें कि यह प्रक्रिया अत्यंत थकाऊ और / या महंगी है और इसके लिए अत्यंत विशिष्ट उपकरणों की आवश्यकता है।" इस गलत सूचना को फैलाना बंद करो। पिछली बार यह सैद्धांतिक रूप से भी संभव था दशकों पहले तकनीक पर जो अब कई पीढ़ियों पुरानी है। पुरस्कार की रकम के साथ सार्वजनिक चुनौतियों के जवाब में, आधुनिक ड्राइव पर किसी ने भी इस तरह की वसूली नहीं की है, जैसे hostjury.com/blog/view/195/…
एंड्रयू मेडिको

मैंने उस सेक्शन को हटा दिया - लगता है कि जब से मैंने पहली बार इस बारे में सुना है, तब से कुछ समय हो गया है। मैं हालांकि कहूंगा, कि "सैद्धांतिक रूप से" ऑपरेटिव शब्द था, लेकिन मैं पचाता हूं।
टिम एस।

2

दूसरों ने समझाया कि वे क्या करते हैं, इसलिए मैं इसे छोड़ दूँगा।

ddअलग bsऔर countतर्क रखने की बात यह है कि यह bsनियंत्रित करता है कि एक बार में कितना लिखा जाए । के लिए वास्तव में बड़े मूल्यों को निर्दिष्ट करना bsक्योंकि गिरी (डिवाइस के लिए लिखने के लिए एक पूरे ब्लॉक का निर्माण करने के लिए इस तरह यह कर सकते हैं मामलों में कार्यक्रम में एक बहुत बड़ी बफर की आवश्यकता होगी, और डिवाइस के ब्लॉक आकार से कम मानों को निर्दिष्ट धीमी गति से हो जाएगा शायद पूरी तरह से ब्लॉक होने तक लिखते हैं, अन्य मामलों में यह पढ़ना हो सकता है कि डिस्क पर पहले से क्या है)। के रूप में दो आदेशों के लिए विभिन्न मूल्यों का उपयोग करते हैं bs, जो मुझे यह सोचने के लिए प्रेरित करता है कि आपने उन्हें दो अलग-अलग साइटों पर पाया होगा। हार्ड डिस्क में ब्लॉक बाइट का आकार 512 बाइट्स होता था, जो इसके अनुरूप होता हैbs=512बाद की कमान, लेकिन कुछ (6-8 मुझे लगता है) वर्षों पहले उन्होंने 4096 बाइट्स के ब्लॉक आकार के साथ डिस्क बनाना शुरू कर दिया था, जो bs=4096आधुनिक डिस्क के लिए बेहतर विकल्प बनाते हैं ।


1
के लिए मीठे स्थान की bsतुलना में बहुत अधिक है । एक एकल SATA कमांड कई सेक्टर्स को पढ़ या लिख ​​सकता है, इसलिए कर्नेल I / Os को बाहर भेजने से पहले विलय कर देता है। कहीं से भी bs=64kकरने के लिए bs=1024kउचित है (एल 3 कैश आकार अक्सर 4-8MiB है)। मैं अक्सर उपयोग करता हूं bs=128k, जो आधुनिक इंटेल सीपीयू पर एल 2 कैश आकार का आधा है। ( ddदो मेमरी संचालन शामिल हैं: read(2)स्रोत से (भले ही यह / dev / शून्य हो), और write(2)IIRC, sddमें शून्य लिखने का विकल्प था, जो कि सीपीयू के समय की थोड़ी बचत करेगा। वास्तव में केवल प्रासंगिक अगर गंतव्य कुछ है। एक डिस्क के अलावा)।
पीटर कॉर्डेस

I / O अनुरोध को मर्ज करते हुए देखने के लिए iostat -x 4, या कुछ के आउटपुट को देखें , और rrqm / s (प्रति सेकंड मर्ज किए गए अनुरोध पढ़ें) और wrqm / s कॉलम पर ध्यान दें।
पीटर कॉर्डेस

1

चेतावनी: dd if=/dev/zero of=/dev/ डेटा की प्रतिलिपि बनाने से पहले किसी ड्राइव या डिवाइस को साफ़ करने के लिए उपयोग किया जाता है। क्रॉस संदूषण को कम करने के लिए फोरेंसिक जांच के तहत एक प्रणाली से जानकारी की नकल करने से पहले ड्राइव या डिवाइस को हमेशा साफ करना चाहिए। इसलिए, यह एक खराब कमांड नहीं है, एंड-यूज़र को यह समझना चाहिए कि इसका क्या उपयोग किया जाता है या वे अपने डेटा को नष्ट कर देंगे। यदि यह आपकी इच्छा है तो शून्य लेखन ऑपरेशन को सत्यापित करने के लिए करें dd if=/dev/sda | hexdump -C | head

स्रोत: डॉ। डैरेन हेस द्वारा कंप्यूटर फोरेंसिक जांच के लिए एक व्यावहारिक गाइड


1

मैं dd if=/dev/zero of=/dev/sdX oflag=syncएक सम्मिलित USB ड्राइव या माइक्रोएसडी कार्ड की गुणवत्ता का परीक्षण करने के लिए उपयोग करता हूं इससे पहले कि मैं वास्तव में इसे gparted, fdisk, या dd के साथ डिस्क छवि के साथ उपयोग करता हूं। मुझे लगता है कि यह एक विवेकपूर्ण विचार है, विशेष रूप से माइक्रोएसडी मीडिया के साथ जो गुणवत्ता का खराब इतिहास है।

बेशक, = sdX के साथ सावधान रहें क्योंकि आकस्मिक डिस्क के पोंछे के साथ कोई माफी नहीं है। इच्छित लक्ष्य का X = ड्राइव अक्षर सत्यापित करें।

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