我的托管服务提供商已将硬盘驱动器插入我的服务器,该硬盘驱动器过去似乎出现过某种错误,但完整的离线智能检查显示目前一切正常(大约)。服务器有一个 RAID1,所以我可以忍受这种情况。
问题是(根据手册页)如果过去出现错误,smartctl 会设置第 6 位,所以现在一切正常,退出代码是数字 64。
默认情况下,智能插件的阈值配置为 0,虽然我知道我可以将阈值设置为 64,但我会错过更重要的第 3 位“磁盘故障”。
有没有办法以某种方式设置阈值,以便 munin 对值进行按位比较?
最终我求助于修补智能插件。根据您的版本,有一些像这样的代码:
if exit_status!=None :
# smartctl exit code is a bitmask, check man page.
num_exit_status=int(exit_status/256)
Run Code Online (Sandbox Code Playgroud)
用这个替换它
if exit_status!=None :
# smartctl exit code is a bitmask, check man page.
num_exit_status=int(exit_status/256)
# filter out bit 6
num_exit_status &= 191
if num_exit_status<=2 :
exit_status=None
if exit_status!=None :
Run Code Online (Sandbox Code Playgroud)
最有趣的部分是对 191 进行按位运算的那一行:这是二进制的 0x11011111,因此对当前值进行 AND 运算只会将第 6 位设置为 0,同时让其他值保持不变。
因此,值 64(就像我的一样)将报告为 0,而值 8 将保持为 8。但同样,非常重要的是,值为 72(位 6 设置为始终,位 3 设置为因为磁盘出现故障) 它也会报告 8。