कैसे सॉफ्टवेयर raid resync को बाधित करने के लिए?


50

मैं एक डेबियन निचोड़ सॉफ्टवेयर छापे पर एक चल रहे resync ऑपरेशन को बाधित करना चाहता हूं। (यह नियमित रूप से निर्धारित तुलना रेसक्यू है। इस तरह के मामले में छापे की सरणी अभी भी साफ है। डिस्क के विफल होने और प्रतिस्थापित होने के बाद पुनर्निर्माण के साथ इसे भ्रमित न करें।)

इस शेड्यूल किए गए रेसक्यू ऑपरेशन को चलाने के दौरान कैसे रोकें? एक अन्य छापे की सरणी "रेसक्यू पेंडिंग" है, क्योंकि वे सभी एक ही दिन (रविवार की रात) एक के बाद एक चेक किए जाते हैं। मैं इस रविवार की रात के पुनरुत्थान का पूर्ण विराम चाहता हूं।

[संपादित करें: sudo kill -9 1010इसे बंद न करें , 1010 md2_resync प्रक्रिया का PID है]

मैं यह भी जानना चाहूंगा कि कैसे मैं रेज़िन और अंतराल के बीच के अंतराल को अगले एक तक नियंत्रित कर सकता हूं।

[Edit2: मैंने अभी जो किया था वह रेसकंउ को बहुत धीमा करने के लिए था, इसलिए यह अब और विचलित नहीं करता है:

sudo sysctl -w dev.raid.speed_limit_max=1000

http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html से लिया गया

रात के दौरान मैं इसे एक उच्च मूल्य पर वापस सेट कर दूंगा, इसलिए रेसक्यूस समाप्त हो सकता है।

यह वर्कअराउंड अधिकांश स्थितियों के लिए ठीक है, फिर भी यह जानना दिलचस्प होगा कि मैंने जो पूछा वह संभव है। उदाहरण के लिए किसी सरणी को विकसित करना संभव नहीं लगता है, जबकि यह "लंबित" पुनरुत्थान या पुनरुत्थान कर रहा है]


मुझे नहीं लगता कि मैं एक resync को रद्द करने के लिए गेंदों को मिला है। मुझे डर है कि यह फिर कभी शुरू न हो।
टॉम ओ'कॉनर

1
@ टोम: यह केवल सामान्य रेसक्यू है जो हर रविवार को चेक करता है यदि सब कुछ मेल खाता है। अगर यह बंद हो जाता है (जैसे मशीन को बंद करके) तो यह अगले बूट पर जारी रहता है।
एडम 5

ओह ठीक। यह ठीक है
टॉम ओ'कॉनर

जवाबों:


48

अगर आपकी सरणी md0तब हैecho "idle" > /sys/block/md0/md/sync_action

'निष्क्रिय' एक सक्रिय रेसक्यू / रिकवरी आदि को रोक देगा। इस बात की कोई गारंटी नहीं है कि एक और रेसक्यू / रिकवरी स्वचालित रूप से फिर से शुरू नहीं हो सकती है, हालांकि इसे ट्रिगर करने के लिए कुछ घटना की आवश्यकता होगी।

http://www.mjmwired.net/kernel/Documentation/md.txt#477


मैं इसकी अनुमतियों को बदलने के बाद टेक्स्टफाइल को अपडेट कर सकता था, लेकिन फ़ाइल की सामग्री को उसी उदाहरण में पीछे से "resync" में बदल दिया जाता है। और resync दूसरे सरणी पर जारी है (जो पहले "लंबित" था)। जब मैं दूसरे सरणी की फ़ाइल में "निष्क्रिय" लिखता हूं तो वह फिर से स्वैप हो जाती है, लेकिन कभी नहीं रुकती है।
आदम ५

2
यदि आपके पास कई छापे हैं: इको आइडल | सूदो टी / सीस / ब्लॉक / एमडी * / एमडी / सिंक_एक्शन
ओले तांगे

वास्तव में "निष्क्रिय" केवल चेक को रोक देता है। अगला "चेक" /sys/block/md0/md/sync_min’. To reset this write इस फ़ाइल पर 0` पर जारी रहेगा ।
रदिमीयर

33

मैं कुछ आई / ओ को दूसरे कंप्यूटर पर बैकअप करने के लिए कुछ आई / ओ को बचाने के लिए रिस्क्यू प्रक्रिया को धीमा या रोकना चाहता था। इस धागे ने मेरी मदद की लेकिन मुझे एक और उपाय मिल गया।

मेरे डेबियन लेन पर:

  • echo "idle" > /sys/block/md0/md/sync_action काम करता है, लेकिन resync प्रक्रिया तुरंत फिर से शुरू हो जाती है।

  • checkarray -x --all : काम करता है, लेकिन एक ही परिणाम: resync प्रक्रिया तुरंत फिर से शुरू की जाती है।

इसलिए मैं इस विधि का उपयोग करता हूं: echo 0 > /proc/sys/dev/raid/speed_limit_max


1
दिलचस्प दृष्टिकोण। मैंने पाया कि आपको speed_limit_min में मान को नीचे फेंकना होगा।
डायोमिडिस स्पिनेलिस

1
मैं भी speed_limit_minपूरी तरह से resync को थामने के लिए 0 पर सेट करने की आवश्यकता है ।
njahnke

12

आप कमांड के निम्नलिखित अनुक्रम (रूट के रूप में) का उपयोग करके प्रगति में एक सरणी resync को रद्द कर सकते हैं:

echo frozen > /sys/block/md0/md/sync_action
echo none > /sys/block/md0/md/resync_start
echo idle > /sys/block/md0/md/sync_action

ध्यान दें कि यह आपके सरणी को असंगत स्थिति में छोड़ सकता है । ऐसा तब तक न करें जब तक कि आपको यकीन न हो कि सरणी अच्छे आकार में है, और बाद में सिंक को फिर से चलाएँ।

(क्रेडिट जहां क्रेडिट की देयता है: इस थ्रेड में यह कमी पाई गई ।)


8

जैसा कि ऊपर बताया गया है, डेबियन / उबंटू सिस्टम पर /etc/cron.d/mdadmस्क्रिप्ट /usr/share/mdadm/checkarrayफिर से सिंक चेक आरंभ करने के लिए स्क्रिप्ट को आमंत्रित करता है।

इस स्क्रिप्ट में सभी चल रहे सिंक चेक को रद्द करने का विकल्प है:

/usr/share/mdadm/checkarray -x --all

3

री-सिंक को रद्द करने के तरीके के बारे में निश्चित नहीं है, लेकिन शेड्यूल को /etc/cron.d/mdadmडेबियन / उबंटू सिस्टम द्वारा नियंत्रित किया जाता है।

स्क्रिप्ट /usr/share/mdadm/checkarrayआपके प्रश्न के दूसरे भाग पर कुछ प्रकाश डाल सकती है, क्योंकि क्रोन द्वारा कहा जा रहा है।


3

यदि आपका md डिवाइस md0 है और आप resync लिखना बंद करना चाहते हैं:

echo "idle" > /sys/block/md0/md/sync_action

3

इसके लिए संभावित समाधान, विवरण में आने के लिए थोड़ा सा समय लगा।

मेरी प्रणाली: सेंटोस 6.5 mdadm v3.3.2

लगातार जांच हर हफ्ते, उनमें से एक को रोकना चाहता था, RAID साफ है, चेक को /etc/cron.d/raid-check स्क्रिप्ट के माध्यम से बुलाया गया था जो साप्ताहिक रूप से चलाया जाता है।

चेक को रद्द करने के लिए, आप --misc --action फ़ंक्शन का उपयोग करते हैं। मान लें कि RAID डिवाइस / dev / md0 है और यह सिर्फ साप्ताहिक स्थिरता की जांच है और डिवाइस की विफलता नहीं है, तो आप रूट के रूप में होंगे:

mdadm --misc --action = निष्क्रिय / देव / md0

इसी तरह, स्थिरता की जांच शुरू करने के लिए

mdadm --misc --action = check / dev / md0


2
echo "idle" > /sys/block/md0/md/sync_action

तब काम नहीं करता है जब / sys / block / md * / md / Sync_action "resync" होता है (इसके विपरीत यदि इसकी स्थिति "जाँच" या "मरम्मत" है। तो आप "idle" को Sync_action फ़ाइल में इको कर सकते हैं, हालांकि यह प्रभाव नहीं करता है) । प्रगति कर्नल प्रलेखन फ़ाइल यहाँ गलत तरीके से कहा गया है कि यह काम करेंगे, लेकिन यह मेरे लिए काम नहीं किया:

'निष्क्रिय' एक सक्रिय रेसक्यू / रिकवरी आदि को रोक देगा। इस बात की कोई गारंटी नहीं है कि एक और रेसक्यू / रिकवरी स्वचालित रूप से फिर से शुरू नहीं हो सकती है, हालांकि इसे ट्रिगर करने के लिए कुछ घटना की आवश्यकता होगी।


1
आप हालांकि इस स्थिति में / resys / sys / block / md * / md / sync_speed_max के साथ "resync" की दर को प्रभावित कर सकते हैं। मुझे यकीन नहीं है कि डॉक्यूमेंटेशन गलत क्यों है, शायद कोई नहीं जानता
ब्रायन

कृपया जानने के लिए समय के एक मिनट ले स्टैक एक्सचेंज markdown वाक्यविन्यास ( meta.serverfault.com/editing-help )
स्वेन

0

मुझे पता है कि यह एक 4 साल पुरानी पोस्ट है, लेकिन आप यह भी कर सकते हैं (सरणी और sdb4 को पुनरुत्थान "डिस्क" के रूप में md0 मानकर):

    mdadm /dev/md0 --fail /dev/sdb4 && mdadm /dev/md0 --remove /dev/sdb4

यह कमांड sdb4 को एक विफल डिस्क के रूप में दिखाती है और इसलिए इसे रिसक को रोकते हुए इसे सरणी से निकालती है। यदि resync-stop कार्रवाई के दौरान कोई त्रुटि नहीं थी, तो यह कमांड md0 सरणी से sdb4 को भी हटा देगा। यदि कोई त्रुटि थी तो डिस्क विफल स्थिति में रहती है लेकिन सरणी में बनी रहती है।

यदि आप किसी डिस्क को कहीं भी विफल करते हैं mdadm, तो आप इसे तार्किक रूप से विफल सेट करते हैं । यदि सरणी साफ (नीचा नहीं) थी, तो डिस्क सुसंगत रहती है और बिना किसी भय के --add << डिस्क >> -assume-clean विकल्प द्वारा फिर से जोड़ा जा सकता है। यदि अलग किए जाने के बाद कोई कार्रवाई की गई थी (जैसे। resync, पुनर्निर्माण, या यहां तक ​​कि एक लेखन) तो --assume-clean पूरी तरह से विफल हो जाएगा और तुरंत एक resync कार्रवाई शुरू करेगा।

बदलना raid.speed_limit_minऔर raid.speed_limit_maxकिसी तरह से एक बुरा विचार है क्योंकि यह न केवल resync / rebuild गति को प्रभावित करता है बल्कि सामान्य ऑपरेशन गति को भी प्रभावित करता है, और शायद आप RAID सरणियों का उपयोग करके प्राप्त किए गए बहुत सारे प्रदर्शन को खो देंगे।


5
मुझे लगता है कि RAID से एक स्वस्थ डिस्क को निकालना एक बुरा विचार है। अधिकांश समय यह किसी भी समस्या का कारण नहीं हो सकता है, लेकिन हर बार जब आप इसे करते हैं, तो डेटा हानि या डेटा भ्रष्टाचार के कारण जोखिम होता है।
कैस्परड

1
ऐसा कभी मत करो। यदि आप --assume-cleanलाइव सिस्टम पर डिस्क जोड़ते हैं , और आपके पास शेष डिस्क पर कोई भी लेखन होता है , तो आप परेशानी पूछ रहे हैं।
sanmai
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.