查看存储阵列的 IO 延迟数据。当驱动器即将发生故障时,一个迹象是 IO 操作“完成时间”增加。数组好心地以这种格式提供这些数据:
Time Disk Channels
seconds A B C D E F G H P S
0.017 5e98bd 64008b 62a559 68eb45 676ccf 5d3a86 46242b 62dd2e 6976c9 6da51f
0.033 1e821c 1be769 1c372a 185134 19a2c2 21802c 2fa2ba 1d91c4 17b3ca 14cea6
0.050 6638e 3a93b 4b19f 258aa 28b64 4d3ae d92dc 32899 26a5b 1290d
0.067 2df3 1c17 1f1b 180f 1291 1f05 5201 15f4 1856 10d8
0.083 365 293 2b9 296 269 291 3c4 26f 2ae 25d
0.100 ce ae 94 aa 92 86 ce 81 9f 91
...
(时间迭代最多 2.00 秒,计数为十六进制)。
左列是 IO 完成的时间,其他列是针对给定主轴在该时间内完成的 IO 计数。
当驱动器即将发生故障时,该驱动器的“尾部”会明显“变宽”......大多数驱动器的 IO 数量很少 > 0.2 秒,故障驱动器可能会在 0.2 秒内获得大量 IO。例子 :
Time Disk channels
seconds A B C D E F G H P S
...
0.200 4 52d 2 7 3 2 1 6 1 8
0.217 2 2a6 0 1 0 0 1 4 0 1
0.233 0 1a1 0 1 0 0 0 1 1 0
0.250 0 cb 0 1 0 0 1 1 0 1
0.267 0 73 0 0 0 0 0 0 0 0
0.283 0 44 0 0 0 0 0 0 0 0
0.300 0 2d 0 0 0 0 0 0 0 0
...
我可以在 0.2 秒内查找超过 10 个 IO,但我正在寻找一个可以更准确地识别故障的数学模型。我的第一个想法是计算每列的方差……任何一组方差太大的驱动器都会标记违规者。但是,这会错误地标记驱动器行为正常:
min variance is 0.0000437, max is 0.0001250. <== a good set of drives
min variance is 0.0000758, max is 0.0000939. <== a set with one bad drive.
还有其他想法吗?
(这应该在 math.stackexchange.com 上而不是 stackoverflow 上吗?)