mdadm: RAID 1 में घटकों को हटा नहीं सकता


14

मैं अपने / बूट विभाजन एक है RAID 1 सरणी में mdadm का उपयोग करते हुए। इस सरणी को अतीत में कुछ बार घटाया गया है, और हर बार जब मैं भौतिक ड्राइव को हटाता हूं, तो एक नया जोड़ें, सरणी को सामान्य होने के लिए लाएं, यह एक नया ड्राइव अक्षर का उपयोग करता है। पुराने को अभी भी सरणी में छोड़ना और विफल होना। मैं उन सभी घटकों को हटाने के लिए प्रतीत नहीं हो सकता जो अब मौजूद नहीं हैं।

[root@xxx ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdg1[10] sde1[8](F) sdb1[7](F) sdd1[6](F) sda1[4] sdc1[5]
      358336 blocks super 1.0 [4/3] [UUU_]

यहां मैंने गैर-मौजूद ड्राइव और विभाजन को हटाने की कोशिश की है। उदाहरण के लिए, /dev/sdb1

[root@xxx ~]# mdadm /dev/md0 -r /dev/sdb1
mdadm: Cannot find /dev/sdb1: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r faulty
mdadm: Cannot find 8:49: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r detached
mdadm: Cannot find 8:49: No such file or directory

8:49मेरा मानना ​​है कि इसमें दिखाए गए प्रमुख और मामूली संख्या को संदर्भित करता है --detail, लेकिन मुझे यकीन नहीं है कि यहां से कहां जाना है। मैं रिबूट या mdadm को पुनरारंभ करने से बचने की कोशिश कर रहा हूं।

[root@xxx ~]# mdadm --detail /dev/md0 
/dev/md0:
        Version : 1.0
  Creation Time : Thu Aug  8 18:07:35 2013
     Raid Level : raid1
     Array Size : 358336 (350.00 MiB 366.94 MB)
  Used Dev Size : 358336 (350.00 MiB 366.94 MB)
   Raid Devices : 4
  Total Devices : 6
    Persistence : Superblock is persistent

    Update Time : Sat Apr 18 16:44:20 2015
          State : clean, degraded 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 3
  Spare Devices : 0

           Name : xxx.xxxxx.xxx:0  (local to host xxx.xxxxx.xxx)
           UUID : 991eecd2:5662b800:34ba96a4:2039d40a
         Events : 694

    Number   Major   Minor   RaidDevice State
       4       8        1        0      active sync   /dev/sda1
      10       8       97        1      active sync   /dev/sdg1
       5       8       33        2      active sync   /dev/sdc1
       6       0        0        6      removed

       6       8       49        -      faulty
       7       8       17        -      faulty
       8       8       65        -      faulty

नोट: सरणी अभी वैध रूप से नीच है और मुझे बोलते हुए एक नई ड्राइव मिल रही है। हालाँकि, जैसा कि आप ऊपर देख सकते हैं, इससे कोई फर्क नहीं पड़ता। मुझे अभी भी /dev/sdb1इस सरणी से निकालने में सक्षम होना चाहिए ।


आपको "हटाए गए" राज्य में डिस्क को हटाने के लिए --force की आवश्यकता नहीं है, और यह अधिक गंभीर समस्या को छिपा सकता है। इसे छोड़ दो।

जवाबों:


16

यह इसलिए है क्योंकि डिवाइस नोड्स आपके सिस्टम पर मौजूद नहीं है (शायद udev ने उन्हें हटा दिया जब ड्राइव मर गया)। आपको कीवर्ड का उपयोग करके failedया detachedइसके बजाय उन्हें निकालने में सक्षम होना चाहिए :

mdadm -r /dev/md0 failed     # all failed devices
mdadm -r /dev/md0 detached   # failed ones that aren't in /dev anymore

यदि आपके mdadm का संस्करण ऐसा करने के लिए बहुत पुराना है, तो आप इसे mknodफिर से मौजूद करने के लिए डिवाइस को 'आईएनजी' द्वारा काम में लाने में सक्षम हो सकते हैं । या, ईमानदारी से, बस इसे अनदेखा करें - यह वास्तव में कोई समस्या नहीं है, और अगली बार जब आप रिबूट करते हैं तो दूर जाना चाहिए।


मैंने कीवर्ड का उपयोग करने की कोशिश की है, आप मुझे मूल पोस्ट में दिए गए आउटपुट को देख सकते हैं। मैं देख लूंगा mknod। हाँ, यह शायद एक मुद्दा नहीं है, लेकिन मैं ओसीडी, योग्य हूं।
साजन पारिख

हां, मैंने इसे पूरा करने के लिए मैकनॉड का इस्तेमाल किया और यह काम कर गया।
साजन पारिख

@SajanParikh वास्तव में, किसी तरह मैं लाइनों को दिखाने से चूक गया था कि आप पहले से ही विफल और अलग हो चुके हैं। खुशी है कि mknod काम किया।
व्युत्पन्न

6

मैंने जो कुछ किया, उसका उपयोग कर रहा था mknodजैसे @derobert ने उन उपकरणों को बनाने का सुझाव दिया, जिनकी mdadmतलाश थी। मैंने कोशिश की कि प्रमुख / मामूली संख्या में mdadm मुझे बताए कि यह अलग-अलग ड्राइव अक्षरों के साथ नहीं मिल सकता है जिन्हें मैं काम करने तक हटाने की कोशिश कर रहा था।

mknod /dev/sde1 b 8 17

फिर मुझे --forceघटक को हटाने के लिए विकल्प का उपयोग करना पड़ा ।

mdadm /dev/md0 --remove --force /dev/sde1

फिर, मैंने उस बनाई गई ब्लॉक डिवाइस को हटा दिया।

rm /dev/sde1

हम्म ... 8:17 sdb1 है। ((:६५ sde1 है) लेकिन वह भी गायब था, इसलिए मुझे लगता है कि काम करता है ...
अपमानजनक

इसने मेरे लिए काम नहीं किया, mdadmयह कहना जारी रखा: "डिवाइस या संसाधन व्यस्त", लेकिन इसने मुझे उसे नकली ब्लॉक डिवाइस के साथ नहीं, बल्कि "ट्रू" ब्लॉक डिवाइस जैसे लूपबैक माउंटेड इमेज के साथ खिलाने की कोशिश की। इस बिंदु पर, मुझे पता चला कि मेरे पास एक बासी /dev/loopथा जो अभी भी अपमानित सरणी पर एक फ़ाइल का उपयोग कर रहा था । मैंने इसे अलग कर दिया और अंत में mdadmमुझे सरणी को बंद करने दिया। Horay! इसे पढ़ने वाले सभी लोगों के लिए, mdadmइतना झटका होने के लिए हमेशा एक तार्किक व्याख्या होती है , इसलिए एक बासी प्रक्रिया / फ़ाइल / माउंटपॉइंट / एनएफएस हैंडलर / ओपन बैश / लूपबैक डिवाइस / आदि देखें। अभी भी अपमानित सरणी का उपयोग कर रहा है। :)
एवियो

मैं एक ही प्रमुख और मामूली संस्करणों (मेरे मामले में 8:18) का उपयोग करने में सक्षम था नकली / देव / sd22 डिवाइस mknod करने के लिए। उसके बाद, mdadm --remove ने / proc / mdstat से / dev / sdb2 का बासी रिकॉर्ड हटा दिया। याद रखें कि rm / dev / sdb2 को सफल - अंतिम कार्रवाई के बाद याद रखें।
15

3

आप सरणी में डिस्क की संख्या घटाकर भी ठीक कर सकते हैं:

मेरे मामले में मेरे पास छापे हैं -1 सरणी के /dev/md0साथ /dev/sda1और "हटा दिया गया"। मैं सिर्फ इसे केवल एक ड्राइव का उपयोग करने के लिए सिकोड़ता हूं:

mdadm -G /dev/md0 --raid-devices=1 --force

उसके बाद हटा दिया गया वास्तव में हटा दिया गया था (अब कोई हटाए गए लाइनों में नहीं mdadm --detail)


आपको इस दृष्टिकोण से सावधान रहना होगा, हालाँकि। अच्छी तरह से समझें कि आप किस प्रकार के RAID को संशोधित करने से पहले काम कर रहे हैं - भय-उपकरणों।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.