मैं फ़ाइल चेकसमों को कुशलता से कैसे जनरेट और सत्यापित कर सकता हूं?


12

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

क्या हर एक फाइल को एक चेकसम की जरूरत है? क्या मौजूदा निर्देशिका संरचना का लाभ उठाने के तरीके हैं, कहते हैं, फ़ाइल के पेड़ में केवल एक नोड को मान्य करें और जरूरी नहीं कि हर फ़ाइल के भीतर हो?


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

जवाबों:


13

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

ZFS स्वचालित रूप से डेटा को पुनर्स्थापित कर सकता है जो आपके द्वारा सेट किए गए किसी भी अतिरेक का उपयोग करके हैश चेक में विफल रहता है, चाहे raid5- शैली समता, ड्राइव मिरर या डुप्लिकेट प्रतियां (किसी भी ZFS फाइल सिस्टम में कॉपियाँ = एन प्रॉपर्टी जोड़ें) और यह एन कॉपियों को स्टोर करेगा। आपके द्वारा लिखे गए किसी भी डेटा)। यह एक मर्कल ट्री में हैश को स्टोर करता है, जहाँ एक फाइल का हैश मान ब्लॉक के हैश पर निर्भर करता है, एक डायरेक्टरी एंट्री का हैश फाइलों और निर्देशिकाओं के हैश मानों पर निर्भर करता है, जिसमें एक फाइलसिस्टम का हैश निर्भर करता है। रूट डायरेक्टरी के हैश आदि पर।

भले ही आप किस समाधान के साथ समाप्त हों, आप हमेशा पाएंगे कि यह प्रक्रिया आपके डिस्क की गति से सीमित है, आपके सीपीयू की गति से नहीं।

इसके अलावा, अपने डिस्क के BER को ध्यान में रखना न भूलें। वे सब के बाद, कताई जंग की मात्र प्लेटें हैं। उपभोक्ता-स्तर की ड्राइव में हर 10 ^ 14 बिट्स पढ़ने के लिए 1 गलत तरीके से पढ़ी गई बिट की त्रुटि दर होती है, जो आपके द्वारा पढ़े जाने वाले प्रत्येक 11 टेराबाइट्स में से 1 बिट तक काम करती है। यदि आपके पास 11 टेराबाइट डेटा सेट है और आप इसमें हर फाइल के हैश की गणना करते हैं, तो आपने उन चेकसमों में से एक की गणना गलत तरीके से और स्थायी रूप से डेटा सेट में से एक फाइल के एक ब्लॉक को क्षतिग्रस्त कर दिया होगा। ZFS, हालांकि, अपने पूल में हर डिस्क पर लिखे गए प्रत्येक ब्लॉक के हैश को जानता है, और इसलिए जानता है कि कौन सा ब्लॉक खो गया था। इसके बाद सही मानों के साथ उस ब्लॉक में डेटा को फिर से लिखने के लिए अपने पूल में अतिरेक (समता, दर्पण या अतिरिक्त प्रतियां) का उपयोग कर सकते हैं।

बेन टिप्पणियों में एक अच्छा बिंदु लाता है। ZFS किसी भी हैश मूल्यों को उजागर नहीं करता है जो कि उपयोगकर्ता के लिए गणना करता है, इसलिए ZFS प्रणाली में प्रवेश करने या छोड़ने वाला डेटा हैश के साथ होना चाहिए। मुझे पसंद है कि इंटरनेट आर्काइव एक xml फ़ाइल के साथ ऐसा करता है जो संग्रह में प्रत्येक आइटम के साथ होता है। एक उदाहरण के रूप में https://ia801605.us.archive.org/13/items/fakebook_the-firehouse-jazz-band-fake-book/fakebook_the-firehouse-jazz-band-fake-book_iles.xml देखें ।


1
आपने मुझे इसमें हरा दिया। मैं भी हैश आधारित प्रणाली का सुझाव देने जा रहा था। प्रत्येक फ़ाइल को हैश करें, किसी हैश आदि के लिए फ़ाइल हैश (+ उप डायर हैश) हैश करें। व्यापार बंद सीपीयू / आईओ बनाम त्रुटि संभावना है। चेकसम / सीआरसी सस्ता है लेकिन पैमाने के साथ त्रुटि की संभावना बढ़ जाती है। इसलिए सामान्य हैश करते हैं लेकिन वे त्रुटि की बहुत कम संभावना के साथ शुरू करते हैं।
द डायमंड जेड

3
यहां तक ​​कि अगर आप ZFS की तरह एक फ़ाइल सिस्टम चलाते हैं (Btrfs में भी समान कार्यक्षमता है, लेकिन अभी भी भारी विकास में है और इस समय उत्पादन उपयोग के लिए तैयार नहीं माना जाता है) आपको डेटा सुनिश्चित करने के लिए एक आवधिक "रगड़" ऑपरेशन करने की आवश्यकता होगी। चेकसम या हैश के खिलाफ पढ़ें और सत्यापित करें। केवल चेकसम की गणना करना और फिर उनके साथ कुछ भी नहीं करना जब तक आपको डेटा तक पहुंच की आवश्यकता न हो, बेकार की तुलना में बदतर है।
एक CVn

1
हां, यह अच्छी बात है। मेरे अंतिम स्क्रब ने 2 किलोबाइट डेटा निर्धारित किया था जो खराब हो गया था। यह पाँच ड्राइव पर बिखरे हुए चार ब्लॉक है! डेटा के किसी विशेष टुकड़े के बीच जितना अधिक समय आप पढ़ेंगे, उतनी अधिक संभावना होगी कि आप एक ही फाइल में पर्याप्त त्रुटियां जमा करेंगे कि वह इसे पुनर्प्राप्त नहीं कर पाएगी।

1
मेरे होम पीसी पर लगभग 150 जीबी डेटा पर एक यूजरस्पेस m55um चल रहा है, शुद्ध रूप से I / O- बाउंड के बारे में 40 मिनट का समय लिया गया। 100-गुना तक स्केलिंग करने पर, हमें उपभोक्ता हार्डवेयर पर , तीन दिनों के भीतर छाया में 15 टीबी की जाँच होती है मैं निश्चित रूप से एक बड़े संग्रह पर, उचित रूप से चयनित अंतराल के साथ, उस पर विचार करने योग्य हूं।
एक सीवी

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

6

मैं प्रत्येक फ़ाइल के लिए चेकसम उत्पन्न करूँगा। चेकसम बहुत छोटे हैं, और पूरी निर्देशिका के लिए चेकसम उत्पन्न करने के लिए आपको हर फ़ाइल को संसाधित करने की आवश्यकता होगी (कम से कम यदि आप निर्देशिका चेकसम के बारे में नहीं बोल रहे हैं, तो केवल निर्देशिका प्रविष्टियों से बनाया गया है - मैं उन्हें भी बनाऊंगा, कोई डेटा सुनिश्चित करने के लिए नहीं। हटा दिया गया है)।

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

इस तरह आपके डेटा के जीवित रहने की संभावना अधिक होती है।


यह निश्चित रूप से समझ में आता है। मैं बस सोच रहा हूं कि सैकड़ों हजारों चेकसमों को उत्पन्न करने और जांचने की कम्प्यूटेशनल रूप से महंगी उपलब्धि को संभालने के लिए क्या रणनीतियां मौजूद हैं।

4

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

एक BagIt टूल (वे कई प्रोग्रामिंग भाषाओं में मौजूद हैं) आपकी फ़ाइलों को एक निश्चित निर्देशिका संरचना में रखता है और आपके लिए चेकसमिंग / हैशिंग करता है। बस इतना ही।

पुनश्च: बेशक, BagIt टूल शामिल चेकसम / हैश के खिलाफ बैग को सत्यापित कर सकते हैं, और आप बैग में कुछ मेटाडेटा जोड़ सकते हैं। लेकिन यह उतना ही जटिल है जितना कि बैग।


1

यह उत्तर @ lechlukasz और @ db48x का एक संयोजन है , जिसमें टिप्पणियों में किए गए कुछ बिंदुओं के साथ-साथ मेरे अपने विचारों को भी शामिल किया गया है।

आगे का सरल मार्ग एक संयुक्त फाइल-सिस्टम और अलग-मेटाडेटा दृष्टिकोण है।

एक फ़ाइल प्रणाली का उपयोग करके जो डेटा हैशिंग और सत्यापन पर उड़ान भरती है, जैसे कि ZFS या Btrfs (ध्यान दें कि हालांकि बहुत अग्रिम किए गए हैं, Btrfs को इस समय उत्पादन उपयोग के लिए तैयार नहीं माना जाता है), आप यथोचित रूप से उपयोग कर सकते हैं। सुनिश्चित करें कि यदि डेटा को ऑपरेटिंग सिस्टम के बिना डिस्क से पढ़ा जा सकता है, तो डेटा रीड को फ़ाइल सिस्टम द्वारा इच्छित तरीके से डिस्क पर लिखा गया था। समय-समय पर "स्क्रब" ऑपरेशन चलाकर, सभी डेटा को फ़ाइल सिस्टम के विचार के खिलाफ पढ़ा और सत्यापित किया जाता है कि यह क्या होना चाहिए।

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

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

आज के हार्डवेयर के साथ और बड़ी मात्रा में डेटा (सॉलिड-स्टेट डिस्क्स / SSDs के विपरीत हार्ड डिस्क को कताई करते हुए) के लिए व्यावहारिक है, यहां तक ​​कि SHA1 जैसे जटिल हैशिंग एल्गोरिदम भी काफी हद तक I / O-बाध्य होंगे - यानी गति जिस पर डेटा हैश किया जाता है वह भंडारण प्रणाली की रीड स्पीड का एक फ़ंक्शन होगा, न कि हैश की गणना करने के लिए कंप्यूटर के प्रोसेसर की क्षमता से। मैंने एक उपयोगकर्ता-स्पेस एमडी 5 हैशिंग प्रक्रिया को लगभग 150 जीबी डेटा पर चलाने का एक प्रयोग किया था, जो 2012 में एक मध्य स्तरीय उपभोक्ता पीसी था, और यह लगभग 40 मिनट के लिए मूल रूप से बिना किसी रुकावट के डिस्क का उपयोग करने के बाद समाप्त हो गया। उन आंकड़ों को 100 गुना तक बढ़ाते हुए, आपको उसी हार्डवेयर पर लगभग तीन दिनों के समय में 15 टीबी संग्रह का एमडी 5 हैश मिल जाएगा। रीड ट्रांसफर रेट जोड़कर (जिसे आसानी से पूरा किया जा सकता है उदाउदाहरण के लिए RAID 0 अतिरेक के बिना पट्टी कर रहा है, आमतौर पर उच्चतर पढ़ने / लिखने के प्रदर्शन को संभवतः RAID 1 बनाने के साथ संयोजन में उपयोग किया जाता है RAID 10 ), पूरा होने का समय डेटा की समान मात्रा के लिए कम किया जा सकता है।

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


1

मैं उत्तरों के माध्यम से चला गया हूं, और भले ही मुझे डेटा-लेयर त्रुटियों को संभालने के लिए ZFS पर भरोसा करने का विचार पसंद है, फिर भी फ़ाइलों की समस्या बदल रही है, या तो गलती से या दुर्भावनापूर्ण रूप से। ZFS उस मामले में आपकी रक्षा नहीं करेगा, और किसी अन्य व्यक्ति की तरह, यह आपको बाहरी सत्यापन के लिए कहीं और स्टोर करने के लिए एक उपयोगकर्ता-देखने योग्य "हैश" नहीं देगा।

ट्रिपवायर नाम का एक लिनक्स एप्लिकेशन है जिसे सिस्टम के निष्पादन के लिए निगरानी के लिए बड़े पैमाने पर उपयोग किया गया था, यह पुष्टि करने के लिए कि उन्हें हमले के बाद नहीं बदला गया है। यह परियोजना अब स्पष्ट रूप से छोड़ दी गई है, लेकिन AIDE (Advanced Intrusion Detection Environment)सर्वरफॉल्ट पर अनुशंसित एक नया नाम है :

/server/62539/tripwire-and-alternatives

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

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


0

ऑस्ट्रेलिया के राष्ट्रीय अभिलेखागार ने [चेकसुम चेकर] ( http://checksumchecker.sourceforge.net/ ) विकसित किया है जो GPLv3 के तहत स्वतंत्र रूप से उपलब्ध है।

यह एक डेटाबेस से एक चेकसम और एल्गोरिथ्म को पढ़ता है, फिर फ़ाइल के लिए चेकसम को पुनर्गणना करता है, अगर कोई त्रुटि है तो दो मूल्यों और रिपोर्ट की तुलना करता है। यह MD5, SHA1, SHA2, SHA256 और SHA512 एल्गोरिदम का समर्थन करता है।

उनके डिजिटल रिपॉजिटरी में अन्य सॉफ्टवेयर [डीपीआर] ( http://dpr.sourceforge.net/ ) प्रारंभिक चेकसम (साथ ही साथ अन्य सभी प्रसंस्करण गतिविधियाँ करते हैं) उत्पन्न करता है।

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