Ubuntu पर mdadm Array में विफल ड्राइव को बदलना
प्रकाशित: 15 फ़रवरी 2025 को 10:02:40 pm UTC बजे
यदि आप mdadm RAID सरणी में ड्राइव विफलता की भयावह स्थिति में हैं, तो यह आलेख बताता है कि Ubuntu सिस्टम पर इसे सही तरीके से कैसे बदला जाए।
Replacing a Failed Drive in an mdadm Array on Ubuntu
इस पोस्ट में दी गई जानकारी उबंटू 18.04 और इसके रिपॉजिटरी में शामिल mdadm के संस्करण पर आधारित है; लेखन के समय v4.1-rc1. यह अन्य संस्करणों के लिए मान्य हो भी सकता है और नहीं भी।
हाल ही में मेरे होम फ़ाइल सर्वर में अचानक ड्राइव फेल हो गई, जिसमें mdadm RAID-6 सरणी में नौ ड्राइव शामिल हैं। यह हमेशा डरावना होता है, लेकिन मैं सौभाग्य से जल्दी से एक प्रतिस्थापन ड्राइव का स्रोत बनाने में सक्षम था जो अगले दिन ही डिलीवर हो गया था ताकि मैं पुनर्निर्माण शुरू कर सकूं।
मैं यह मानता हूँ कि जब मैंने मूल रूप से फ़ाइल सर्वर सेटअप किया था, तो मैं थोड़ा ज़्यादा कंजूस था; केवल दो ड्राइव वास्तविक NAS ड्राइव (सीगेट आयरनवुल्फ़) हैं, जबकि बाकी डेस्कटॉप ड्राइव (सीगेट बाराकुडा) हैं। आश्चर्य की बात नहीं है, यह उन डेस्कटॉप ड्राइव में से एक थी जो काम करना बंद कर चुकी थी (हालाँकि, लगभग तीन साल की सेवा के बाद)। यह पूरी तरह से बेकार हो चुकी थी; इसे डेस्कटॉप USB एनक्लोजर में ले जाने के बाद मुझे इसमें से केवल एक परेशान करने वाली क्लिकिंग ध्वनि सुनाई दी और न तो Ubuntu 20.04 और न ही Windows 10 इसे पहचान पाया।
खैर, प्रतिस्थापन भाग पर (और हाँ, मैंने जो नया ड्राइव खरीदा था वह आयरनवुल्फ़ था, सबक सीखा) - एक चालू सरणी में ड्राइव खोना जितना डरावना है, यह उससे भी अधिक डरावना है यदि आप इसे बदलने की सही प्रक्रिया नहीं जानते हैं। यह पहली बार नहीं है जब मुझे mdadm सरणी में विफल ड्राइव को बदलना पड़ा है, लेकिन सौभाग्य से यह इतना दुर्लभ है कि मुझे आमतौर पर उचित कमांड देखना पड़ता है। इस बार मैंने भविष्य के संदर्भ के लिए अपना खुद का छोटा गाइड बनाने का फैसला किया।
तो, सबसे पहले, जब आपको mdadm से खतरनाक फेल इवेंट ईमेल मिलता है, तो आपको यह पहचानना होगा कि कौन सी ड्राइव फेल हुई है। ज़रूर, यह आपको डिवाइस का नाम बताएगा (मेरे मामले में /dev/sdf), लेकिन यह शायद स्पष्ट नहीं है कि वह वास्तव में कौन सी भौतिक ड्राइव है क्योंकि मशीन के बूट होने पर वे नाम बदल सकते हैं।
यदि आप निश्चित नहीं हैं कि कौन सा डिवाइस नाम विफल हुआ है, तो आप यह पता लगाने के लिए निम्नलिखित कमांड का उपयोग कर सकते हैं (/dev/md0 को अपने RAID डिवाइस से प्रतिस्थापित करें):
जैसा कि बताया गया है, मेरे मामले में यह /dev/sdf था, तो चलिए इसी से आगे बढ़ते हैं।
फिर, आप यह आदेश जारी करके विफल ड्राइव का सीरियल नंबर खोजने का प्रयास कर सकते हैं:
(यदि smartctl नहीं मिलता है, तो आपको Ubuntu पर smartmontools पैकेज स्थापित करना होगा)
इसके बाद सीरियल नंबर की तुलना ड्राइव के भौतिक लेबल पर दिए गए सीरियल नंबर से की जा सकती है, ताकि पता लगाया जा सके कि कौन सा ड्राइव खराब हो गया है।
हालांकि, इस बार मैं इतना भाग्यशाली नहीं था। ड्राइव पूरी तरह से खराब हो चुकी थी और उसने सीरियल नंबर सहित SMART या अन्य डेटा देने से भी इनकार कर दिया।
चूँकि मेरे पास सर्वर तक भौतिक पहुँच थी (जो आपको वास्तव में चाहिए अगर आप खुद एक भौतिक ड्राइव बदलने जा रहे हैं, मुझे लगता है ;-)) और जब डिस्क विफल हुई तब सर्वर वास्तव में चल रहा था (और RAID-6 रिडंडेंसी के कारण ठीक से चलता रहा), मैंने वास्तव में आदिम, लेकिन वास्तव में अत्यधिक प्रभावी और स्पष्ट, विधि का उपयोग किया, जिसमें बस एक बड़ी फ़ाइल को सर्वर पर कॉपी किया जाता था और देखा जाता था कि कौन सी HDD लाइट नहीं झिलमिलाती है। कुछ ही सेकंड में मैंने अपराधी की पहचान कर ली थी।
अब, भौतिक ड्राइव को बाहर निकालने से पहले, यह अच्छा विचार है कि इस आशय की औपचारिक सूचना mdadm को इस आदेश के माध्यम से दी जाए (उपयुक्तता के अनुसार डिवाइस के नाम को अपने नाम से प्रतिस्थापित करें):
सफलता मिलने पर, mdadm यह संदेश भेजकर उत्तर देगा कि उसने ड्राइव को "हॉट रिमूव" कर दिया है, क्योंकि उस समय वर्चुअल RAID डिवाइस वास्तव में चल रहा था।
यदि यह "डिवाइस या संसाधन व्यस्त" जैसे त्रुटि संदेश के साथ विफल हो जाता है, तो हो सकता है कि mdadm ने वास्तव में ड्राइव को पूरी तरह से विफल होने के लिए पंजीकृत नहीं किया है। ऐसा करने के लिए, यह आदेश जारी करें (फिर से, डिवाइस के नाम को अपने नाम से बदलना याद रखें):
इसके बाद, आप पिछले कमांड के साथ डिवाइस को ऐरे से हटाने में सक्षम हो जाएंगे।
अब ड्राइव को बदलने का समय आ गया है। यदि आप वास्तव में, वास्तव में - वास्तव में - निश्चित हैं कि आपकी मशीन और नियंत्रक हॉट स्वैपिंग का समर्थन करते हैं, तो आप मशीन को बंद किए बिना ऐसा कर सकते हैं। यह वास्तविक, उचित सर्वर हार्डवेयर पर चलने वाले महत्वपूर्ण उत्पादन सिस्टम पर जाने का तरीका होगा, जिसके बारे में आप जानते हैं कि यह इसे संभाल सकता है। मेरा होम फ़ाइल सर्वर एक उपभोक्ता ग्रेड डेस्कटॉप मदरबोर्ड पर आधारित है, जिसमें PCIe स्लॉट में कुछ सेमी-नोनेम SATA नियंत्रक हैं, जो अधिक SATA पोर्ट प्रदान करते हैं।
हालांकि SATA को सामान्यतः हॉट स्वैपिंग का समर्थन करना चाहिए , लेकिन मैं इस सेटअप में कोई जोखिम नहीं लेना चाहता था, इसलिए मैंने ड्राइव को बदलते समय मशीन को बंद करने का विकल्प चुना।
ऐसा करने से पहले, /etc/fstab फ़ाइल में RAID डिवाइस को कमेंट करना एक अच्छा विचार है ताकि उबंटू अगले बूट पर इसे स्वचालित रूप से माउंट करने का प्रयास न करे, क्योंकि यह हैंग हो सकता है और खराब RAID सरणी के कारण आपको रिकवरी मोड में जाने के लिए मजबूर कर सकता है। यदि यह एक डेस्कटॉप सिस्टम है तो यह कोई बड़ी समस्या नहीं हो सकती है, लेकिन मैं इस सर्वर को मॉनिटर या कीबोर्ड के बिना हेडलेस चलाता हूं, इसलिए यह थोड़ा परेशानी भरा होगा।
चमकदार नई ड्राइव के साथ मशीन को बूट करने के बाद, इसे पहचानने के लिए lsblk या किसी अन्य तरीके का उपयोग करें। यदि आपने कुछ और नहीं बदला है, तो संभवतः (लेकिन जरूरी नहीं कि) इसे आपके द्वारा बदले गए ड्राइव के समान नाम मिले। मेरे मामले में ऐसा हुआ, इसलिए नए को /dev/sdf भी कहा जाता है।
चूँकि मेरी सरणी भौतिक उपकरणों के बजाय विभाजनों पर आधारित है, इसलिए मुझे यह सुनिश्चित करने के लिए कि वे बिल्कुल समान हैं, एक कार्यशील ड्राइव से विभाजन तालिका को नई ड्राइव पर कॉपी करना पड़ा। यदि आप अपनी सरणी को भौतिक उपकरणों पर चलाते हैं, तो आप इस चरण को छोड़ सकते हैं।
मैंने इस उद्देश्य के लिए sgdisk का उपयोग किया, विभाजन तालिका को /dev/sdc से /dev/sdf में कॉपी किया। डिवाइस नामों को अपने नाम से मिलान करने के लिए बदलना सुनिश्चित करें।
यहाँ क्रम पर ध्यान दें : आप "टू" ड्राइव को पहले सूचीबद्ध करते हैं! यह मेरे लिए थोड़ा उल्टा है, लेकिन बस सुनिश्चित करें कि आप इसे सही तरीके से करें ताकि आपको सरणी में एक और ड्राइव विफलता न मिले ;-)
फिर UUID टकराव से बचने के लिए, नए ड्राइव के लिए नए UUID उत्पन्न करें:
और अब आखिरकार समय आ गया है कि सरणी में नई ड्राइव को जोड़ा जाए और पुनर्निर्माण पार्टी शुरू की जाए! (ठीक है, यह वास्तव में एक पार्टी नहीं है, यह वास्तव में एक बहुत ही धीमी और परेशान करने वाली प्रक्रिया है क्योंकि आप वास्तव में नहीं चाहते कि इस समय एक और ड्राइव विफल हो। हालांकि बीयर मदद कर सकती है)
वैसे भी, सरणी में नया ड्राइव जोड़ने के लिए, यह आदेश जारी करें (पुनः, डिवाइस नामों को अपने नाम से बदलना सुनिश्चित करें):
अगर सब कुछ ठीक रहा, तो ड्राइव को बिना किसी रुकावट के एरे में जोड़ दिया जाएगा। मेरा मानना है कि यह वास्तव में डिफ़ॉल्ट रूप से "हॉट स्पेयर" के रूप में जोड़ा गया है, लेकिन चूंकि इस एरे में एक डिस्क गायब है (जो विफल हो गई है), इसे तुरंत उपयोग में लाया जाता है और पुनर्निर्माण प्रक्रिया शुरू हो जाती है।
आप इस पर इस प्रकार नज़र रख सकते हैं:
इसमें शायद कुछ समय लगेगा; मेरे छोटे से सर्वर पर (जो कि मुख्य रूप से उपभोक्ता ग्रेड हार्डवेयर और डेस्कटॉप ड्राइव पर आधारित है, ध्यान दें) यह 100 एमबी/सेकंड से कम की गति तक पहुंचने में सक्षम था। ध्यान रखें कि यह RAID-6 है, इसलिए पुनर्निर्माण के साथ बहुत सारी समता गणनाएँ शामिल हैं; RAID-10 बहुत तेज़ होता। इस विशेष मशीन में AMD A10 9700E क्वाड कोर CPU है ('E' का अर्थ है कि यह एक अंडर-क्लॉक्ड ऊर्जा कुशल मॉडल है, यानी सुपर फास्ट नहीं है), बस आपको यह अनुमान लगाने के लिए कि क्या उम्मीद करनी है। मेरे सेटअप में नौ 8 TB ड्राइव के साथ, पूर्ण पुनर्निर्माण में 24 घंटे से थोड़ा अधिक समय लगा।
पुनर्निर्माण के दौरान, आप फ़ाइल सिस्टम को सरणी पर माउंट कर सकते हैं और यदि आप चाहें तो इसे सामान्य रूप से उपयोग कर सकते हैं, लेकिन मैं इसे पुनर्निर्माण के लिए छोड़ना पसंद करता हूँ जब तक कि यह पूरा न हो जाए। ध्यान रखें कि यदि एक ड्राइव विफल हो जाती है, तो जल्द ही दूसरी भी विफल हो सकती है, इसलिए आप चाहते हैं कि पुनर्निर्माण जितनी जल्दी हो सके पूरा हो जाए क्योंकि आप वास्तव में नहीं चाहते कि उस दौरान कोई अन्य ड्राइव विफल हो। इसलिए, इसे अन्य IO के साथ बोझ न बनाएं जो कड़ाई से आवश्यक नहीं है।
एक बार यह हो जाने पर, इसे अपनी /etc/fstab फ़ाइल में वापस जोड़ें, रीबूट करें और अपनी फ़ाइलों का आनंद लें :-)