Trạng thái RAID mdadm có thể?


6

Tôi đang viết một plugin theo dõi cho RAID máy chủ gia đình, mdadm trên Ubuntu 10.4.

Sử dụng sudo mdadm --detail /dev/md0 Tôi nhận được đầu ra như thế này:

/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

...

Tôi đang tìm kiếm các giá trị có thể có của "trạng thái" nhưng dường như không thể tìm thấy nó ở bất cứ đâu, man cũng không phải tài liệu trực tuyến Tôi đã tìm thấy dường như có một danh sách.

Có ai biết nơi để tìm một danh sách các trạng thái có thể?

Câu trả lời:


7

Dựa vào mã nguồn ,,

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");

Bạn đã không hỏi về disk.state, nhưng đây là mã nguồn có liên quan:

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");

Đẹp tìm thấy. Tôi sẽ không bao giờ nghĩ rằng nhìn ở đó
TheLQ

Thật kỳ lạ, phiên bản mdadm hiện đang được cài đặt của tôi cho tôi thấy một trạng thái là "sạch, KHÔNG CÓ", trong đó mảng thực sự đã chết. Điều này thật kỳ lạ, vì tôi không thể tìm thấy nó trong mã nguồn.
picrap

Tôi đến đây dựa trên tìm kiếm của cùng một điều. Trạng thái của tôi là "Bẩn" nhưng không thấy nó trong câu trả lời được chấp nhận. Đó cũng là một nhân Linux cũ hơn. Hạt nhân v2.6.10 và mdadm - v1.8.0 - 01 tháng 11 năm 2004.
Eric
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.