उबंटू में खराब ब्लॉक रिट्री / वेट बार को कम करें


10

मैं IO प्रतीक्षा समय को कम कर सकता हूं और बार-बार पुन: प्रयास कर सकता हूं ताकि OS लगातार विफल ड्राइव पर लिखने की कोशिश न करे?

मेरे पास एक ऐसी प्रणाली है जिसका उपयोग मैं डेमो सामग्री की प्रतियां बनाने के लिए करता हूं जो ग्राहकों को नियमित SATA डेस्कटॉप हार्ड ड्राइव पर ऋण दिया जाता है। हम एसएएस के माध्यम से एक बार में कई ड्राइव कनेक्ट करते हैं और स्क्रिप्ट का उपयोग करके सामग्री की प्रतिलिपि बनाते हैं।

चूँकि ड्राइव्स को ऋण दिया जाता है, कभी-कभी कुछ क्षतिग्रस्त हो जाते हैं, लेकिन मुझे नहीं पता कि वे क्षतिग्रस्त हैं, इसलिए अगली बार जब एक कॉपी ऑपरेशन में ड्राइव का पुन: उपयोग होता है, तो यह अन्य ड्राइव को धीमा कर देता है क्योंकि सिस्टम उस ड्राइव में IO को पुन: प्रयास करता है। कभी-कभी खराब ड्राइव को नोटिस करने और इसे हटाने से पहले मुझे घंटों लग सकते हैं। ड्राइव को हटा दिए जाने के बाद, बाकी ड्राइव सामान्य गति से लिखना शुरू करते हैं।

मुझे खराब ड्राइव को ठीक करने की परवाह नहीं है। मुझे बस उन्हें बाहर निकालने की जरूरत है ताकि वे सब कुछ धीमा न करें।

मैं बैडब्लॉक और स्मार्टमूनटूलों पर भी शोध कर रहा हूं और इससे पहले कि मैं लिखना शुरू करूं ड्राइव पर एक पूर्व-जांच लिखने पर विचार कर रहा हूं।

ओएस: उबंटू लिनक्स (12.04 लीटर)


के माध्यम से स्मार्ट डेटा की जाँच में क्या गलत है udisks/ smartmonctl? यहाँ एक शास्त्रीय XY समस्या, मेथिंक है।
हिरण हंटर

2
धन्यवाद, मैं स्मार्टमोन्टक्टल पर अधिक शोध करूंगा। मेरे अनुभव में, यदि अंतिम शिपमेंट के दौरान खराब सेक्टर हुए, तो SMART स्टेटस से पता चलता है कि ड्राइव अभी भी अच्छा है, और यह कॉपी के दौरान कुछ यादृच्छिक भाग तक ठीक प्रदर्शन करता है, और फिर क्रॉल तक धीमा हो जाता है, जब तक कि अन्य ड्राइव भी प्रभावित नहीं होती हैं इसे हटा दिया गया है।
रयान सोरेनसेन

प्रश्न का सीधा उत्तर नहीं मिला है, इसलिए हम नहीं जानते कि क्या यह लिनक्स में एक संभव बात है: मैं IO प्रतीक्षा समय कैसे कम कर सकता हूं और समय को पुन: प्रयास कर सकता हूं?
इम्ज़ - इवान ज़खरीशेव

@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 हालांकि, कर्नेल इन त्रुटियों को लॉग नहीं करता है, इसलिए यदि आप अधिक परेशानी होने से पहले एक असफल डिस्क को पकड़ना चाहते हैं, तो आप सिस्टम लॉग को स्कैन कर सकते हैं नियमित अंतराल।
गोल्डीलॉक्स

अगर मैं इसे तेजी से पकड़ना चाहता हूं तो क्या होगा? प्रतीक्षा किए बिना भगवान को पता है कि आईओ ऑपरेशन से पहले कितना समय एक त्रुटि रिपोर्टिंग को अनब्लॉक करता है? (वास्तव में, मैं एक डिस्क से डेटा को त्रुटियों से बचाने का प्रयास कर रहा हूं, लेकिन मेरी समस्या समान है: इन "गलत" क्षेत्रों में चलने से भारी देरी होती है। ... शायद मैं भी सलाह का पालन कर सकता हूं, और एक तरह से आविष्कार कर सकता हूं। SMART परीक्षण से जानकारी फ़ीड करें ddrescueताकि यह SMART द्वारा
बताए

जवाबों:


7

मैंने पहले इस ट्यून करने योग्य का उपयोग नहीं किया है, लेकिन आप शायद प्रश्न में ड्राइव के लिए eh_timeout (त्रुटि से निपटने के समय) को समायोजित करना चाहते हैं :

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

उपरोक्त शो sda10 सेकंड के लिए सेट है। Red Hat नॉलेजबेस से:

कुछ संग्रहण कॉन्फ़िगरेशन में (उदाहरण के लिए, कई LUN के साथ कॉन्फ़िगरेशन), SCSI त्रुटि हैंडलिंग कोड अप्रमाणित संग्रहण डिवाइस के लिए TEST UNIT READY जैसे आदेश जारी करने में बड़ी मात्रा में खर्च कर सकता है। SCSI डिवाइस ऑब्जेक्ट में एक नया sysfs पैरामीटर, eh_timeout जोड़ा गया है, जो SCSI त्रुटि हैंडलिंग कोड द्वारा उपयोग किए गए TEST UNIT READY और REQUEST SENSE आदेशों के लिए टाइमआउट मान के कॉन्फ़िगरेशन की अनुमति देता है। इससे इन अनुत्तरदायी उपकरणों की जाँच में लगने वाले समय में कमी आती है। Eh_time का डिफ़ॉल्ट मान 10 सेकंड है, जो इस कार्यक्षमता को जोड़ने से पहले उपयोग किया जाने वाला टाइमआउट मूल्य था।


मैं अभी इसकी जाँच कर रहा हूँ। उबंटू में eh_timeout नहीं है, लेकिन एक टाइमआउट फ़ाइल है जो एक ही चीज हो सकती है। डिफ़ॉल्ट Ubuntu मूल्य 30 सेकंड प्रतीत होता है। इसे 5 सेकंड तक कम कर देगा और वापस रिपोर्ट करेगा।
रयान सोरेंसन

1
जिज्ञासा से बाहर, आपका परिणाम क्या था?
ब्राचली

12.04 को टाइमआउट ध्वज सेट करना कुछ भी करने के लिए प्रकट नहीं हुआ। मैं इस सप्ताह के अंत में एक परीक्षण प्रणाली को 14.04 में अपग्रेड करने की योजना बना रहा हूं क्योंकि इसमें eh_timeout (और टाइमआउट) भी है।
रयान सोरेनसेन

@RyanSorensen, तो क्या आपको यह देखने का मौका मिला कि क्या यह पैरामीटर कभी काम करता है?
Nat

मैं संशोधित करने में सक्षम नहीं था, eh_timeoutलेकिन मैं timeoutकार्य को पूरा करने के लिए बदलने में सक्षम था ।
गिटारपरिकेटर

2

/sys/block/<dev>/statउन उपकरणों के लिए मॉनिटर करें जिनकी आप रुचि रखते हैं और 10 वें पैरामीटर (io_ticks) की तुलना करते हैं।

जैसे, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

यह उपलब्ध समय का प्रतिशत है जो डिस्क ने डिस्क io के इंतजार में बिताया है।

100% के करीब पाठ्यक्रम की जाँच के लायक होगा, वरना वास्तव में होशियार हो जाओ और इसे अपने सभी डिस्क के औसत से तुलना करें और माध्य से ऊपर किसी भी डिस्क पर चुनें।

ब्लॉक लेयर स्टैटिस्टिक्स डॉक्यूमेंटेशन देखें ।

मुनिन की तरह कुछ का उपयोग करें और इसे ग्राफ करें। आप मुनिन को चेतावनी दे सकते हैं कि अगर यह एक सीमा से ऊपर चला जाता है, उदाहरण के लिए, 90% या जो भी आपके रेखांकन दिखाता है वह एक अच्छा चेतावनी आंकड़ा है।

उदाहरण के लिए, ये दो मुनिन रेखांकन दिखाते हैं कि / देव / साडी को देखने की जरूरत है। इस उदाहरण में यदि / dev / sdi एक सरणी का हिस्सा है, तो इसका कारण पूरे सरणी को भुगतना पड़ेगा।

प्रति उपकरण डिस्क उपयोग - दिन के हिसाब से

प्रति उपकरण डिस्क उपयोग - सप्ताह के अनुसार

यदि आप सप्ताह के ग्राफ को देखते हैं तो आप देखेंगे कि dev / sdc धीमा हो सकता है।

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

संक्षेप में, मैं शायद एक स्क्रिप्ट के साथ जाऊंगा अगर मेरे पास समय था, लेकिन मुनिन अगर मुझे बस एक त्वरित समाधान चाहिए और सर्वर से कनेक्ट करना आसान था।


धन्यवाद! लिनक्स में io के आँकड़ों की जानकारी वास्तव में नई है और ऐसी स्थितियों में (मुझे) उपयोगी लगती है।
इम्ज़ - इवान ज़खरीशेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.