त्रुटियों के लिए BTRFS फाइल सिस्टम छापे की निगरानी कैसे करें?


9

मैंने एक डेमॉन पर कुछ दस्तावेज देखे जो विभिन्न BTRFS घटनाओं के लिए एक कार्यक्रम / स्क्रिप्ट निष्पादित कर सकते हैं, लेकिन मैं इसे अब और नहीं पा सकता हूं।

मुझे BTRFS raid1 सरणी के लिए ड्राइव विफलता पर स्क्रिप्ट / प्रोग्राम कैसे निष्पादित किया जा सकता है? मैं संभावित विफलता ड्राइव के लिए प्रारंभिक चेतावनी के रूप में कार्य करने के लिए किसी भी त्रुटि पर एक स्क्रिप्ट चलाना चाहूंगा, लेकिन वास्तविक ड्राइव विफलता सबसे महत्वपूर्ण है। मैं उस बिंदु पर फ़ाइल सिस्टम को अनमाउंट करना चाहूंगा (यदि यह BTRFS वैसे भी नहीं है) और अलार्म सेट करें।


1
आप ड्राइव विफलता पर RAID 1 को अनमाउंट करने के लिए सिस्टम क्यों चाहते हैं? इस तरह की धड़कन का उद्देश्य यह नहीं है? मेरा मतलब है कि आपके पास इसके कुछ कारण हो सकते हैं, लेकिन डिफ़ॉल्ट रूप से इसे ऐसा नहीं करना चाहिए
Petr

मेरे पास एक RAID5 था दो ड्राइव एक दूसरे के थोड़े समय में विफल हो गए। मैं BTRFS की दर्पण छापे क्षमता का उपयोग करके एक नई प्रणाली स्थापित करना चाह रहा था और मूल कारण से निपटने के लिए समय प्रदान करते हुए आगे की क्षति की संभावना को कम करने के लिए ड्राइव समस्याओं (जरूरी नहीं कि ड्राइव विफलता) पर प्रतिक्रिया करूं। मुझे उम्मीद है कि BTRFS के एन-वे मिरर किसी दिन अच्छी तरह से काम करेंगे।
Ioan

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

जवाबों:


16

रेगुलर लॉगिंग सिस्टम के अलावा, BTRFS में एक है आँकड़े कमांड, जो प्रति ड्राइव (रीड, राइट और करप्शन / चेकसम एरर सहित) त्रुटियों का ट्रैक रखता है:

# btrfs device stats /
[/dev/mapper/luks-123].write_io_errs   0
[/dev/mapper/luks-123].read_io_errs    0
[/dev/mapper/luks-123].flush_io_errs   0
[/dev/mapper/luks-123].corruption_errs 0
[/dev/mapper/luks-123].generation_errs 0

तो आप एक साधारण रूट क्रॉस्टैब बना सकते हैं:

MAILTO=admin@myserver.com
@hourly /sbin/btrfs device stats /data | grep -vE ' 0$'

यह हर घंटे सकारात्मक त्रुटि की जाँच करेगा और आपको एक ईमेल भेजेगा। जाहिर है, आप इस तरह के परिदृश्य का परीक्षण करेंगे (उदाहरण के लिए भ्रष्टाचार के कारण या grep को हटाकर) यह सत्यापित करने के लिए कि ईमेल अधिसूचना काम करती है।

इसके अलावा, BTRFS (जैसे कि चेकसमिंग) जैसे उन्नत फाइल सिस्टम के साथ, यह अक्सर एक खराब ड्राइव के कारण होने वाले मूक भ्रष्टाचार का पता लगाने के लिए हर दो हफ्ते में एक स्क्रब शेड्यूल करने की सिफारिश की जाती है।

@monthly /sbin/btrfs scrub start -Bq /data

-B विकल्प स्क्रब को अग्रभूमि में रखेगा, ताकि आप देखेंगे कि ईमेल क्रोन में परिणाम आपको भेजता है। अन्यथा, यह पृष्ठभूमि में चलेगा और आपको मैन्युअल रूप से परिणामों की जांच करना याद रखना होगा क्योंकि वे ईमेल में नहीं होंगे।

अद्यतन करें : माइकल Kjörling, धन्यवाद द्वारा सुझाए गए बेहतर grep।

अपडेट २ : नियमित रूप से पढ़े गए कार्यों के लिए स्क्रबिंग पर अतिरिक्त नोट (यह केवल BTRFS पर लागू नहीं होता है):
जैसा कि आयान द्वारा बताया गया है, कुछ मामलों में एक दिन से भी अधिक सरणी (और अन्य कारकों) के आकार और प्रकार के आधार पर एक स्क्रब में कई घंटे लग सकते हैं। और यह एक सक्रिय स्कैन है, यह भविष्य की त्रुटियों का पता नहीं लगाएगा - स्क्रब का लक्ष्य उस समय आपके ड्राइव पर त्रुटियों को ढूंढना और ठीक करना है। लेकिन अन्य RAID प्रणालियों के साथ, यह समय-समय पर स्क्रब शेड्यूल करने के लिए अनुशंसित है। यह सच है कि एक विशिष्ट i / o ऑपरेशन, एक फ़ाइल को पढ़ने की तरह, यह जांचता है कि क्या पढ़ा गया डेटा वास्तव में सही है। लेकिन एक साधारण दर्पण पर विचार करें - यदि फ़ाइल की पहली प्रति क्षतिग्रस्त हो जाती है, हो सकता है कि एक ड्राइव जो मरने वाला हो, लेकिन दूसरी प्रति, जो सही है, वास्तव में BTRFS द्वारा पढ़ी जाती है, तो BTRFS को पता नहीं चलेगा कि भ्रष्टाचार है एक ड्राइव पर। यह केवल इसलिए है क्योंकि अनुरोधित डेटा प्राप्त हुआ है, यह इस फाइल के लिए चेकसम BTRFS द्वारा संग्रहित किया गया है, इसलिए दूसरी प्रतिलिपि को पढ़ने के लिए BTRFS की आवश्यकता नहीं है। इसका मतलब यह है कि भले ही आप विशेष रूप से एक फ़ाइल को पढ़ते हैं जिसे आप जानते हैं कि एक ड्राइव पर भ्रष्ट है, इस बात की कोई गारंटी नहीं है कि इस रीड ऑपरेशन से भ्रष्टाचार का पता लगाया जाएगा।
अब, मान लेते हैं कि BTRFS केवल अच्छी ड्राइव से पढ़ता है, कोई स्क्रब नहीं चलाया जाता है जो खराब ड्राइव पर नुकसान का पता लगाता है, और फिर अच्छी ड्राइव खराब भी हो जाती है - परिणाम डेटा हानि (कम से कम BTRFS को पता होगा) कौन सी फाइलें अभी भी सही हैं और फिर भी आप उन्हें पढ़ने की अनुमति देंगे)। बेशक, यह एक सरल उदाहरण है; वास्तव में, BTRFS हमेशा एक ड्राइव से नहीं पढ़ेगा और दूसरे की अनदेखी करेगा।
लेकिन मुद्दा यह है कि आवधिक स्क्रब महत्वपूर्ण हैं क्योंकि वे त्रुटि (और ठीक) पाएंगे जो नियमित रूप से पढ़ने के संचालन का पता नहीं लगाएगा।

दोषपूर्ण ड्राइव : चूंकि यह प्रश्न काफी लोकप्रिय है, मैं यह बताना चाहता हूं कि यह "मॉनिटरिंग सॉल्यूशन" संभवतः खराब ड्राइव के साथ समस्याओं का पता लगाने के लिए है (उदाहरण के लिए, मरने वाली ड्राइव त्रुटियों का कारण है, लेकिन अभी भी सुलभ है)।

दूसरी ओर, अगर कोई ड्राइव अचानक चला गया है (मरने या उत्पादन त्रुटियों के बजाय पूरी तरह से मृत हो गया है), यह एक दोषपूर्ण ड्राइव होगा (ZFS इस तरह के ड्राइव को FAULTED के रूप में चिह्नित करेगा)। दुर्भाग्य से, BTRFS को यह महसूस नहीं हो सकता है कि फाइलसिस्टम माउंट होने के दौरान एक ड्राइव चला गया है, जैसा कि इस मेलिंग सूची में 09/2015 से दर्ज किया गया है (यह संभव है कि यह पैच हो गया है):

अंतर यह है कि हमारे पास माउंट पर मौजूद डिवाइस का पता लगाने के लिए कोड नहीं है, हमारे पास माउंटेड फाइल सिस्टम पर इसे छोड़ने का पता लगाने के लिए कोड (अभी तक) नहीं है। किसी उपकरण के गायब होने का उचित पता लगाना एक प्राथमिकता के रूप में क्यों नहीं दिखाई देता है, मुझे पता नहीं है, लेकिन यह माउंट व्यवहार से एक अलग मुद्दा है।

https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg46598.html

उस समय तक dmesg में बहुत सारे त्रुटि संदेश होंगे, इसलिए dmesg को विश्वसनीय नहीं माना जा सकता है।
BTRFS का उपयोग करने वाले सर्वर के लिए, यह एक कस्टम चेक (क्रोन जॉब) करने का विचार हो सकता है जो RAID सरणी में कम से कम एक ड्राइव में अलर्ट भेजता है, अर्थात, अब सुलभ नहीं है ...


1
कुछ पसंद नहीं होगा grep -vE ' 0$' बेहतर बनो?
a CVn

@ MichaelKjörling: अच्छा विचार है, मैंने अपना उत्तर अपडेट कर दिया है, धन्यवाद!
basic6

यह एक अच्छा विचार है, और मैं इसे एक नियमित अखंडता जांच के रूप में करता हूं। हालाँकि, सभी डेटा को चेकसम करने में एक घंटे से अधिक समय लग सकता है। त्रुटियों पर लेने के लिए लगातार इसे चलाने पर हार्डवेयर पर पहनने का उल्लेख नहीं करना चाहिए। BTRFS सभी सामान्य फाइलसिस्टम परिचालनों की जांच करता है और यह तुरंत उन पर प्रतिक्रिया करने का एक अधिक कुशल तरीका होगा।
Ioan

@loan: आप सही हैं, एक स्क्रब कई घंटों तक चल सकता है, इसलिए यह स्पष्ट रूप से ड्राइव पर बहुत अधिक तनाव डालता है। लेकिन यह मूक भ्रष्टाचार का पता लगाने के लिए किया जाता है, इसलिए आप एक खराब ड्राइव को बदलने से पहले एक दूसरे को भी खराब कर सकते हैं। मौन भ्रष्टाचार सामान्य एफएस संचालन के दौरान नहीं होता है, इसलिए आपको स्वचालित रूप से सूचित नहीं किया जाएगा।
basic6

@ बुनियादी 6: बिल्कुल, और यह उसके लिए बहुत अच्छा है। हालाँकि, यह सामान्य ऑपरेशन के दौरान त्रुटियों का पता लगाने के लिए कुछ भी नहीं करता है, जैसे कि अगले स्क्रब तक एक अपमानित BTRFS सरणी। दक्षता के लिए एक मासिक स्क्रब का उपयोग करके मूक भ्रष्टाचार से निपटा जा सकता है, लेकिन यह अन्य त्रुटियों के लिए बहुत लंबा है।
Ioan

2

उपयोगकर्ता के हैंडलिंग के लिए BTRFS ईवेंट्स की आधिकारिक तौर पर रिपोर्ट करने वाली डेमॉन या उपयोगिता प्रतीत नहीं होती है। निकटतम विकल्प BTRFS से संदेशों के लिए सिस्टम लॉग की निगरानी करना और तदनुसार प्रतिक्रिया करना है।

http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html

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

Btrfs फाइल सिस्टम त्रुटियों या चेतावनियों की रिपोर्ट करने के लिए सेकंड, इवेंट कोरेलर को कैसे कॉन्फ़िगर करें

Sec.pl स्थापित करने के बाद (apt-get install sec on debian या http://simple-evcorr.sourceforge.net/ ), नीचे 2 विन्यास फाइल स्थापित करें।

यह मूर्खतापूर्ण नहीं है, यह उन ज्ञात संदेशों के एक समूह पर निर्भर करता है जो ठीक हैं, और सभी अज्ञात लोगों की रिपोर्ट करते हैं। आप आवश्यकतानुसार आगे नकारात्मक रेगेक्स को आगे बढ़ा सकते हैं।

polgara:~\# cat /etc/default/sec  
\#Defaults for sec  
RUN_DAEMON="yes"  
DAEMON_ARGS="-conf=/etc/sec.conf -input=/var/log/syslog -pid=/var/run/sec.pid -detach -log=/var/log/sec.log"

polgara:~# cat /etc/sec.conf  
\# http://simple-evcorr.sourceforge.net/man.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html  
type=SingleWithSuppress  
ptype=RegExp  
pattern=(?i)kernel.*btrfs: (?!disk space caching is enabled|use ssd allocation|use .* compression|unlinked .* orphans|turning on discard|device label .* devid .* transid|detected SSD devices, enabling SSD mode|has skinny extents|device label|creating UUID tree|checking UUID tree|setting .* feature flag|bdev.* flush 0, corrupt 0, gen 0)  
window=60  
desc=Btrfs unexpected log  
action=pipe '%t: $0' /usr/bin/mail -s "sec: %s" root

2

Btrfs-progs v4.11.1 के आंकड़ों में --check विकल्प है जो गैर-शून्य पर लौटेगा यदि कोई मान शून्य नहीं है, तो रेगेक्स की आवश्यकता को हटा दें।

डिवाइस आँकड़े -c /


1

मैं त्रुटि सूचना के लिए सांख्यिकी आदेश पर निर्भर नहीं होता, क्योंकि यदि कोई ड्राइव अचानक चली जाती है तो यह आदेश कोई त्रुटि नहीं देता है। आप एक साटा केबल को डिस्कनेक्ट करके या किसी ड्राइव को खींचकर इसका परीक्षण कर सकते हैं - एक महत्वपूर्ण फाइल सिस्टम के साथ अनुशंसित नहीं है।

btrfs device stats /

रिबूट के बाद, btrfs लापता ड्राइव दिखाता है, लेकिन इसमें बहुत देर हो सकती है।

btrfs fi show

1

सिस्टम मॉनिटरिंग के लिए एक कार्य की तरह लगता है। वहाँ एक जाँच मौजूद है जो नागोसिन प्लगइन एपीआई को लागू करता है: check_btrfs । जैसा कि आप सोर्स कोड में देख सकते हैं, इसमें एक फंक्शन है check_dev_stats यदि कोई भी उपकरण नॉन-जीरो है तो डिवाइस स्टैटिस्टिक्स की जांच करता है और महत्वपूर्ण हो जाएगा। यह आवंटन के मुद्दों की भी जाँच करता है। जो अस्पष्ट है वह है यदि एक डिस्क अनुपस्थित है या ऑफ़लाइन जाती है तो चेक कैसे व्यवहार करता है

पुनश्च: प्लगइन को डेबियन में पैक किया गया है: निगरानी-प्लगइन्स-btrfs

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