डिस्क विभाजन में dd परिणाम का उपयोग कर यादृच्छिक डेटा क्यों लिखता है?


11

ddकमांड चलाने से पहले , कमांड lsblkनीचे दिया गया आउटपुट देता है:

NAME              MAJ:MIN  RM   SIZE    RO TYPE  MOUNTPOINT
sda               8:0       0    931.5G  0  disk  

कमांड dd if=/dev/urandom of=/dev/sda conv=fsync status=progressचलाया जाता है। डिवाइस हालांकि बिजली खो देता है और बंद हो जाता है। जब बिजली बहाल होती है, तो कमांड lsblkनिम्न आउटपुट देता है:

NAME              MAJ:MIN     RM   SIZE    RO TYPE  MOUNTPOINT
    sda           8:0          0   931.5G  0  disk 
      sda2        8:2          0   487.5G  0  disk

@RuiFRibeiro - सादृश्य के लिए धन्यवाद, हालांकि यह स्पष्ट नहीं है कि ddविभाजन में परिणाम क्यों होगा, खासकर अगर कमांड का उद्देश्य डिस्क को मिटा देना है?
प्रेरित

1
संयोग: यह बिजली कटौती से संबंधित होने की बहुत अधिक संभावना है। आप डिवाइस पर यादृच्छिक डेटा लिखते हैं। इस यादृच्छिक डेटा में से कुछ पहले कुछ ब्लॉकों में गए, यह वह जगह है जहां विभाजन तालिकाएं रहती हैं। आपने शायद एक विभाजन को परिभाषित किया है।
ctrl-alt-delor-

क्या आप file /dev/sda*और का परिणाम पोस्ट कर सकते हैं sudo fdisk -l /dev/sda*?
फुलेवव

@phuclv - जैसा कि मैंने प्रक्रिया शुरू कर दी है, क्या आउटपुट अभी भी मूल्यवान होगा?
प्रेरित

1
@ नोट ध्यान दें कि ddउद्देश्य डिस्क को मिटाने के लिए प्रति-से नहीं है। डिस्क पर यादृच्छिक डेटा लिखना यादृच्छिक परिणाम उत्पन्न कर सकता है।
जेजमोंटेस

जवाबों:


20

कई संभावनाएँ:

  • लिनक्स कई अलग-अलग विभाजन तालिका प्रकारों का समर्थन करता है, जिनमें से कुछ बहुत कम जादुई बाइट्स का उपयोग करते हैं, और फिर यादृच्छिक डेटा (*) की गलत पहचान करना आसान है [इसलिए यह संभव है कि कुछ हद तक "वैध" विभाजन तालिका] उत्पन्न हो।

  • कुछ विभाजन तालिका प्रकारों में डिस्क के अंत में बैकअप (साथ ही विशेष रूप से जीपीटी) होता है और अगर ड्राइव की शुरुआत को यादृच्छिक कचरे के साथ बदल दिया गया था, तो इसे उठाया जा सकता है।

  • डिवाइस ठीक से काम नहीं करता है और डेटा लिखने से पहले इसे डिस्कनेक्ट कर दिया गया था, या पुराने डेटा को वापस लौटाता है, इसलिए विभाजन तालिका बच जाती है। कभी-कभी यूएसबी स्टिक के साथ ऐसा होता है।

  • ...

(*) यादृच्छिक डेटा के साथ 1000 फाइलें बनाएं और देखें कि क्या निकलता है:

$ truncate -s 8K {0001..1000}
$ shred -n 1 {0001..1000}
$ file -s {0001..1000} | grep -v data
0099: COM executable for DOS
0300: DOS executable (COM)
0302: TTComp archive, binary, 4K dictionary
0389: Dyalog APL component file 64-bit level 1 journaled checksummed version 192.192
0407: COM executable for DOS
0475: PGP\011Secret Sub-key -
....

रैंडम-श्रेडिंग ड्राइव का लक्ष्य पुराने डेटा को अच्छे के लिए गायब करना है। कोई वादा नहीं है कि ड्राइव खाली, अप्रयुक्त, बाद में प्राचीन स्थिति में दिखाई देगा।

इसे प्राप्त करने के लिए शून्य वाइप के साथ पालन करना आम है। यदि आप LVM का उपयोग कर रहे हैं, तो LVM के लिए सामान्य है कि आप किसी भी LV के पहले कुछ सेक्टर्स को शून्य कर दें जिससे आप पुराने डेटा को बाधित नहीं करेंगे।

wipefsपुराने मैजिक बाइट हस्ताक्षरों से छुटकारा पाने के लिए एक समर्पित उपयोगिता ( ) भी है जिसका उपयोग आप फाइलसिस्टम और विभाजन तालिका मेटाडेटा से छुटकारा पाने के लिए कर सकते हैं।


पूर्व में ATA Secure Erase कमांड का उपयोग कर उपकरणों को मिटा दिया गया था। मुझे लगता है कि यह डेटा को ऐसे हटा देगा कि 1. यह अपरिवर्तनीय है 2. कोई विभाजन जानकारी नहीं बचती है। यदि यह सच है, तो क्या आपके कहने का अर्थ है कि ddकमांड को चलाने के दौरान , बाधित होने पर रैंडम डेटा का उत्पादन उन डेटा के परिणामस्वरूप हो सकता है जो विभाजन तालिकाओं को देखते हैं? इसके अलावा ये SATA हार्ड डिस्क (गैर-एसएसडी) हैं।
प्रेरित

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

हां विभाजन तालिका केवल 64 बाइट्स है, (अंत में) विभाजन प्रकार केवल 1 बाइट है, और प्रविष्टियों को वैध या अनुक्रमिक होने की आवश्यकता है। इसलिए एमबीआर पर पहले क्लस्टर / सेक्टर / 512 बाय को शून्य करना समझदारी है। आप अप्रत्याशित बूट व्यवहार भी नहीं चाहते हैं, कम संभावना है, लेकिन अभी भी एक जोखिम है।
mckenzm

18

जैसा कि यहां देखा गया है, एमबीआर (मास्टर बूट रिकॉर्ड) अपेक्षाकृत सरल है; https://en.wikipedia.org/wiki/Master_boot_record

जब आप उपयोग करते हैं /dev/urandomतो आप हमेशा कुछ ऐसा बना सकते हैं जो विभाजन तालिका की तरह दिखता है। समाधान विभाजन तालिका क्षेत्रों को शून्य से भरना है और dev/urandomबाकी के लिए उपयोग करना है।

लिनक्स अन्य अतिरिक्त डिस्क प्रारूपों का भी समर्थन करता है जो संभावित रूप से ट्रिगर हो सकते हैं, जिससे यादृच्छिक डेटा के साथ भरने पर "अमान्य" विभाजन दिखाई देते हैं।


13

मास्टर बूट रिकॉर्ड के रूप में 512 बाइट्स के संग्रह को परिभाषित करने वाली चीज 0x55 0xAAअंत में मूल्यों की उपस्थिति है । इस /dev/urandomतरह के मूल्य का उत्पादन करने का 1-इन-65,536 मौका है : बहुत अधिक संभावना नहीं है, लेकिन हर समय ऐसी ही अनुचित चीजें होती हैं।

(कुछ अन्य विभाजन सारणी, जैसे कि Apple विभाजन मानचित्र में समान रूप से छोटे हस्ताक्षर हैं। यह संभव है कि आपने उनमें से किसी एक को उत्पन्न किया है।)


3

क्या इस तरह का विभाजन उस डिस्क पर कुछ समय पहले मौजूद था? यदि डिस्क GPT का उपयोग करता है, तो शायद द्वितीयक GPT हेडर बहाल हो गया और इसमें अभी भी पुरानी विभाजन तालिका थी।

https://en.wikipedia.org/wiki/GUID_Partition_Table

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