कच्चे ब्लॉक उपकरणों की तुलना


12

क्या कोई उपयोगिता (या कुछ शेल मैजिक) है जो मुझे दो ब्लॉक उपकरणों की तुलना करने की अनुमति देती है?

विवरण: मेरे पास एक बड़ा (0.5 टीबी) RAID डिवाइस है जिसे मैंने dd का उपयोग करके थोड़ा बड़े SATA डिवाइस के लिए बैकअप दिया है। इस पर डिवाइस के कई विभाजन हैं, हालांकि मैं 'पैरेंट' डिवाइस से कॉपी करता हूं और न कि पार्टीशन डिवाइस नोड्स (उदाहरण के लिए, मैं कॉपी / डेव / एचडीए और नहीं / देव / एचडीए 1)।

मैं यह सत्यापित करना चाहूंगा कि बैकअप अच्छा / सही है।

मैंने प्रत्येक डिवाइस पर md5sum चलाने के बारे में सोचा है, हालांकि यह मुझे सटीक परिणाम नहीं देगा क्योंकि दूसरा डिवाइस पहले की तुलना में थोड़ा बड़ा है और इस प्रकार अतिरिक्त बाइट्स हैश को बदल देगा।

जवाबों:


13

मैं कमांड का उपयोग करूंगा

cmp /dev/hda /dev/hdb

यह पहले अलग-अलग बाइट पर रुकेगा, इसकी भरपाई, या छोटे पर EOF पर लिखेगा।


मैं EOF पर रुकने के बारे में मैनपेज में कुछ नहीं देखता, क्या वह कहीं दस्तावेज है?
केविन

वास्तव में, बाहर निकलने की स्थिति कहती है: "1: फाइलें अलग हैं; इसमें वह मामला शामिल है जहां एक फाइल दूसरे के पहले के समान है।" इससे यह प्रतीत होता है कि यदि यह छोटा है तो यह उन्हें समान नहीं बताता है।
केविन

@ केविन: से info cmp: "'सीपीएम' कमांड दो फाइलों की तुलना करता है, और यदि वे अलग-अलग होते हैं, तो पहली बाइट और लाइन नंबर को बताता है कि वे कहां भिन्न हैं।"
एनजोतिब

1
आप गैर-शून्य स्थिति से बाहर निकलने के बिना छोटे ड्राइव (या विभाजन सीमा) के अंत में रोकने के लिए छोटे डिवाइस के बाइट्स के --bytes=LIMITलिए LIMITमान सेट करते हुए विकल्प का उपयोग कर सकते हैं cmp
rozcietrzewiacz

अगर मेरे पास / dev / sda की कॉपी / dev / loop0 और मैं / dev / loop0 में परिवर्तन करता हूं, तो मैं / dev / sda में नए बदलाव कैसे जोड़ सकता हूं ?? धन्यवाद
Milor123

2

वास्तव में ड्राइव कितने भरे हुए हैं, इस पर निर्भर करते हुए, फ़ाइल सिस्टम को माउंट करना और करना सबसे तेज़ हो सकता है

diff -qr /mnt/root1 /mnt/root2

अन्यथा, मैं कुछ इस तरह कहूंगा:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

जाहिर है यह पता लगाने के लिए कि आपको कितना बड़ा बनाने की जरूरत है bsऔर countछोटी ड्राइव के अंत में (या इससे पहले कि अगर यह अधिक सुविधाजनक है)।

या, enzotib की टिप्पणी के लिए धन्यवाद, ऐसा लगता है कि आप उपयोग कर सकते हैं cmp, लेकिन आपको -nदो ड्राइव के छोटे से बाइट की संख्या को सीमित करने के लिए ध्वज की आवश्यकता होगी ।

cmp /dev/sda /dev/sdb -n 500GB

दुर्भाग्य से मैं डिवाइस को इसके NTFS वॉल्यूम के रूप में माउंट करने में असमर्थ हूं, और मेरे पास इस पर सही ड्राइवरों के बिना एक लाइवसीडी है। दूसरे आदेश के लिए आपके द्वारा उपयोग किए जाने वाले उपखंड इस उपकरण को अलग-अलग खिलाने से पहले पूरे उपकरण को स्मृति में चूसने की कोशिश नहीं करते हैं?
अलंक्सज़

1
@alanxz नहीं, उपधाराएँ diffलिखने से पहले पूरे उपकरण को नहीं पढ़ेगी । इसे पढ़ने के तुरंत बाद बाइट्स ddलिखते हैं bs(या यदि निर्दिष्ट किया गया है तो प्रसंस्करण), और वे fifoएस को लिखते हैं , जो तब तक ब्लॉक होते हैं जब तक वे पढ़ नहीं जाते हैं।
केविन

मैं शेल स्तर पर अधिक सोच रहा था (या जो भी फीफो को लागू करता है)। लेकिन वह मेरे सवाल का जवाब देता है!
अलंक्सज़

2

आप बाइनरी डिफ सॉफ्टवेयर की तलाश कर रहे हैं

rdiff
को बैकअप और नेटवर्क ट्रांसमिशन के लिए डिज़ाइन किया गया है, rdiff- बैकअप और बैकअप प्रोज़्यू के लिए डुप्लिकेट देखें

xdelta3
एक ओपन-सोर्स बाइनरी डिफरेंस, डिफरेंशियल कम्प्रेशन टूल्स, VCDIFF (RFC 3284) डेल्टा कम्प्रेशन है।

bsdiff
भी है !! मेमोरी भूख, ब्लॉक उपकरणों के लिए उपयुक्त नहीं है।


1

Bsdiff नाम की एक उपयोगिता है , जो इस तरह का काम करती है। यह वास्तव में तेजी से करता है, और यदि आवश्यक हो तो यह एक बाइनरी पैच उत्पन्न करने में सक्षम है।

इसके चारों ओर कुछ स्पष्टीकरण के लिए इस पोस्ट को देखें ।


bsdiffनौकरी केवल दो फाइलों की तुलना में अधिक जटिल है, इसलिए मुझे संदेह है कि यह सरल से तेज हो सकता है cmp
20 नवंबर को एनजोटिब

लिंक टूट गया है।
ओवेन पॉलिंग

1

आप md5sumइस तरह का उपयोग करके दो अलग-अलग आकार के ब्लॉक उपकरणों की तुलना कर सकते हैं :

(यह मानते हुए कि छोटा उपकरण है /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

0

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

यदि आप एक पूर्ण चेकसम चाहते हैं, तो आप बैकअप और md5sum के आंतरिक 'विभाजनों' को अलग-अलग देखने के लिए ऑफ़सेट के साथ लूपबैक उपकरणों का उपयोग कर सकते हैं, लेकिन एक मजबूर fsckआपको बाइट या चेकसम कम्प्यूट्स के लिए बाइट की तुलना में बहुत तेजी से एक मूल विचार दे सकता है।

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