संभव mdadm RAID राज्यों?


6

मैं एक होम सर्वर RAID, Ubuntu 10.4 पर mdadm के लिए एक निगरानी प्लगइन लिख रहा हूं।

का उपयोग करते हुए sudo mdadm --detail /dev/md0 मुझे इस तरह से आउटपुट मिलता है:

/dev/md0:
        Version : 00.90
  Creation Time : Thu Dec 17 14:31:49 2009
     Raid Level : raid5
     Array Size : 4395407808 (4191.79 GiB 4500.90 GB)
  Used Dev Size : 1465135936 (1397.26 GiB 1500.30 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sun Jul 11 06:57:28 2010
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

...

मैं "राज्य" के संभावित मूल्यों की तलाश कर रहा हूं, लेकिन इसे कहीं भी नहीं ढूंढ सकता man और न ही ऑनलाइन प्रलेखन मैंने पाया है कि एक सूची है।

क्या किसी को पता है कि संभावित राज्यों की सूची कहां मिलेगी

जवाबों:


7

पर आधारित सोर्स कोड , ("साफ" या "सक्रिय") और ("अपमानित" या "") और ("" या "पुनरुत्थान" या "पुनर्प्राप्त") और ("" या "प्रारंभ नहीं")।

if (array.raid_disks)
                  printf("          State : %s%s%s%s\n",
                         (array.state&(1<<MD_SB_CLEAN))?"clean":"active",
                         array.active_disks < array.raid_disks? ", degraded":"",
                         (!e || e->percent < 0) ? "" :
                         (e->resync) ? ", resyncing": ", recovering",
                         larray_size ? "": ", Not Started");

आप के बारे में नहीं पूछा disk.state, लेकिन यहाँ प्रासंगिक स्रोत कोड है:

if (disk.state & (1<<MD_DISK_FAULTY)) {
                        printf(" faulty");
                        if (disk.raid_disk < array.raid_disks &&
                            disk.raid_disk >= 0)
                              failed++;
                  }
                  if (disk.state & (1<<MD_DISK_ACTIVE)) printf(" active");
                  if (disk.state & (1<<MD_DISK_SYNC)) printf(" sync");
                  if (disk.state & (1<<MD_DISK_REMOVED)) printf(" removed");
                  if (disk.state & (1<<MD_DISK_WRITEMOSTLY)) printf(" writemostly");
                  if ((disk.state &
                       ((1<<MD_DISK_ACTIVE)|(1<<MD_DISK_SYNC)|(1<<MD_DISK_REMOVED)))
                      == 0) {
                        printf(" spare");
                        if (is_26) {
                              if (disk.raid_disk < array.raid_disks && disk.raid_disk >= 0)
                                    printf(" rebuilding");
                        } else if (is_rebuilding && failed) {
                              /* Taking a bit of a risk here, we remove the
                               * device from the array, and then put it back.
                               * If this fails, we are rebuilding
                               */
                              int err = ioctl(fd, HOT_REMOVE_DISK, makedev(disk.major, disk.minor));
                              if (err == 0) ioctl(fd, HOT_ADD_DISK, makedev(disk.major, disk.minor));
                              if (err && errno ==  EBUSY)
                                    printf(" rebuilding");

अच्छा लगा। मैंने कभी नहीं सोचा था कि वहाँ देखूंगा
TheLQ

विचित्र रूप से पर्याप्त है, मेरे वर्तमान में स्थापित mdadm के संस्करण ने मुझे "स्वच्छ, विफल" के रूप में एक स्थिति दिखाई, जहां सरणी वास्तव में मृत थी। यह अजीब है, क्योंकि मुझे यह स्रोत कोड में नहीं मिला।
picrap

मैं उसी चीज की खोज के आधार पर यहां आया था। मेरा राज्य "गंदा" है, लेकिन स्वीकृत उत्तर में इसे नहीं देखना है। हालांकि यह एक पुराने लिनक्स कर्नेल है। कर्नेल v2.6.10 और mdadm - v1.8.0 - 01 नवंबर 2004।
Eric
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.