首先我想说的是决不,但是这里……
在监控 Linux 系统健康状况时,我们会定期检查各种项目。这包括读取其中的/proc/sys/kernel/tainted
值,并在其中的值不为零时发出警报。
通常它看起来像这样:
- 我们从 /proc/sys/kernel/tainted 中读取了值 16,这表明发生了机器检查。
额外的挖掘还显示:
/var/log/messages
包含:Disabling lock debugging due to kernel taint
Machine check events logged
并
/var/log/mcelog
包含
硬件事件。这不是软件错误。 0 级 CPU 6 组 10 杂项 90840800080148c 地址 89a6a0c40 时间 1383328318 星期五 11月 1 13:51:58 2013 心电图状态: MCi 状态: 更正错误 MCi_MISC 寄存器有效 MCi_ADDR 寄存器有效 MCA:内存控制器 MS_CHANNEL2_ERR 事务:内存清理错误 状态 8c00004a000800c2 MCGSTATUS 0 MCGCAP 1000c12 APICID 20 插座 ID 1 CPUID 供应商 Intel 系列 6 型号 45
在我看来,这就像一个软错误,内存有时会出现错误并自我纠正,除了跟踪事件数量外,操作员不必做任何事情。
现在上面的日志显示“由于内核污染,禁用锁调试”。
我理解这意味着内核不想误导任何人有关软件组件的信息,因为硬件“已知有问题”。
如果我们重新启动,这个问题就会解决,但如果事件数量很少,没有真正的理由重新启动,我们希望避免某些项目(对于高事件,重新启动并不是正确的做法,修复硬件/环境问题才是有意义的,然后重新启动),但仍然希望将其用作警告潜在问题的机制。所以我的问题是...
有没有办法从 /proc/sys/kernel/tainted 中清除这个位?
ps 再次强调,我只打算在事件不频繁发生时重置它(见这里)
答案1
我不愿意回答我自己的问题,我会接受任何能增加有价值信息的东西
正如我在上面的评论中提到的,通过查看内核代码这里这不可能。
考虑到“tainted”的历史,这似乎是合理的,它最初用于表示由于不合规(非 GPL)模块,内核不纯净。然而,正如我在其他评论中指出的那样,这很麻烦,某些内存问题可以自行纠正,可能不应该设置该污点位(或者至少允许清除该特定位)。