Возможные состояния RAID mdadm?

5271
j-g-faustus

Я пишу плагин мониторинга для домашнего сервера RAID, mdadm на Ubuntu 10.4.

Используя 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в онлайн-документации, которую я нашел, похоже, нет списка.

Кто-нибудь знает, где найти список возможных состояний?

5

1 ответ на вопрос

7
Dennis Williamson

На основе исходного кода («чистый» или «активный») и («ухудшенный» или «») и («» или «повторная синхронизация» или «восстановление») и («» или «не начато»).

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 14 лет назад 0
Как ни странно, моя установленная на данный момент версия mdadm показала мне статус «clean, FAILED», где массив фактически мертв. Это странно, потому что я не смог найти его в исходном коде. picrap 12 лет назад 0
Я пришел сюда на основе поиска того же самого. Мое состояние "грязное", но я не вижу его в принятом ответе. Хотя это и старое ядро ​​Linux. Ядро v2.6.10 и mdadm - v1.8.0 - 01 ноября 2004 года. Eric 10 лет назад 0