मैंने #btrfs IRC पर सवाल पूछा है, उन्होंने कहा कि should be ok if your hw isn't "buggy"
कहाँ नहीं- "छोटी गाड़ी" का मतलब है your hw has correct flush/barrier semantics
।
TL; DR: इसका मतलब है कि ZFS की तरह ही बिजली के नुकसान के कारण btrfs डेटा भ्रष्टाचार से सुरक्षित है।
यहाँ क्यों है: ZFS और btrfs के पीछे सामान्य विचार समान है। दोनों एक डेटा संरचना के रूप में मर्कल पेड़ों का उपयोग करते हैं । राइट्स को अपडेट करने के लिए डिस्क (ओं) पर कई ब्लॉक की आवश्यकता हो सकती है। फ़ाइल सिस्टम खाली ब्लॉकों को नया डेटा लिखकर इसे संभाल रहा है (भले ही किसी मौजूदा फ़ाइल को संशोधित किया जा रहा है, इस प्रकार यह उन ब्लॉकों को संशोधित करने की आवश्यकता नहीं है जो पुराने राज्य को दर्शाते हैं) और एक नया अपडेटेड पेड़ का निर्माण। एक बार सभी भारी उठाने के बाद और डेटा + अपडेट किए गए पेड़ को डिस्क पर लिखा जाता है, हेड पॉइंटर नए पेड़ में परिवर्तन को दृश्यमान बनाता हुआ अपडेट हो जाता है।
यहां बताया गया है कि किसी फाइल पर लिखते समय किस तरह का व्यवहार करना चाहिए:
- डिस्क पर ब्लॉक मुक्त करने के लिए डेटा लिखें।
- मर्कल ट्री * की एक प्रति बनाएँ, इसे (1) में लिखे बदलावों के अनुसार अपडेट करें।
- हार्डवेयर को डिस्क पर डेटा फ्लश करने के लिए कहें - हार्डवेयर सभी लंबित डेटा को लिखता है।
- नए मर्कल ट्री को हेड पॉइंटर अपडेट करें।
- मुक्त पुराने ब्लॉक जिनकी अब आवश्यकता नहीं है।
यदि (4) लेनदेन पूरा होने के बाद बिजली गुल हो जाती है। यदि चरणों (1) से (3) के दौरान बिजली खो जाती है, तो फ़ाइल सिस्टम पुरानी स्थिति के साथ आएगा (चरण 1 में लिखा गया डेटा खो गया है लेकिन फ़ाइल सिस्टम सुसंगत है)। ध्यान दें कि फ़ाइल सिस्टम त्रुटियों के लिए जाँच करने की कोई आवश्यकता नहीं है, जिसका अर्थ है कि फ़ाइल सिस्टम तुरंत उपलब्ध है जो एक बड़ा लाभ है (बड़ी फ़ाइल सिस्टम की जाँच करने में बहुत लंबा समय लग सकता है!)।
यहाँ एक उदाहरण है कि कैसे चीजें "छोटी गाड़ी" हार्डवेयर के साथ गलत हो सकती हैं:
- डिस्क पर ब्लॉक मुक्त करने के लिए डेटा लिखें।
- मर्कल ट्री * की एक प्रति बनाएँ, इसे (1) में लिखे बदलावों के अनुसार अपडेट करें।
- हार्डवेयर को डिस्क में डेटा फ्लश करने के लिए कहें - हार्डवेयर पूरा होने की पुष्टि करता है लेकिन सभी तरह से फ्लश नहीं करता है (जैसे डिस्क के राइट-बैक कैश में डेटा रह सकता है)।
- नए मर्कल ट्री को हेड पॉइंटर अपडेट करें। यह डेटा अन्य लंबित डेटा (उदाहरण के लिए क्योंकि डिस्क का सिर सही स्थान पर होता है) से पहले डिस्क पर लिखा जाता है।
- चरणों में लिखे गए डेटा (1) और (2) डिस्क पर लिखे जाते हैं।
- मुक्त पुराने ब्लॉक जिनकी अब आवश्यकता नहीं है।
अगर (4) और (5) के बीच या चरण (5) प्रदर्शन के दौरान बिजली गुल हो जाती है तो फाइल सिस्टम असंगत हो जाएगा। परिणामस्वरूप मर्कल ट्री और / या डेटा केवल आंशिक रूप से लिखा जा सकता है जिससे फ़ाइल सिस्टम असंगत हो जाता है।
व्यवहार में आपको RAID नियंत्रकों का उपयोग करते समय विशेष रूप से सावधान रहना होगा । वे आमतौर पर डिस्क पर राइट-बैक कैश अक्षम करते हैं और इसके बजाय अपने स्वयं के राइट-बैक कैश का उपयोग करते हैं। यहाँ गलत होने के लिए दो सामान्य तरीके हैं:
* मैं यहां चीजों को सरल बना रहा हूं। यह वास्तव में पूरे पेड़ की नकल करने के लिए आवश्यक नहीं है। केवल उन भागों को जोड़ा गया है जिन्हें जोड़ने की आवश्यकता है - शेष भागों को पुराने और नए पेड़ के बीच साझा किया जा सकता है ।
zpool clear -F