在我妈妈的计算机上,她看到 syslog/kern.log,其中充满了来自 Lexmark 驱动程序的行:
Sep 22 21:01:20 pamela-desktop kernel: [48657.676578] usb 1-3: usbfs: process 1490 (demond_nscan) did not claim interface 3 before use
Sep 22 21:01:20 pamela-desktop kernel: [48657.676585] usb 1-3: usbfs: process 1490 (demond_nscan) did not claim interface 3 before use
Sep 22 21:01:20 pamela-desktop kernel: [48657.676592] usb 1-3: usbfs: process 1490 (demond_nscan) did not claim interface 3 before use
现在将这些值乘以您需要的任何数字即可获得 161 GB。
除了编写一个脚本来过滤 sys/kern.log 中的重复行并将其作为 cron 作业运行之外,我还能做些什么吗?
答案1
syslog 会自动删除重复的行,但这里它们并不重复,因为内核在发送到 syslog 之前插入了一个时间戳(以启动后的微秒为单位)。
该时间戳可能看起来多余,因为 syslog 时间戳也对日志进行了标记,但它及其粒度在调试内核问题时很有用(因为 syslog 时间戳不太精确,并且实际事件和 syslog 标记它之间可能存在延迟,并且因为在在 syslog 或/var
消失的情况下,很高兴看到dmesg
输出中的时间戳)。
您可以通过执行以下操作来禁用这些 kmsg 时间戳:
echo N | sudo tee /sys/module/printk/parameters/time
printk.time=N
或者通过将引导加载程序配置为传递到 Linux 内核命令行来使其永久化。
答案2
富内赫赫的评论是很正确的:
- 您应该先解决驱动程序问题。
- 如果不能,则问题在于日志文件太大,因此请使用 修复该问题
logrotate
。 - 如果您仍然想过滤这些行:
根据您的其他问题,我猜这是一台 Ubuntu 机器,在这种情况下它可能正在运行系统日志(或者您可以安装它)。尝试ps aux | grep syslog
看看。
rsyslog 允许您过滤行基于属性的过滤器。例如,过滤器可以是文字字符串匹配或正则表达式。文档中的一个示例:
:msg, contains, "error" ~
'~' 表示应丢弃该消息。因此,您可以轻松地编写其中之一来完全抑制来自错误驱动程序的消息。请注意,这在技术上并不能删除重复项:不会有任何记录了此错误的行。