Olası mdadm RAID durumları?


6

Ubuntu 10.4'te bir ev sunucusu RAID, mdadm için bir izleme eklentisi yazıyorum.

kullanma sudo mdadm --detail /dev/md0 Bunun gibi çıktı alıyorum:

/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

...

Ben "devlet" nin olası değerlerini arıyorum ama hiçbir yerde bulamıyorum man ne de çevrimiçi belgeler Bilmem gereken bir liste var.

Olası devletlerin listesini nerede bulacağını bilen var mı?

Yanıtlar:


7

Göre kaynak kodu , ("temiz" veya "etkin") ve ("bozulmuş" veya "")) (("" veya "yeniden boyama" veya "kurtarma") ve ("" veya "Başlamadı").

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

Hakkında sormadın disk.state, ancak işte ilgili kaynak kodu:

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

Güzel buldum. Oraya bakmayı hiç düşünmedim
TheLQ

İşin garibi, şu anda yüklü olan mdadm versiyonumda, dizinin gerçekten ölü olduğu "temiz, başarısız oldu" olarak bir durum gösterdi. Bu garip çünkü kaynak kodunda bulamadım.
picrap

Buraya aynı şeyi aramaya dayanarak geldim. Benim durumum "Kirli" ama kabul edilen cevapta görmüyorum. Yine de eski bir Linux çekirdeği. Çekirdek v2.6.10 ve mdadm - v1.8.0 - 01 Kasım 2004.
Eric
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.