防止内核消息出现在 dmesg 中

防止内核消息出现在 dmesg 中

是否可以防止内核消息出现在 dmesg 输出中?

例如,我正在运行终止 PPPoE 隧道的软件。它提供的功能之一是设置自定义接口名称的能力。

但是这会导致 dmesg 中出现如下消息:

... 
[Mon May 28 09:50:06 2018] ifname.3: renamed from pppoe3 
[Mon May 28 11:07:40 2018] ifname.4: renamed from pppoe4 
[Mon May 28 11:11:37 2018] ifname.5: renamed from pppoe5 
[Mon May 28 11:18:26 2018] ifname.6: renamed from pppoe6 
[Mon May 28 11:40:46 2018] ifname.7: renamed from pppoe7
...

我追踪了负责该功能的功能netdev_infohttps://github.com/torvalds/linux/blob/v4.16/net/core/dev.c#L1204

这些消息的问题在于它们会填满缓冲区并覆盖任何其他重要消息(驱动程序崩溃、iptable 警告等)。

是否可以抑制该特定消息出现在 dmesg 输出中?

我尝试设置 sysctl kernel.printk 但似乎没有效果,并且无论设置如何,消息都会出现在 dmesg 输出中。

谢谢。

答案1

那么这个函数是 netdev_info 通过 printk 打印内核消息信息水平。我相信你可以调整你的kernel.printk控制实际记录的消息级别。因此,您可以从 INFO 级别向下调整到噪音较小的 WARN 或 ERR 级别。

我通常喜欢将其3 4 1 3作为默认设置

# /etc/sysctl.d/printk.conf
# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

有关 kernel.printk 的更多详细信息,请参阅这些链接

这将抑制除该特定消息之外的其他消息。如果您在 INFO 级别记录了其他您真正想要或需要查看的信息,这可能不是一个好的解决方案。

如果您只关心登录到您的 syslog 管理日志中的内容,那么您应该能够根据您正在运行的 syslog 守护程序应用过滤器。

答案2

dmesg从内核环形缓冲区读取,据我所知,你无法防止它被不需要的消息“污染”。

无论如何,根据您的发行版,可以在/var/log/messages或中找到旧的内核日志/var/log/syslog

相关内容