क्रैश हुए Linux md RAID5 सरणी को कैसे पुनर्प्राप्त करें?


17

कुछ समय पहले मेरे पास घर में एक RAID5 प्रणाली थी। 4 डिस्क में से एक विफल रहा, लेकिन इसे हटाने और वापस डालने के बाद यह ठीक लग रहा था इसलिए मैंने एक रेसकंक शुरू किया। जब यह समाप्त हो गया, मुझे अपने डरावने होने का एहसास हुआ, कि 4 में से 3 डिस्क विफल रही। हालाँकि मैं ऐसा नहीं मानता। एक अलग RAID सरणी के प्रत्येक भाग के डिस्क पर कई विभाजन हैं।

  • md0 एक RAID1 सरणी है जिसमें sda1, sdb1, sdc1 और sdd1 शामिल हैं।
  • md1 एक RAID5 सरणी है जिसमें sda2, sdb2, sdc2 और sdd2 शामिल हैं।
  • md2 एक RAID0 सरणी है जिसमें sda3, sdb3, sdc3 और sdd3 शामिल हैं।

md0 और md2 रिपोर्ट सभी डिस्क को हटाती है जबकि md1 रिपोर्ट 3 विफल (sdb2, sdc2, sdd2)। यह मेरी uderstanding है कि जब हार्ड ड्राइव विफल हो जाते हैं तो सभी विभाजन केवल मध्य वाले नहीं खोए जाने चाहिए।

उस समय मैंने कंप्यूटर को बंद कर दिया और ड्राइव को अनप्लग कर दिया। तब से मैं एक छोटी सी नई डिस्क के साथ उस कंप्यूटर का उपयोग कर रहा था।

क्या डेटा रिकवर होने की कोई उम्मीद है? क्या मैं किसी तरह mdadm को समझा सकता हूं कि मेरे डिस्क वास्तव में काम कर रहे हैं? एकमात्र डिस्क जिसमें वास्तव में कोई समस्या हो सकती है sdc है, लेकिन वह भी अन्य सरणियों द्वारा रिपोर्ट की गई है।

अपडेट करें

मुझे आखिरकार पुराने डिस्क को कनेक्ट करने और SystemRescueCd से इस मशीन को बूट करने का मौका मिला। ऊपर सब कुछ स्मृति से लिखा गया था। अब मेरे पास कुछ कठिन आंकड़े हैं। यहाँ का उत्पादन हैmdadm --examine /dev/sd*2

/dev/sda2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:40:48 2010
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b48835 - correct
         Events : 53204

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8        2        0      active sync   /dev/sda2

   0     0       8        2        0      active sync   /dev/sda2
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdb2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b4894a - correct
         Events : 53205

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       18        1      active sync   /dev/sdb2

   0     0       0        0        0      removed
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48975 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     2       8       34        2      active sync   /dev/sdc2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdd2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48983 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     4       8       50        4      spare   /dev/sdd2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2

ऐसा प्रतीत होता है कि अंतिम बूट के बाद से चीजें बदल गई हैं। अगर मैं इसे सही ढंग से पढ़ रहा हूँ sda2, sdb2 और sdc2 काम कर रहे हैं और इसमें सिंक्रनाइज़ डेटा है और sdd2 अतिरिक्त है। मुझे स्पष्ट रूप से 3 असफल डिस्क देखकर याद है लेकिन यह अच्छी खबर है। फिर भी सरणी अभी भी काम नहीं कर रही है:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md125 : inactive sda2[0](S) sdb2[1](S) sdc2[2](S)
      1875194880 blocks

md126 : inactive sdd2[4](S)
      625064960 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

md0 को md127 नाम दिया गया है। md125 और md126 बहुत अजीब हैं। वे दो नहीं एक सरणी होना चाहिए। जिसे md1 कहा जाता था। md2 पूरी तरह से चला गया है, लेकिन यह मेरी स्वैप था इसलिए मुझे परवाह नहीं है।

मैं अलग-अलग नामों को समझ सकता हूं और यह वास्तव में मायने नहीं रखता। लेकिन 3 "सक्रिय सिंक" डिस्क के साथ एक सरणी अपठनीय क्यों है? और क्या sdd2 एक अलग सरणी में होने के साथ है?

अपडेट करें

मैंने सुपरब्लॉक का समर्थन करने के बाद निम्नलिखित की कोशिश की:

root@sysresccd /root % mdadm --stop /dev/md125
mdadm: stopped /dev/md125
root@sysresccd /root % mdadm --stop /dev/md126
mdadm: stopped /dev/md126

अब तक सब ठीक है। चूंकि sdd2 स्पेयर है इसलिए मैं इसे अभी तक जोड़ना नहीं चाहता।

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2 missing 
mdadm: cannot open device missing: No such file or directory
mdadm: missing has no superblock - assembly aborted

जाहिर है मैं ऐसा नहीं कर सकता।

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2        
mdadm: /dev/md1 assembled from 1 drive - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdb2[1](S) sda2[0](S)
      1875194880 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

यह भी काम नहीं किया। चलो सभी डिस्क के साथ प्रयास करें।

mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c,d}2
mdadm: /dev/md1 assembled from 1 drive and 1 spare - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat                           
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)
      2500259840 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

कोई भाग्य नहीं। इस उत्तर के आधार पर मैं कोशिश कर रहा हूँ:

mdadm --create /dev/md1 --assume-clean --metadata=0.90 --bitmap=/root/bitmapfile --level=5 --raid-devices=4 /dev/sd{a,b,c}2 missing
mdadm --add /dev/md1 /dev/sdd2

क्या ये सुरक्षित है?

अपडेट करें

मैं अपनी टिप्पणी में उस तालिका को बनाने के लिए उपयोग की गई सुपरब्लॉक पार्सर स्क्रिप्ट प्रकाशित करता हूं। शायद किसी को यह उपयोगी लगेगा। आपकी सभी मदद का धन्यवाद।


मुझे लगता है mdadm --re-addवह नहीं है जो आप खोज रहे हैं। क्या आपने हाल ही में मेमोरी टेस्ट किया? क्या आपके पास सरणी विफलता से संबंधित कोई लॉग संदेश है?
गिल्स एसओ- बुराई को रोकें '

@ गिल्स: मेरे पास क्रैश से पहले के लॉग नहीं हैं क्योंकि वे असफल सरणी पर संग्रहीत थे। और मुझे नहीं लगता कि मैं इसे मानक mdadm इंटरफ़ेस के साथ ठीक कर सकता हूं। किसी भी प्रकार का ऑपरेशन जिसमें एक रेसक्यूक्स शामिल है, 4 में से 1 डिस्क के साथ असंभव है। मुझे लगता है कि 3 "विफल" डिस्क में सब कुछ बहाल करने के लिए पर्याप्त जानकारी है। उदाहरण के लिए मैं उन्हें dd के साथ पढ़ सकता हूं। "अच्छा" एक सिंक से बाहर हो सकता है। मैं एक ज्ञापन करूंगा लेकिन वह मशीन अब एक नई डिस्क के साथ पूरी तरह से काम कर रही है।
स्ट्रिबिका

2
क्या आपने सरणी को रोकने की कोशिश की और mdadm -A /dev/md1 /dev/sd{b,c,d}2(शायद --force) के साथ एक नए को फिर से जोड़ना ? (यदि आप नहीं हैं, तो पहले सुपरब्लॉक का बैकअप लें।)
गिल्स एसओ- बुराई को रोकें '

@ गिल्स: मैंने अपने प्रश्न को अद्यतन जानकारी के साथ अद्यतन किया। मुझे वास्तव में बैकअप लेने की क्या आवश्यकता है? डिस्क के पहले कुछ ब्लॉक या इसके लिए एक विशिष्ट उपकरण है?
स्ट्रिबिका

@stribika: सुपरब्लॉक अंतिम पूर्ण 64kB ब्लॉक है जो विभाजन पर 64kB सीमा पर संरेखित है। मुझे नहीं पता कि /dev/sdd2यूयूआईडी के समान होने के बावजूद एक अलग सरणी में कैसे हो सकता है sd{a,b,c}2
गिल्स एसओ- बुराई को रोकना '

जवाबों:


12

पहले डिस्क की जांच करें, स्मार्ट सेल्फेस्ट चलाने की कोशिश करें

for i in a b c d; do
    smartctl -s on -t long /dev/sd$i
done

इसे समाप्त होने में कुछ घंटे लग सकते हैं, लेकिन हर कुछ मिनट में ड्राइव के परीक्षण की स्थिति की जाँच करें, अर्थात

smartctl -l selftest /dev/sda

यदि रीड की त्रुटियों के कारण डिस्क रिपोर्ट की स्थिति पूरी नहीं हुई है, तो इस डिस्क को md1 reassembly के लिए असुरक्षित माना जाना चाहिए। सेल्फेस्ट खत्म होने के बाद, आप अपने एरे को पुनः प्राप्त करने का प्रयास करना शुरू कर सकते हैं। वैकल्पिक रूप से, यदि आप अतिरिक्त सतर्क रहना चाहते हैं, तो डिस्क को जारी रखने से पहले किसी अन्य मशीन पर ले जाएं (बस खराब रैम / नियंत्रक / आदि के मामले में)।

हाल ही में, मेरे पास एक ऐसा मामला था। एक ड्राइव विफल हो गई, मैंने सरणी में फिर से जोड़ा लेकिन पुनर्निर्माण के दौरान 4 में से 3 ड्राइव पूरी तरह से विफल रहे। / Proc / mdadm की सामग्री आपकी जैसी थी (शायद उसी क्रम में नहीं)

md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)

लेकिन मैं भाग्यशाली था और इस के साथ सरणी को फिर से जोड़ा

mdadm --assemble /dev/md1 --scan --force

आपके द्वारा प्रदान किए गए --examine आउटपुट को देखकर, मैं निम्नलिखित परिदृश्य को बता सकता हूं: sdd2 विफल हुआ, आपने इसे हटा दिया और इसे फिर से जोड़ दिया, इसलिए यह एक पुन: निर्माण की कोशिश कर ड्राइव बन गया। लेकिन sda2 का पुनर्निर्माण करते समय असफल रहा और फिर sdb2 विफल रहा। इसलिए इवेंट काउंटर sdc2 और sdd2 में बड़ा है, जो सरणी में अंतिम सक्रिय ड्राइव हैं (हालांकि sdd में पुनर्निर्माण का मौका नहीं था और इसलिए यह सभी में सबसे पुराना है)। घटना काउंटरों में अंतर के कारण, - प्रवर्तन आवश्यक होगा। तो आप भी यह कोशिश कर सकते हैं

mdadm --assemble /dev/md1 /dev/sd[abc]2 --force

निष्कर्ष निकालने के लिए, मुझे लगता है कि यदि उपरोक्त आदेश विफल रहता है, तो आपको इस तरह से सरणी को फिर से बनाने की कोशिश करनी चाहिए:

mdadm --create /dev/md1 --assume-clean -l5 -n4 -c64 /dev/sd[abc]2 missing

यदि आप भाग करते हैं --create, तो missingभाग महत्वपूर्ण है, सरणी में चौथी ड्राइव जोड़ने का प्रयास न करें, क्योंकि तब निर्माण शुरू हो जाएगा और आप अपना डेटा खो देंगे । अनुपलब्ध ड्राइव के साथ सरणी बनाना, इसकी सामग्री को नहीं बदलेगा और आपके पास एक प्रति कहीं और प्राप्त करने का मौका होगा (raid5 उसी तरह काम नहीं करता है जैसे कि raid1)।

यदि वह सरणी को ऊपर लाने में विफल रहता है, तो इस समाधान (पर्ल स्क्रिप्ट) को यहाँ एक सरणी को फिर से बनाने का प्रयास करें

यदि आप अंत में सरणी को ऊपर लाने का प्रबंधन करते हैं, तो फ़ाइल सिस्टम अशुद्ध होगा और संभवतः दूषित हो जाएगा। यदि एक डिस्क पुनर्निर्माण के दौरान विफल हो जाती है, तो यह उम्मीद की जाती है कि सरणी बंद हो जाएगी और अन्य डिस्क पर कोई भी लेखन नहीं करने के लिए फ्रीज करेगा। इस मामले में दो डिस्क विफल हो गए , हो सकता है कि सिस्टम लेखन अनुरोधों को पूरा कर रहा था, जो पूरा करने में सक्षम नहीं था, इसलिए कुछ छोटा मौका है जो आपने कुछ डेटा खो दिया है, लेकिन एक मौका भी है कि आप इसे कभी भी नोटिस नहीं करेंगे :-)

संपादित करें: कुछ स्पष्टीकरण जोड़ा गया।


mdadm --assemble /dev/md1 /dev/sd[abc]2 --forceकाम किया। धन्यवाद। आपने मेरा डाटा बचा लिया! :) मैं चौथी डिस्क को जोड़ने का प्रयास नहीं करूंगा क्योंकि पहले 3 में उतना अच्छा नहीं है जितना मैंने पहले खरीदा था। स्वयं ने बताया कि प्रत्येक में 10-20 अपठनीय ब्लॉक हैं। मैं यह पहले नहीं जाँच के लिए बेवकूफ महसूस करता हूँ।
स्ट्राइबिका

व्यापक उत्तर के लिए धन्यवाद। मुझसे 50 प्रतिनिधि से पुरस्कृत।
0xC0000022L

Permute_array.pl ने मेरे लिए बहुत अच्छा काम किया। अन्य उपयोगकर्ताओं के लिए ध्यान दें: यह जिस डिवाइस सरणी को देखने की उम्मीद करता है, उसमें आपके द्वारा हटाए गए किसी भी मृत ड्राइव सहित सभी ड्राइव शामिल हैं।

"यदि आप - क्रिएट करते हैं, तो लापता भाग महत्वपूर्ण है, सरणी में चौथी ड्राइव को जोड़ने का प्रयास न करें, क्योंकि तब निर्माण शुरू हो जाएगा और आप अपना डेटा खो देंगे।" - बी.एस. यदि आपने निर्दिष्ट किया --assume-clean(आपने किया) तो यह नहीं होगा।
पीओजी

1

मैंने उपयोग करते समय कई समस्याओं का अनुभव किया mdadm, लेकिन कभी भी डेटा नहीं खोया। आपको --forceविकल्प से बचना चाहिए , या इसे बहुत सावधानी से उपयोग करना चाहिए, क्योंकि आप अपने सभी डेटा खो सकते हैं। कृपया अपना पोस्ट करें/etc/mdadm/mdadm.conf

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.