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