Btrfs स्क्रब कैसे काम करता है और यह क्या करता है?


19

वास्तव में btrfs स्क्रब क्या करता है? मैनुअल पेज के अनुसार, जो पूरी तरह से अस्पष्ट है, यह कुछ त्रुटि जाँच करता है। किस प्रकार की त्रुटि की जाँच? यह कितना विश्वसनीय है? क्या यह कुछ त्रुटियों को ठीक करने में सक्षम है? यह कैसे काम करता है? क्या यह हर btrfs डिस्क पर काम करता है?


3
संदर्भ: BTRFS चेकसमों को संग्रहीत करता है, इसलिए यह हमेशा यह बताने में सक्षम होता है कि कोई फ़ाइल (या मेटाडेटा) ठीक है या यदि वह दूषित है। लगभग सभी अन्य फाइल सिस्टम जैसे ext4 में चेकसमिंग नहीं है, इसलिए वे आपको एक ऐसी फ़ाइल को पढ़ने से नहीं रोकेंगे, जो खराब ड्राइव द्वारा दूषित हो गई है (जो मरने वाली है और पहले से ही डेटा को दूषित करना शुरू कर चुकी है)। यह BTRFS में एक महत्वपूर्ण डेटा सुरक्षा सुविधा है और इससे स्क्रबिंग संभव है।
बेसिक 6

जवाबों:


23

मुझे नहीं पता कि यह कुछ और करता है, लेकिन मुझे पता है कि कम से कम btrfs scrubफुल-डिस्क डेटा स्क्रबिंग करता है। मूल रूप से, यह डिस्क पर सभी डेटा * को पढ़ता है, अपने चेकसम को फिर से खोलता है, और संग्रहित किए गए पुनर्संबंधित चेकसम की तुलना करता है। जब संग्रहित और पुन: जमा किए गए चेकसम का मिलान नहीं होता है, तो सिस्टम जानता है कि उसमें भ्रष्टाचार है।

एक बार भ्रष्टाचार का पता चलने के बाद, व्यवहार आपके डिस्क सेटअप पर निर्भर करता है। उदाहरण के लिए, यदि आपके पास RAID 1 (मिररिंग) है, तो btrfs scrubदूसरे डिस्क से अनियंत्रित संस्करण की प्रतिलिपि बनाकर दूषित डेटा को ठीक कर सकते हैं। यदि कुछ डेटा की सभी प्रतियां दूषित हैं (उदाहरण के लिए, मल्टी-डिस्क क्षति या पहले स्थान पर अनावश्यक प्रतियां नहीं हैं), तो btrfs scrubआपको चेतावनी देने के अलावा बहुत कुछ नहीं कर सकता है।

इसका कारण यह है कि हार्ड ड्राइव केवल 99.999999999999% बिट्स पढ़ने और लिखने में विश्वसनीय हैं। इसलिए, डेटा I / O के हर कुछ टेराबाइट्स में त्रुटि होने की संभावना है। हालांकि सामान्य डिस्क एक्सेस के दौरान त्रुटियों का पता लगाया जा सकता है (और तय किया गया है, एक निरर्थक प्रतिलिपि अभी भी मान्य है), रूटीन फुल-डिस्क स्क्रबिंग पर्याप्त संचय से पहले त्रुटियों को खोजने और ठीक करने में सक्षम है, जो एक ही डेटा की सभी प्रतियां दूषित हैं।

* मेटाडेटा को शामिल करने के लिए "फ़ाइल" के बजाय "डेटा" का उपयोग कर रहा हूं। Btrfs डेटा ब्लॉक में फ़ाइलें और संबंधित मेटाडेटा (चेकसम सहित) संग्रहीत करता है, जिनमें से सभी को चेकसमेड और चेक किया जाता है btrfs scrub

यह सभी देखें:

  • Btrfs -> चेकसम ट्री और स्क्रबिंग विकिपीडिया: btrfs के डेटा स्क्रबिंग के बारे में तकनीकी जानकारी।
  • जन्मदिन की समस्या -> विकिपीडिया पर संभाव्यता तालिका : "हैश स्पेस" को "डेटा ब्लॉक की संख्या" और "हैश तत्वों की संख्या" को "दूषित डेटा ब्लॉक की संख्या" के रूप में माना जाता है, इससे दोनों प्रतियों के साथ डेटा ब्लॉक होने की संभावना मिलती है। RAID 1 सेटअप में दूषित।

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

@ माइकलकॉर्लिंग मुझे नहीं लगता कि सेक्टर यहां मायने रखते हैं .... मेरे पास अपने कंप्यूटर के दो आंतरिक 1TB हार्ड ड्राइव के पिछले 29 btrfs स्क्रब के रिकॉर्ड हैं। डेटा की मात्रा 270 और 300 GiB (कुल 1.35 * 10 ^ 14 से 1.49 * 10 ^ 14 बिट्स संयुक्त सभी स्क्रब के लिए पढ़ी गई) के बीच भिन्न होती है। इन स्क्रब के दौरान 3 त्रुटियां पाई गई हैं। यह मानते हुए कि नॉन-स्क्रब I / O न तो उत्पन्न हुआ और न ही थोड़ा सा सड़ने के कारण, यह "99.9999999999% विश्वसनीय" ड्राइव की अपेक्षित त्रुटि दर का केवल 2 से 2¼ गुना है। यहां तक ​​कि केवल 4096-बिट सेक्टरों के साथ, मुझे लगता है कि आपके तर्क से मेरी ड्राइव को हजारों त्रुटियों की उम्मीद होगी।
मार्क हैफरकैम्प

@ माइकलकॉर्लिंग अब तक मैं निर्माता की चादरों (सीगेट और डब्ल्यूडी) को समझता हूं, यह थोड़ी त्रुटियां हैं और पूरे क्षेत्र में नहीं हैं जो मर जाते हैं। और उत्तर में नाइन की संख्या और भी आशावादी है: 100-1/10^14इसमें 16 नाइन हैं और पोस्ट में केवल 14 (10 ^ 12 के अनुरूप) हैं।
ल्यूक

@ अगर सेक्टर की मौत कम आम है तो यह अच्छा है; मरने वाले क्षेत्रों का मतलब है कि ड्राइव (शायद) वास्तव में विफल है और प्रतिस्थापन की आवश्यकता हो सकती है। बिट त्रुटियों से केवल मूक डेटा भ्रष्टाचार होता है, जिसे बैकअप से पुनर्स्थापित करने के लिए पर्याप्त शोर किया जा सकता है। गणित नोट: वास्तविक गणना है 1-10^n, जिसे तब प्रतिशत में बदल दिया जाता है क्योंकि मनुष्य प्रमुख दशमलव को पसंद नहीं करते हैं। इसके अलावा, मैंने अपनी पिछली टिप्पणी में उल्लेख करने की उपेक्षा की कि ड्राइव RAID 1 में हैं (इसलिए समान 270-300 GiB डेटा उनमें से प्रत्येक पर है), जो एक और स्पष्ट गणना त्रुटि को ठीक करता है।
मार्क हैफेरकैंप

5

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

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

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

यह वह जगह है जहाँ btrfs scrubयह सभी फ़ाइलों को नहीं बल्कि सभी डेटा को पढ़ता है । इसमें मेटाडेटा शामिल है, लेकिन फाइलों की द्वितीयक प्रतियां भी हैं जो सामान्य रूप से पढ़ने के रास्ते में नहीं होंगी। जब यह इन माध्यमिक प्रतियों को पढ़ता है, जो btrfs के इन-बैंड त्रुटि सुधार के लिए एक अनावश्यक प्रतिलिपि से डेटा को किक करने और पुनर्स्थापित करने का अवसर बनाता है।


2
क्या आप सुनिश्चित हैं कि RAID1 रीडिंग केवल 1 डिस्क से की जाती है? कम से कम mdadm RAID के साथ ऐसा नहीं होना चाहिए। रीडिंग दोनों डिस्क से समानांतर में होनी चाहिए, लेकिन अलग-अलग डेटा से, मतलब यह एक डिस्क से रीडिंग के मुकाबले दोगुना होना चाहिए। पढ़ें प्रदर्शन को बढ़ावा देने की प्रमुख विशेषताओं में से एक है RAID 1.
पेट्र

@Petr हाँ, आप सही हैं। व्यक्तिगत ब्लॉक केवल एक डिस्क से पढ़े जाते हैं।
आवारा

@Petr: विस्तृत करने के लिए, - सामान्य उपयोग के तहत न तो एमडीएडीएम और न ही बीटीआरएफएस ने दोनों डिस्क से एक ही डेटा की दोनों प्रतियां पढ़ीं। वे केवल एक प्रति पढ़ते हैं। - MDADM पढ़ने की गति से दोगुना प्राप्त करने के लिए कॉपियों में लोडिंग-बैलेंस और रीडिंग वितरित करने में सक्षम है। (क्योंकि सभी प्रतिलिपि A डिस्क 1 पर जाती हैं, और सभी प्रतिलिपि डिस्क 2 पर जाती हैं। जैसा कि mdadm ठीक 2 डिस्क का उपयोग करेगा)। - BTRFS में ज्यादा मुश्किलें हैं। (क्योंकि कॉपी ए और बी जो भी 2 डिस्क पर जाएगी (2 या अधिक डिस्क में से) इस समय सबसे अधिक खाली जगह है - (यानी: 2 प्रतियां सभी वर्तमान डिस्क के बीच बेतरतीब ढंग से फैल जाएगी)
DrYak

और सुरक्षा के बारे में: - MDADM और BTRFS दोनों ही समस्या के मामले में अन्य प्रतिलिपि की कोशिश करेंगे। - एमडीएडीएम के लिए यह पता लगाने वाली एकमात्र समस्या "डिस्क जवाब नहीं देती है" (क्योंकि इसमें ऊपर संग्रहीत फ़ाइलों का कोई वास्तविक विचार नहीं है) - बीटीआरएफएस के लिए इसके अलावा मूक डेटा भ्रष्टाचार का पता लगा सकते हैं (क्योंकि डेटा की जांच की जाती है, और इसी तरह) BTRFS 'RAID परत जानता है एक प्रति भरोसा किया जा सकता है या यह एक और प्रतिलिपि लाने होगा)
DrYak

RAID5 / 6 के संबंध में अंतिम लेकिन कम से कम: - MDADM में यह सिर्फ काम करता है । (लेकिन मूक भ्रष्टाचारों का पता नहीं लगाएगा) - BTRFS में अब के लिए मूक भ्रष्टाचार को नियंत्रित नहीं किया जाता है (क्योंकि यह आसान है कि स्ट्रिप के कौन से सदस्य भ्रष्ट हैं, यह अनुमान लगाने के लिए एरासुर कोडिंग अभिकलन करने की बजाय केवल दूसरी प्रति (RAID1 में) प्राप्त करें) शेष डेटा / समता से पुनर्निर्माण किया जाना चाहिए)। दूसरे शब्दों में: आज की तरह (अगस्त 2017) btrfs 'RAID5 / 6 का उपयोग नहीं करते हैं।
DrYak
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.