是否可以防止内核消息出现在 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_info
:
https://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 的更多详细信息,请参阅这些链接
- https://unix.stackexchange.com/questions/13019/description-of-kernel-printk-values
- https://www.kernel.org/doc/Documentation/sysctl/kernel.txt
这将抑制除该特定消息之外的其他消息。如果您在 INFO 级别记录了其他您真正想要或需要查看的信息,这可能不是一个好的解决方案。
如果您只关心登录到您的 syslog 管理日志中的内容,那么您应该能够根据您正在运行的 syslog 守护程序应用过滤器。
答案2
dmesg
从内核环形缓冲区读取,据我所知,你无法防止它被不需要的消息“污染”。
无论如何,根据您的发行版,可以在/var/log/messages
或中找到旧的内核日志/var/log/syslog
。