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.