मैं कैसे सत्यापित कर सकता हूं कि 1TB फाइल सही तरीके से स्थानांतरित की गई है?


25

मैं अक्सर लंबी अवधि के भंडारण के लिए हाइपरविज़र से एक संग्रह सर्वर पर वीएम छवियों को स्थानांतरित करता हूं।

मैं netcat का उपयोग करके स्थानांतरण करता हूं क्योंकि यह scp, rsync, ect से तेज है।

hypervisor$ cat foo.box | nc <archive IP> 1234

archive$ nc -l -p 1234 > foo.box

जब फ़ाइल स्थानांतरित हो गई, तो मैंने सत्यापित किया md5sumकि लक्ष्य और स्रोत दोनों पर चलने से कोई भ्रष्टाचार नहीं हुआ ।

दुर्भाग्य से, बड़ी फाइल पर md5sum चलाने में बहुत लंबा समय लग सकता है। मैं दो बड़ी फ़ाइलों की अखंडता की तुलना कैसे कर सकता हूं?

अद्यतन करें:

  • मेरा प्रसारण शायद ही कभी बाधित होता है, इसलिए पुनः आरंभ करने की क्षमता कोई समस्या नहीं है।
  • आम तौर पर NC के माध्यम से स्थानांतरित करने के लिए 3-4 घंटे लगते हैं और फिर md5sum प्राप्त करने के लिए 40 मिनट लगते हैं।
  • इस मामले में हैश की सुरक्षा कोई मुद्दा नहीं है।

2
आप अलग अलग चेकसम की कोशिश कर सकते: en.wikipedia.org/wiki/Checksum । मैं हालांकि उनके प्रदर्शन के बारे में नहीं जानता
tumchaaditya

वास्तविक हस्तांतरण में कितना समय लगता है, और md5sum को कितना समय लगता है?
कीथ थॉम्पसन

स्थानांतरण आम तौर पर 3-4 घंटे के बीच होता है, और md5sums गणना करने के लिए लगभग 40 मिनट लगते हैं।
tbenz9

जवाबों:


18

आप इस तरह से कुछ के साथ मक्खी पर योग करने के लिए टी का उपयोग कर सकते हैं (अपनी आवश्यकताओं के लिए नेटकैट कमांड को अनुकूलित करें):

सर्वर:

netcat -l -w 2 1111 | tee >( md5sum > /dev/stderr )

ग्राहक:

tee >( md5sum > /dev/stderr ) | netcat 127.0.0.1 1111

1
बस एक विचार: md5deep"चंक" मोड है ( md5deep.sourceforge.net/md5deep.html ) जो इसके लिए उपयोगी हो सकता है।
लॉरेंस सी

@ultrasawblade - यह बहुत बढ़िया लिंक है, मुझे अन्य उद्देश्यों के लिए इसे देखना होगा। इसका उल्लेख करने के लिए धन्यवाद!
nerdwaller

10

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

लेकिन मैं कुछ जोड़ना चाहूंगा:

1 TiB / 40 मिनट 37 437 MiB / सेकंड 1

यह वास्तव में बहुत तेज है। याद रखें कि जब तक आपके पास बहुत अधिक रैम नहीं है, तब तक स्टोरेज से वापस आना होगा। इसलिए जांच करने के लिए पहली बात यह है कि iostat -kx 10जब आप अपने चेकसम को चलाते हैं , तो यह देखना है ; विशेष रूप से आप %utilकॉलम पर ध्यान देना चाहते हैं । यदि आप डिस्क (100% के पास) पेग कर रहे हैं, तो इसका उत्तर तेज़ स्टोरेज खरीदना है।

अन्यथा, जैसा कि अन्य पोस्टर में उल्लेख किया गया है, आप विभिन्न चेकसम एल्गोरिदम की कोशिश कर सकते हैं। MD4, MD5, और SHA-1 सभी क्रिप्टोग्राफ़िक हैश के लिए डिज़ाइन किए गए हैं (हालांकि उनमें से किसी का भी उस उद्देश्य के लिए उपयोग नहीं किया जाना चाहिए; सभी को बहुत कमजोर माना जाता है)। गति के अनुसार, आप उनकी तुलना कर सकते हैं openssl speed md4 md5 sha1 sha256। मैं SHA256 में फेंक दिया है कम से कम एक अभी भी काफी मजबूत हैश है।

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md4              61716.74k   195224.79k   455472.73k   695089.49k   820035.58k
md5              46317.99k   140508.39k   320853.42k   473215.66k   539563.35k
sha1             43397.21k   126598.91k   283775.15k   392279.04k   473153.54k
sha256           33677.99k    75638.81k   128904.87k   155874.91k   167774.89k

उपरोक्त में से, आप देख सकते हैं कि MD4 सबसे तेज़ है, और SHA256 सबसे धीमा है। यह परिणाम पीसी-जैसे हार्डवेयर पर विशिष्ट है, कम से कम।

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

तो, आपकी सबसे अच्छी शर्त स्पीड-वार है openssl md4 -r( -rयह md5sum आउटपुट जैसा दिखता है)।

यदि आप कुछ संकलन और / या न्यूनतम प्रोग्रामिंग करने के लिए तैयार हैं, तो स्टैक ओवरफ्लो पर मार्क एडलर का कोड देखें और xxhash भी । यदि आपके पास एसएसई 4.2 है, तो आप हार्डवेयर सीआरसी निर्देश की गति को हरा नहीं पाएंगे।


1 1 टीआईबी = 1024⁴ बाइट्स; 1 मिब = 1024 Mi बाइट्स। To417MB / सेकंड की शक्तियों-1000 इकाइयों के साथ आता है।


यह तेज़ है, मैं एक बड़े RAID सरणी से दूसरे बड़े RAID सरणी में कॉपी कर रहा हूं।
tbenz9

@ tbenz9 मुझे लगा, कोई रास्ता नहीं है कि एक ही डिस्क है! मैंने कुछ वास्तविक फास्ट हैश में कुछ संकेत जोड़े हैं, जो दुर्भाग्य से कम से कम उन्हें संकलित करने की आवश्यकता होगी ... लेकिन वे निश्चित रूप से आपके डिस्क (या यहां तक ​​कि आपकी रैम) के रूप में तेजी से चलेंगे। (और अगर आप मार्क एडलर बनाम एडलर 32 के बारे में सोच रहे हैं, तो हाँ, यह एडलर 32 का निर्माता प्रतीत होता है)
अपमानजनक

@derobert, परीक्षण करने के लिए छोटी फ़ाइलों का उपयोग करने के बजाय, क्या आपको इसे 1TB जैसी बड़ी फ़ाइल के साथ परीक्षण नहीं करना चाहिए था?
पचेरियर

@derobert, आप shasumइसके बजाय का उपयोग क्यों नहीं करते ?
पचेरियर

@ स्पेसर है जो ओपनएसएसएल के बिल्ट-इन बेंचमार्क से आउटपुट है। अब ब्लॉक के साथ कोई संदेह नहीं है, यह थोड़ा तेज़ होगा, लेकिन रैंकिंग बदलने की संभावना नहीं है (यह सभी आकारों के अनुरूप था जो उसने परीक्षण किया था)। क्या Shasum में OpenSSL की तुलना में तेज़ कार्यान्वयन है? हालाँकि आजकल ईमानदारी से अगर आप तेज़ क्रिप्टोग्राफ़िक हैश चाहते हैं, तो आप BLAKE2 का उपयोग करेंगे।
derobert

9

opensslआदेश कई संदेश डाइजेस्ट का समर्थन करता है। जिन लोगों की मैं कोशिश कर पा रहा था, उनमें से md4लगभग 65% समय के लिए लगता है md5, और उस समय का लगभग 54% sha1(जिस फ़ाइल के साथ मैंने परीक्षण किया है)।

md2प्रलेखन में भी एक है, लेकिन यह के रूप में एक ही परिणाम देने के लिए लगता है md5

बहुत मोटे तौर पर, गति गुणवत्ता से विपरीत रूप से संबंधित प्रतीत होती है, लेकिन जब से आप (शायद) एक जानबूझकर टकराव पैदा करने वाले प्रतिकूल के बारे में चिंतित नहीं हैं, तो यह एक मुद्दा नहीं होना चाहिए।

आप पुराने और सरल संदेश पचा ( md1उदाहरण के लिए, वहाँ था ) के लिए चारों ओर देख सकते हैं ?

एक मामूली बात: आपको एक बेकार उपयोगcat मिल गया है । बजाय:

cat foo.box | nc <archive IP> 1234

आप उपयोग कर सकते हैं:

nc <archive IP> 1234 < foo.box

या और भी:

< foo.box nc <archive IP> 1234

ऐसा करने से एक प्रक्रिया बच जाती है, लेकिन संभवतः प्रदर्शन पर कोई महत्वपूर्ण प्रभाव नहीं पड़ेगा।


1
बिल्ली पर टिप के लिए धन्यवाद, सवाल से संबंधित नहीं है, लेकिन फिर भी एक उपयोगी टिप। चीयर्स!
tbenz9

@ tbenz9: पठनीय कोड डिबग और बनाए रखने और बदलने के लिए आसान है। "बेकार cat" इसलिए जरूरी नहीं कि पूरी तरह से खराब हो। यदि इसे टालने से कोई प्रदर्शन हासिल नहीं होता है, तो आप जिस चीज के साथ अधिक सहज हैं, उसके साथ जाना बेहतर है, यह मानते हुए कि आप इस कोड के अनुरक्षक होंगे।
आइकनोकॉस्ट

1
@ कीथ, लिंक डाउन ..
पचेरियर

4

दो विकल्प:

उपयोग sha1sum

sha1sum foo.box

कुछ परिस्थितियों में sha1sum तेज है


उपयोग rsync

स्थानांतरण करने में अधिक समय लगेगा, लेकिन rsync यह पुष्टि करता है कि फ़ाइल बरकरार है।

Rsync मैन पेज से

ध्यान दें कि rsync हमेशा इस बात की पुष्टि करता है कि प्रत्येक स्थानांतरित की गई फ़ाइल को एक पूर्ण-फ़ाइल चेकसम को चेक करके सही ढंग से प्राप्त किया गया था जो फ़ाइल स्थानांतरित होने पर उत्पन्न होता है ...


1
Sha1sum पर टिप के लिए धन्यवाद, rsync को ट्रांसफर करने में 10+ घंटे से अधिक समय लगता है, मैं उसी फाइल को ट्रांसफर कर सकता हूं और nd और md5sum का उपयोग करके लगभग 4 घंटे में md5sums चला सकता हूं। मैं अपने 4 घंटे और भी कम पाने की कोशिश कर रहा हूं।
tbenz9

3

विज्ञान प्रगति कर रहा है। ऐसा प्रतीत होता है कि नया BLAKE2 हैश फ़ंक्शन MD5 से अधिक तेज़ है (और क्रिप्टोग्राफिक रूप से बूट करने के लिए बहुत मजबूत है)।

संदर्भ: https://leastauthority.com/blog/BLAKE2-harder-better-faster-stronger-than-MD5.html

ज़ूको की स्लाइड्स से:

इंटेल कोर i5-3210M (आइवी ब्रिज) पर 
साइकिल प्रति बाइट प्रति चक्र चक्र
लंबे संदेश 4096 बी 64 बी एमडी 5 5.0 5.2 13.1 SHA1 4.7 4.8 13.7 SHA256 12.8 13.0 30.0 केकेक 8.2 8.2 26.0 BLAKE1 5.8 6.0 14.9 BLAKE2 3.5 3.5 9.3

2

आप शायद किसी अच्छे हैश से बेहतर नहीं कर सकते। आप यह देखने के लिए अन्य हैश / चेकसम फ़ंक्शन देख सकते हैं कि क्या किसी की तुलना में काफी तेज है md5sum। ध्यान दें कि आपको एमडी 5 जितना मजबूत होने की आवश्यकता नहीं है। MD5 (और SHA1 जैसी चीजें) क्रिप्टोग्राफिक रूप से मजबूत होने के लिए डिज़ाइन की गई हैं, इसलिए यह एक हमलावर / इंपोस्टर के लिए एक नई फ़ाइल को तैयार करने के लिए संभव है, जिसमें मौजूदा मूल्य के समान हैश मान है (यानी, हस्ताक्षरित ई के साथ छेड़छाड़ करना मुश्किल है) -मेल और अन्य दस्तावेज)। यदि आप अपने संचार पर हमले के बारे में चिंतित नहीं हैं, लेकिन केवल एक रन-ऑफ-द-मिल कॉम्स त्रुटि है, तो चक्रीय अतिरेक जांच (सीआरसी) की तरह कुछ काफी अच्छा हो सकता है। (लेकिन मुझे नहीं पता कि यह और तेज़ होगा।)

एक और दृष्टिकोण है कि हस्तांतरण के साथ समानांतर में हैश करने की कोशिश करें। यह समग्र समय को कम कर सकता है, और निश्चित रूप से स्थानांतरण को समाप्त करने के लिए प्रतीक्षा करने की आवश्यकता के जलन कारक को कम कर सकता है, और फिर एमडी 5 को समाप्त करने के लिए फिर से इंतजार कर सकता है। मैंने इसका परीक्षण नहीं किया है, लेकिन ऐसा कुछ करना संभव होना चाहिए:

  • स्रोत मशीन पर:

    mkfifo myfifo
    tee myfifo < source_file | nc dest_host  port_number & md5sum myfifo
    
  • गंतव्य मशीन पर:

    mkfifo myfifo
    nc -l -p port_number | टी मायफिफो> डेस्टीफाइल और एमडी 5 एसयूएम माइफिफो
    

बेशक फाइलों के आकार की जाँच करना एक अच्छा, त्वरित तरीका है जिससे यह पता लगाया जा सकता है कि कोई बाइट्स गिरा है या नहीं।


2

बड़ी फाइलें भेजना एक दर्द है। क्यों न प्रत्येक चंक के लिए एक हैश उत्पन्न करने वाली फ़ाइलों को चैंकाने का प्रयास किया जाए और फिर इसे गंतव्य पर भेजें और फिर हैश की जाँच करें और चंक्स से जुड़ें।

आप एक व्यक्तिगत बिटटोरेंट नेटवर्क भी सेट कर सकते हैं। यह सुनिश्चित करेगा कि पूरी बात सुरक्षित रूप से पहुंचे।


मेरी समझ यह है क्योंकि यह एक स्रोत है और एक गंतव्य बिटटोरेंट नेटवर्क फायदेमंद नहीं होगा। नहीं है कि केवल तब लाभ होता है जब इसके कई स्रोतों से बहुत सारे गंतव्य जा रहे हों?
tbenz9

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

1
इस दृष्टिकोण का एकमात्र लाभ रिस्टैबिलिटी है, जिसमें ट्रांसमिशन विफलता से त्वरित वसूली भी शामिल है। ओपी ने यह नहीं कहा कि वह कितनी बार विफल हो जाता है, और यह संकेत नहीं दिया कि यह वह चीज है जिसे वह अनुकूलित करना चाहता था।
स्कॉट

@ tben9 बिटोरेंट फ़ाइलों के एकल हस्तांतरण के लिए पसंद का वर्तमान उपकरण है। फ़ाइल के साथ हैश जानकारी होने का अर्थ है कि अंतिम क्लाइंट डाउनलोड किए गए डेटा को सत्यापित कर सकता है और यदि आवश्यक हो तो इसे ठीक कर सकता है। कई स्रोत गति के लिए हैं। तो, हाँ, इस मामले में यह सुनिश्चित करने के लिए कि फ़ाइल सही ढंग से हस्तांतरित है, बीटी का उपयोग करना फायदेमंद है।
13:15 पर अंडरवर्ल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.