लिनक्स RAID5 सरणी में नॉट-फ़ेल डिस्क को सुरक्षित रूप से कैसे बदलें?


26

मेरे पास 4 डिस्क पर एक सॉफ्टवेयर RAID5 सरणी (लिनक्स md) है।

मैं एक नए सिरे से एक डिस्क को बदलना चाहता हूं, बिना अपमानित राज्य में सरणी को डाले , और यदि संभव हो तो, ऑनलाइन। यह कैसे संभव होगा?

यह महत्वपूर्ण है क्योंकि मैं नहीं चाहता:

  • दूसरे डिस्क पर जोर देने का जोखिम उठाएं ताकि पुनर्निर्माण के दौरान दुर्घटना हो सकती है,
  • "नो-पैरिटी स्टेट" में होने का जोखिम उठाएं, इसलिए मेरे पास कुछ समय के लिए सुरक्षा जाल नहीं है।

मुझे लगता है कि ऐसा करना ऑनलाइन बहुत अधिक है और मुझे बस कच्ची प्रतिलिपि ( dd) पुरानी डिस्क के डेटा को नए एक ऑफ़लाइन करना चाहिए और फिर इसे प्रतिस्थापित करना चाहिए, लेकिन मुझे लगता है कि यह सैद्धांतिक रूप से संभव है ...

कुछ संदर्भ : वे डिस्क सभी लगभग 5.5 से अधिक वर्षों से लगातार घूम रहे हैं। वे अभी भी पल के लिए पूरी तरह से काम करते हैं और वे सभी (लंबे) स्मार्ट आत्म परीक्षण पास करते हैं। हालांकि, मेरे पास यह सोचने के कारण हैं कि उन 4 डिस्क में से एक बहुत लंबे समय तक नहीं रहेगी (अनुमानित पूर्वानुमान विफलता)।

जवाबों:


36

Mdadm 3.3 का उपयोग करना

के बाद से mdadm3.3 (2013 जारी किया गया सितम्बर 3), यदि आप एक है 3.2+ गिरी , तो आप आगे बढ़ सकते हैं के रूप में इस प्रकार है:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1वह उपकरण है जिसे आप बदलना चाहते हैं, sdc1ऐसा करने के लिए पसंदीदा डिवाइस है और इसे आपके सरणी पर एक स्पेयर के रूप में घोषित किया जाना चाहिए।

--withविकल्प वैकल्पिक, अगर निर्दिष्ट नहीं है, किसी भी उपलब्ध अतिरिक्त इस्तेमाल किया जाएगा।

पुराना mdadm संस्करण

नोट: आपको अभी भी 3.2+ कर्नेल की आवश्यकता है ।

सबसे पहले, एक अतिरिक्त (की जगह के रूप में एक नया ड्राइव जोड़ने md0और sdc1अपने RAID और डिस्क डिवाइस के साथ, क्रमशः):

# mdadm /dev/md0 --add /dev/sdc1

फिर, इस तरह कॉपी-रिप्लेसमेंट ऑपरेशन शुरू करें ( sdd1फेल होने वाली डिवाइस):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

परिणाम

सिस्टम से सभी पठनीय ब्लॉक कॉपी करेंगे sdd1करने के लिए sdc1। यदि यह एक अपठनीय ब्लॉक की बात आती है, तो यह इसे समता से पुनर्निर्मित करेगा। एक बार ऑपरेशन पूरा हो जाने के बाद, पूर्व स्पेयर (यहां sdc1:) सक्रिय हो जाएगा, और असफल ड्राइव को असफल (एफ) के रूप में चिह्नित किया जाएगा ताकि आप इसे हटा सकें।

नोट: श्रेय फ्रॉस्ट्सचुट्ज़ और अंसार एस्ज़्टरमैन को जाता है जिन्होंने मूल समाधान पाया ( डुप्लिकेट प्रश्न देखें )।

पुरानी गुठली

अन्य उत्तर सुझाते हैं:

  • जॉनी का दृष्टिकोण : सरणी को RAID6 में बदलें, डिस्क को "बदलें", फिर वापस RAID5 में,
  • Hauke ​​Laging का दृष्टिकोण : संक्षिप्त रूप से RAID5 सरणी से डिस्क को हटा दें, इसे नई डिस्क के साथ एक RAID1 (दर्पण) का हिस्सा बनाएं और उस दर्पण ड्राइव को वापस RAID5 सरणी (सैद्धांतिक) में जोड़ें ...

2
mdadm --add--replaceकाम करने से पहले अभी भी जरूरत है । ( mdadm3.3, उबंटू 15.10)। यदि आप --addबाद में करते हैं, तो --replaceजैसे ही एक अतिरिक्त जोड़ा जाता है, नकल शुरू हो जाएगी। (डिवाइस "वांछित प्रतिस्थापन" के रूप में चिह्नित रहता है)।
पीटर कॉर्डेस

3

यह आवश्यकताओं को पूरा करना संभव हो सकता है

  1. ऑनलाइन
  2. जिसको बदलना है उसे छोड़कर किसी भी डिस्क पर जोर न दें

लेकिन इसके बाद भी अगर आप काम कर सकते हैं तो आपको उस तरह की कोई सिफारिश "किताबों" में नहीं मिलेगी ...

विचार:

  1. सरणी से बाहर (कुछ पल के लिए) ओएलडी डिस्क लें: mdadm --manage /dev/raid5 --fail /dev/OLD
  2. डिस्क और OLD से एक नया md डिवाइस (RAID-1) बनाएँ: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. RAID-1 को सरणी में रखें (इसके बजाय / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

:-) क्या होना चाहिए :

  1. RAID-5 को सिंक में / dev / md42 मिलता है। यह लंबा नहीं होना चाहिए।
  2. RAID-5 आम तौर पर फिर से चालू होता है (लेकिन धीमा)।
  3. / dev / NEW को / dev / OLD के साथ सिंक किया गया है।

समन्वयन प्रगति ( cat /proc/mdstatया mdadm --monitor) देखें। यदि सिंक समाप्त हो गया है RAID-5 को RAID-5 से बाहर ले जाएँ, RAID-1 को रोकें, RAID-5 में पुनः जोड़ें / dev / NEW। यदि सब कुछ ठीक है, तो समस्याओं से बचने के लिए / dev / OLD पर mdraid सुपरब्लॉक को अधिलेखित करें:mdadm --zero-superblock

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


3

अगर आपको RAID-6 (1 के बजाय 2 पैरिटी डिस्क) चलाने में कोई आपत्ति नहीं है, और यदि आप mdadmin 3.1.x या अधिक चला रहे हैं, तो आप एक अतिरिक्त समानता डिस्क जोड़ने के लिए अपने RAID -5 सरणी को RAID-6 में बदल सकते हैं । हालाँकि, यह पुनर्निर्माण के दौरान सरणी को तनाव में रखेगा। और इसके कुछ प्रदर्शन निहितार्थ हैं क्योंकि लिखने के दौरान अद्यतन करने के लिए अधिक समानता डिस्क हैं।

लेकिन अगर यह सफलतापूर्वक पूरा हो जाता है, तो आप अपनी असफल डिस्क को जगह में रख सकते हैं और जब यह अंततः विफल हो जाता है, तो आपको अभी भी सरणी के लिए समानता सुरक्षा मिली हुई है। मुझे लगता है कि यदि आप इसे RAID6 के रूप में रखने के लिए इंतजार नहीं करते हैं, तो आप RAID6 से RAID5 में वापस सरणी 5 में परिवर्तित कर सकते हैं।

मुझे सरणी -5 को RAID के रूप में रखने के लिए एक ऑनलाइन तरीके का पता नहीं है और डिस्क को अपमानित मोड में डाले बिना डिस्क को बदल दें, क्योंकि मुझे लगता है कि आपको इसे बदलने में विफल के रूप में चिह्नित करना होगा। आपका डीडी कॉपी आइडिया ऐसा करने का तरीका हो सकता है।


@haukelaging FYI करना अब कर्नेल 3.2 से संभव है, मेरा उत्तर देखें ।
टॉटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.