नॉलेजबेस · सर्वर डेडिकेटेड और VPS

Linux सॉफ़्टवेयर RAID का प्रबंधन (भाग II): डिस्क फ़ेल होने के बाद रिकवरी

अंतिम अपडेट 2019-02-03

Linux सॉफ़्टवेयर RAID का प्रबंधन (भाग II): डिस्क फ़ेल होने के बाद रिकवरी

यह लेख आपको बताता है कि एक डिस्क के फ़ेल होने की स्थिति में Linux सॉफ़्टवेयर RAID को कैसे रिकवर करें। आगे के उदाहरणों में हम निम्नलिखित मान्यताओं का उपयोग करेंगे:

  • आप Linux के सबसे नए संस्करण (CentOS 5+) का उपयोग कर रहे हैं।
  • आपके पास दो (2) HDD (sda, sdb) हैं जो SAS/SATA कंट्रोलर से जुड़ी हैं, और यह Linux हार्डवेयर RAID नहीं है।
  • आपके पास Linux सॉफ़्टवेयर RAID (MD) है।
  • आपके पास दो (2) RAID1 ऐरे हैं, अर्थात्:
    • md0 (sda1+sdb1): /boot
    • md1 (sda2+sdb2): LVM
  • आपका एक ऐरे डिग्रेडेड है लेकिन चालू है (केवल एक सदस्य फ़ेल हुआ है)।
  • आपके पास पूर्ण root एक्सेस है।


हेल्थ चेक करना


अपनी डिस्क की स्थिति जांचें। आपकी डिस्क की स्थिति के आधार पर आपको निम्नलिखित परिणाम दिखाई देने चाहिए:

स्वस्थ ऐरे

cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0]

      511988 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]

      976247676 blocks super 1.1 [2/2] [UU]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

ध्यान दें कि दोनों ऐरे (md0, md1) इस प्रकार हैं:

    1. सक्रिय
    2. इनमें दो सदस्य हैं: sdb1[1], sda1[0]
    3. दोनों सदस्य चालू हैं: [2/2] [UU]

 

cat /proc/partitions

major    minor     #blocks  name

   8          0               976762584 sda

   8          1              512000 sda1

   8          2               976248832 sda2

   8         16             976762584 sdb

   8         17             512000 sdb1

   8         18            976248832 sdb2

   9          1              976247676 md1

 253        0              2097152 dm-0

 253        1              2097152 dm-1

   9          0               511988 md0

 

ध्यान दें कि निम्नलिखित बातें सही होनी चाहिए:

    1. दोनों फिजिकल डिस्क मौजूद हैं: sda, sdb
    2. दोनों ऐरे मौजूद हैं: md0, md1
    3. दोनों डिस्क का आकार समान है: sda = sdb = 976762584
    4. दोनों डिस्क में पार्टीशन एक ही तरह से बनाए गए हैं:
    • sda1 = sdb1 = 512000
    • sda2 = sdb2 = 976248832

 

डिग्रेडेड ऐरे


एकल पार्टीशन की विफलता (sda1)

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0](F)

     511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0]

     976247676 blocks super 1.1 [2/2] [UU]

     bitmap: 0/8 pages [0KB], 65536KB chunk

unused devices: <none>

 

नोट: एक या अधिक RAID ऐरे में सदस्य अनुपस्थित दिखाई देंगे: [2/1] [_U]


पूरी डिस्क की विफलता (sda)

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

गंभीर विफलता की स्थिति में, या सिस्टम रीस्टार्ट पर डिस्क के इनिशियलाइज़ न होने पर, डिस्क स्वयं गायब हो सकती है, जैसा कि नीचे दिए गए उदाहरणों में दिखाया गया है।


डिस्क अनुपस्थित: 
/proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

डिस्क अनुपस्थित: /proc/partitions

major   minor    #blocks  name

   8        16             976762584 sdb

   8        17             512000 sdb1

   8        18             976248832 sdb2

   9          1             976247676 md1

 253        0              2097152 dm-0

 253        1             2097152 dm-1

   9         0              511988 md0

 

खराब डिस्क को हटाना

डिवाइस को मैन्युअली ‘failed’ के रूप में चिह्नित करना

किसी डिवाइस को मैन्युअली खराब (faulty) के रूप में तभी चिह्नित करें, जब किसी पार्टीशन में टाइमआउट या रीड एरर के कारण उसका कोई ऐरे degraded स्थिति में हो। फिजिकल डिस्क स्वयं सामान्य रूप से काम करती रहनी चाहिए।

    • कृपया देखें /proc/mdstat और सुनिश्चित करें कि खराब डिस्क के सभी पार्टीशन ‘faulty’ के रूप में सेट हैं।

सावधानी: सुनिश्चित करें कि आप केवल उन्हीं पार्टीशन को failed कर रहे हैं जो संबंधित खराब डिस्क के हैं (यानी sda1/sda2 के लिए sda और sdb1/sdb2 के लिए sdb).

सेट करें sda1 और sda1 को faulty

[root@freshinstall ~]# mdadm --manage /dev/md0 --fail /dev/sda1

mdadm: set /dev/sda1 faulty in /dev/md0

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --fail /dev/sda2

mdadm: set /dev/sda2 faulty in /dev/md1

 

    • पुष्टि करें कि एक ही डिस्क के दोनों पार्टीशन failed के रूप में चिह्नित हैं।

 मेंcat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

ऐरे से खराब डिवाइस हटाना

डिस्क बदलने से पहले, खराब हो चुके सदस्यों को उनके संबंधित ऐरे से हटा देना चाहिए:

    • खराब सदस्यों को हटाएँ:

[root@freshinstall ~]# mdadm --manage /dev/md0 --remove /dev/sda1

mdadm: hot removed /dev/sda1 from /dev/md0

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --remove /dev/sda2

mdadm: hot removed /dev/sda2 from /dev/md1

 

[root@freshinstall ~]# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

    • यदि आप उन्हीं पार्टीशन को दोबारा ऐरे में जोड़ना चाहते हैं या उन्हें किसी और काम के लिए इस्तेमाल करना चाहते हैं, तो RAID सुपरब्लॉक अवश्य साफ़ करें:

 [root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda1

[root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda2

 

    • यदि फिजिकल डिस्क अब भी काम कर रही है, तो आप उसे हटाने से पहले उसकी सारी जानकारी मिटाने का विकल्प भी चुन सकते हैं:

dd if=/dev/zero of=/dev/sda bs=1M

सावधानी: यह प्रक्रिया "of=" आर्गुमेंट में दिए गए डिवाइस का सारा डेटा मिटा देती है (/dev/sda ऊपर दिए गए उदाहरण में)।

नोट: इस प्रक्रिया को पूरा होने में कुछ समय लग सकता है।

 

नई डिस्क जोड़ना

नई डिस्क का आकार खराब हुई डिस्क के बिल्कुल बराबर या उससे बड़ा होना चाहिए। नई डिस्क को सिस्टम में लगाने के बाद, कर्नेल लॉग में कुछ इस तरह की जानकारी दर्ज करेगा:

dmesg | tail

sd 0:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)

sd 0:0:0:0: [sdc] 4096-byte physical blocks

sd 0:0:0:0: [sdc] Write Protect is off

sd 0:0:0:0: [sdc] Mode Sense: 00 3a 00 00

sd 0:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA


पुष्टि करें कि सिस्टम को नया ड्राइव दिख रहा है या नहीं (sdc in this case):

cat /proc/partitions

major   minor    #blocks  name

 

   8        16             976762584 sdb

   8        17               512000 sdb1

   8        18             976248832 sdb2

   9         1               976247676 md1

 253        0               2097152 dm-0

 253        1              2097152 dm-1

   9         0                511988 md0

   8         0                976762584 sdc

नई डिस्क की SMART स्थिति जाँचें:

smartctl -H /dev/sdc

smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build)

Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

 

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: PASSED

 

पार्टीशनिंग

पार्टीशनिंग शुरू करने से पहले यह सुनिश्चित करें कि नई डिस्क अपने-आप माउंट नहीं हुई है:

  mount | grep sdc

कोई आउटपुट नहीं दिखना चाहिए। यदि कुछ भी दिखाई देता है, तो संबंधित पार्टीशन को निम्न कमांड से मैन्युअली अनमाउंट करना होगा:

umount <partition>

चूँकि शुरुआती सिस्टम में बिल्कुल समान आकार की दो मिरर्ड ड्राइव उपयोग की गई थीं, इसलिए हम पार्टीशनिंग के लिए चालू ड्राइव को टेम्पलेट के रूप में उपयोग कर सकते हैं:

sfdisk -d -uS /dev/sdb | sfdisk -L -uS /dev/sdc

Checking that no-one is using this disk right now ...

OK

 

Disk /dev/sdc: 121601 cylinders, 255 heads, 63 sectors/track

Old situation:

Units = 512 बाइट के सेक्टर, 0 से गिनती शुरू होती है

 

Device Boot    Start       End   #sectors  Id  System

/dev/sdc1   *      2048   1026047    1024000  fd  Linux raid autodetect

/dev/sdc2       1026048 1953523711 1952497664  fd  Linux raid autodetect

/dev/sdc3             0         -          0   0  Empty

/dev/sdc4             0         -          0   0  Empty

नई स्थिति:

Units = 512 बाइट के सेक्टर, 0 से गिनती शुरू होती है

 

Device Boot    Start       End   #sectors  Id  System

/dev/sdc1   *      2048   1026047    1024000  fd  Linux raid autodetect

/dev/sdc2       1026048 1953523711 1952497664  fd  Linux raid autodetect

/dev/sdc3             0         -          0   0  Empty

/dev/sdc4             0         -          0   0  Empty

चेतावनी: पार्टिशन 1 सिलेंडर सीमा पर समाप्त नहीं होता

चेतावनी: पार्टिशन 2 सिलेंडर सीमा पर शुरू नहीं होता

चेतावनी: पार्टिशन 2 सिलेंडर सीमा पर समाप्त नहीं होता

नया पार्टिशन टेबल सफलतापूर्वक लिख दिया गया

 

पार्टिशन टेबल दोबारा पढ़ा जा रहा है ...

 

यदि आपने कोई DOS पार्टिशन बनाया या बदला है, जैसे /dev/foo7, तो dd(1) का उपयोग करें

पहले 512 बाइट को शून्य करने के लिए:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1

(देखें fdisk(8)।)

 

इसके बाद, आप अपनी नई पार्टिशन की गई डिस्क देख सकेंगे:

cat /proc/partitions

major   minor   #blocks  name

 

   8       16               976762584 sdb

   8       17                 512000 sdb1

   8       18              976248832 sdb2

   9        1                976247676 md1

 253        0              2097152 dm-0

 253        1                2097152 dm-1

   9        0                  511988 md0

   8        0                976762584 sdc

   8        1                   512000 sdc1

   8        2                 976248832 sdc2

 

array में नए डिवाइस जोड़ना

 [root@freshinstall ~]# mdadm --manage /dev/md0 --add /dev/sdc1

mdadm: added /dev/sdc1

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --add /dev/sdc2

mdadm: added /dev/sdc2

 

[root@freshinstall ~]# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdc1[2] sdb1[1]

      511988 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sdc2[2] sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      [>....................]  recovery =  0.1% (1618176/976247676) finish=160.6min speed=101136K/sec

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

नोट: दोनों array में दो-दो सक्रिय सदस्य हैं और md1 में पुनर्निर्माण (reconstruction) चल रहा है।

 

बूटलोडर दोबारा इंस्टॉल करना

खराब ड्राइव बदलने के बाद, नई डिस्क के MBR में GRUB दोबारा इंस्टॉल करें, ताकि आप उससे बूट कर सकें:

grub-install /dev/sdc

Installation finished. No error reported.

This is the contents of the device map /boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.

 

# this device map was generated by anaconda

(hd0)     /dev/sdc

(hd1)     /dev/sdb

 

सभी ज्ञान आधारित लेख

Tell us what you need

Compare available plans or describe your workload so we can discuss a suitable starting point.