इन डुप्लिकेट किए गए SD कार्डों में उनकी सामग्री के लिए अलग-अलग sha1sums क्यों हैं?


17

मेरे पास विभिन्न निर्माताओं से कक्षा 10 यूएचएस -1 एसडीएचसी एसडी कार्ड का एक गुच्छा है। वे सभी इस प्रकार विभाजित हैं

 $ sudo fdisk -l /dev/sdj
Disk /dev/sdj: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0000de21

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdj1          2048  1050623  1048576  512M  c W95 FAT32 (LBA)
/dev/sdj2       1050624  2099199  1048576  512M 83 Linux
/dev/sdj3       2099200  3147775  1048576  512M 83 Linux
/dev/sdj4       3147776 31116287 27968512 13.3G 83 Linux

मैंने छवियों को कॉपी करने के लिए मेमोरी कार्ड डुप्लिकेट का उपयोग किया । सभी कार्डों में समान सामग्री है।

जब मैं किसी भी दो एसडी कार्ड के दूसरे विभाजन को माउंट करता हूं और सामग्री की तुलना करता हूं, तो वे बिल्कुल समान हैं।

 $ sudo mount -o ro /dev/sdg2 /mnt/system-a/
 $ sudo mount -o ro /dev/sdj2 /mnt/system-b/
 $ diff -r --no-derefence /mnt/system-a /mnt/system-b/
 $ # prints nothing^

हालांकि, अगर मैं विभाजन के sha1sum की तुलना करता हूं, तो वे कभी-कभी भिन्न होते हैं

 $ sudo dd if=/dev/sdg2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.3448 s, 43.5 MB/s
ee7a16a8d7262ccc6a2e6974e8026f78df445e72  -

 $ sudo dd if=/dev/sdj2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.6412 s, 42.5 MB/s
4bb6e3e5f3e47dc6cedc6cf8ed327ca2ca7cd7c4  -

अजनबी, अगर मैं बाइनरी डिफरिंग टूल की तरह इन दो ड्राइव की तुलना करता हूं, तो मुझे radiff2निम्नलिखित दिखाई देता है

 $ sudo dd if=/dev/sdg2 of=sdg2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2378 s, 43.9 MB/s

 $ sudo dd if=/dev/sdj2 of=sdj2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2315 s, 43.9 MB/s

 $ radiff2 -c sdg2.img sdj2.img
767368

767368 परिवर्तन, भले ही diffसामग्री में कोई अंतर नहीं देखा!

और पवित्रता के लिए, यदि मैं दो विभाजनों की तुलना करता हूं, जिसमें समान shassum था, तो मैं निम्नलिखित देखता हूं

 $ radiff2 -c sdj2.img sdf2.img
0

0 परिवर्तन!

यहाँ अलग-अलग कार्डों से मेरे द्वारा देखे जाने वाले विभिन्न sha1sums का टूटना है। ऐसा लगता है कि कार्ड के निर्माता का इस बात पर बड़ा प्रभाव है कि मुझे ड्राइव को पढ़ने के लिए dd का उपयोग करने पर मुझे क्या sha1sum मिलता है।

यहां छवि विवरण दर्ज करें

Sha1sums में अंतर के बावजूद, ये सभी कार्ड मेरे उद्देश्यों के लिए काम करते हैं। हालाँकि, यह पूर्णता जाँच मुश्किल बना रहा है क्योंकि मैं sha1sums की तुलना नहीं कर सकता।

यह कैसे संभव है दो एसडी कार्ड विभाजन में अलग-अलग sha1sums हो सकते हैं, फिर भी माउंट होने पर सटीक समान सामग्री हो सकती है?


उत्तर: तो अब यह उम्मीद के मुताबिक काम करता है। चीजों को स्पष्ट करने के लिए, असंगतता SySTOR अनुलिपित्र I का उपयोग कर रहा था। मेरे पास इसकी प्रतिलिपि बनाने के लिए इसमें प्रतिलिपि बनाई गई विभाजन जानकारी और फ़ाइलों का उपयोग किया गया था, लेकिन यह सुनिश्चित करने के लिए बिट्स को आवश्यक नहीं था कि एक-से-एक मैच था।


3
इस तरह के कार्डों के साथ आप किस तरह का परीक्षण कर रहे हैं? :)
hjk

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

जवाबों:


18

क्या आपने डुप्लिकेट सामग्री लिखने के तुरंत बाद उनकी सामग्री की तुलना की ? यदि हाँ, तो उन्हें बिल्कुल समान होना चाहिए । उदाहरण के लिए,

# Duplicate
dd bs=16M if=/dev/sdg of=/dev/sdk

# Comparing should produce no output
cmp /dev/sdg /dev/sdk
# Compare, listing each byte difference; also no output
cmp -l /dev/sdg /dev/sdk

यह केवल तभी सच है जब कार्ड का आकार बिल्कुल एक जैसा हो। कभी-कभी, कार्ड के अलग-अलग बैच जो एक ही निर्माता और मॉडल होते हैं, वे थोड़े अलग आकार के होते हैं। blockdev --getsize64डिवाइस का सटीक आकार प्राप्त करने के लिए उपयोग करें ।

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

एक बार जब आप डिवाइस पर कोई फाइल सिस्टम माउंट करते हैं, तो आपको अंतर दिखाई देने लगेगा। फाइलसिस्टम कार्यान्वयन फाइल सिस्टम के लिए विभिन्न चीजों को लिखेगा, जैसे कि खाली पत्रिका, या ध्वज / टाइमस्टैम्प को फाइलसिस्टम को साफ करने के लिए चिह्नित करना, और फिर आपको समान सामग्री दिखाई नहीं देगी। मेरा मानना ​​है कि यह कुछ परिस्थितियों में हो सकता है, भले ही आप फ़ाइल-सिस्टम को केवल पढ़ने के लिए माउंट करें।


क्या ओपी को उपयोग करने की आवश्यकता है blockdev --getsize64? ऐसा लगता ddहै कि वह उस डेटा की मात्रा की घोषणा कर रहा है जिसे वह पढ़ता है।
जी-मैन का कहना है कि 'मोनिका'

3
EIBTI। आकार को छोड़ना यह वास्तव में स्पष्ट करता है। ddरिपोर्ट करेगा कि इसकी कितनी नकल हुई । छवि फ़ाइल के बीच आकार के बेमेल के मामले में, एक डिवाइस का आकार, और दूसरे डिवाइस का आकार, आदि ... जो स्रोत, desination या दोनों का आकार हो सकता है।
सेलाडा

आप सही हे। उन्हें होना चाहिए और वे बिल्कुल समान हैं। आगे इस पर गौर करने के बाद, मैंने पाया कि विसंगति मेरे SySTOR अनुलिपित्र पर कॉपी सेटिंग के कारण हुई थी। जब मैं ddअपने कंप्यूटर से एसडी कार्ड (जैसा कि मैंने डुप्लिकेट के लिए मास्टर छवि के साथ किया था), सभी शम्स मैच करते हैं। मैंने "सिस्टम और फाइल्स डेटा" से सिस्टॉर पर सेटिंग्स को "पूरे मीडिया" में बदल दिया और अब सभी डुप्लिकेट किए गए कार्ड में मैचिंग शम्स हैं
पेसक

8

सेलडा के उत्तर का निर्माण करने के लिए: एक तरफ, आप diffदो माउंटेड फाइल सिस्टम के बीच एक (पुनरावर्ती) कर रहे हैं । दूसरी ओर, आप उन उपकरणों के बीच एक द्विआधारी तुलना कर रहे हैं, जिनके पास फाइल सिस्टम हैं - जाहिर है, जब आपने फाइल सिस्टम को माउंट किया है। वह सेब और अनार है।

माउंटेड फ़ाइल सिस्टम स्तर पर ऑपरेशन केवल फाइल सिस्टम में फ़ाइलों की डेटा सामग्री देख सकता है। उपकरणों के बीच द्विआधारी तुलना डेटा और मेटाडेटा को देखती है । मैं 767368 मतभेदों से थोड़ा हैरान हूं, लेकिन मैं कुछ अनुमान लगा सकता हूं:

  • जब आप किसी फाइलसिस्टम को माउंट करते हैं, तो कर्नेल को फाइल सिस्टम सुपरब्लॉक में वर्तमान समय को "माउंट टाइम" के रूप में लिखते हैं। यदि आपने दोनों डिवाइस माउंट किए हैं (और ठीक उसी समय नहीं), तो सुपरब्लॉक में "माउंट बार" अलग-अलग होंगे।
  • यदि आप पुनरावर्ती फ़ाइल सिस्टम के बाद डिवाइस-स्तरीय बाइनरी की तुलना करते हैं diff, तो प्रत्येक डिवाइस की प्रत्येक फ़ाइल का अद्यतन समय (इनोड में) अपडेट होगा।

पुनश्च क्या आपको ddइतना उपयोग करने की आवश्यकता है ? यदि आप करते हैं radiff2 -c /dev/sdg2 /dev/sdj2 या क्या होता है sha1sum /dev/sdg2?


क्या यह तब भी लागू होता है जब ड्राइव को रीड-ओनली के रूप में बढ़ते हैं? मैंने बढ़ती से पहले शम्स की तुलना की है और वे अभी भी अलग हैं। मैंने भी कभी नहीं देखा है कि केवल पढ़ने के बाद बढ़ते हुए शम्स बदल जाते हैं। - इसके अलावा, आप सही कह रहे हैं, मुझे dd अवार्ड का बेकार उपयोग जीतना चाहिए: p
peskal

(1) नहीं, जैसा कि आपको संदेह है (यानी, आपके अनुभव के अनुरूप), एक फाइल सिस्टम को बढ़ते हुए ro(केवल पढ़ने के लिए) किसी भी संशोधन का कारण (या अनुमति) नहीं देना चाहिए । (हालांकि मैंने सॉफ्टवेयर के एक या दो मामलों को देखा है कि इसके अलावा कुछ और क्या करना चाहिए।) (2) आपकी टिप्पणियों को पढ़ने के बाद (प्रत्येक उत्तर में, इस लेखन के समय), मुझे अभी भी समझ में नहीं आया कि क्या हो गई। क्या आप कृपया अपने प्रश्न को संपादित करेंगे या उन परिस्थितियों के बारे में बताते हुए एक उत्तर देंगे, जिनके तहत आपको तुलनात्मक विफलता मिली (यानी, यह अंतर पाया गया) नकल करने के तुरंत बाद (बढ़ते से पहले), ... (Cont'd)
G-Man Says 'Reinstate Monica'

(Cont'd) ... और आपने इसे हल करने के लिए क्या किया? (3) मुझे यह पसंद है, लेकिन क्या इसे "यूयूओडी", "यूयूओडीडी" या "यूयूडीडी" कहा जाना चाहिए? मैं "यूयूडीडी" के लिए वोट करता हूं, लेकिन हमें शायद मेटा पर इसे लेना चाहिए। :
जी-मैन का कहना है कि 'मोनिका'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.