Mögliche mdadm-RAID-Zustände?

5452
j-g-faustus

Ich schreibe ein Überwachungs-Plugin für ein Heimserver-RAID, mdadm unter Ubuntu 10.4.

Mit sudo mdadm --detail /dev/md0 bekomme ich folgende Ausgabe:

/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  ... 

Ich suche nach den möglichen Werten von "state", kann sie aber nirgends finden, weder mandie Online-Dokumentation, die ich gefunden habe, scheint eine Liste zu haben.

Weiß jemand, wo Sie eine Liste möglicher Zustände finden können?

5

1 Antwort auf die Frage

7
Dennis Williamson

Basierend auf dem Quellcode ("clean" oder "active") und ("degraded" oder "") und ("" oder "resyncing" oder "recoverying") und ("" oder "Not Started").

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

Sie haben nicht danach gefragt disk.state, aber hier ist der relevante Quellcode:

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"); 
Nizza finden. Ich hätte nie gedacht, dort zu suchen TheLQ vor 14 Jahren 0
Seltsamerweise zeigte mir meine aktuell installierte Version von mdadm einen Status als "clean, FAILED" an, bei dem das Array tatsächlich tot war. Das ist seltsam, weil ich es im Quellcode nicht finden konnte. picrap vor 12 Jahren 0
Ich bin aufgrund einer Suche hierher gekommen. Mein Zustand ist "Dirty", aber ich sehe es nicht in der akzeptierten Antwort. Es ist aber auch ein älterer Linux-Kernel. Kernel v2.6.10 und mdadm - v1.8.0 - 01. November 2004. Eric vor 10 Jahren 0