18

我正在修改 kvm 模块,并在内核代码中添加了 printk 语句。运行虚拟机后,printk 为我提供了错误地址和有关来宾操作系统的其他信息。

我需要从这个信息中生成统计信息。当我使用 dmesg 时,我只能看到内核空间中的错误地址,即它们的地址高于 0XC0000000。(发生 VMEXIT 时需要错误地址,即我们从访客模式切换到主机模式)

当我在 kern.log 中看到相同的统计信息时,我也会从用户空间(低于 0XC0000000)获得错误地址。所以在我看来,dmesg 的容量有限,并且给出的信息是 kern.log 的一个子集。
我的 kern.log 文件太大,是否可以从 kern.log 中删除旧数据,因为 grep、join、awk 等文本处理命令在文件上运行的时间太长。

我的问题是:
dmesg 和 kern.log 有什么区别?
如何在 cron 作业中减小 kern.log 文件的大小?(擦除过去 24 小时内添加的所有数据)
有没有更好的方法从内核获取 printf kindof 功能?

4

1 回答 1

15

/var/log/kern.log并且他的旋转日志(/var/log/kern.log.1 /var/log/kern.log.2....)包含由内核生成并由syslog.

dmesg正如手册页所解释的那样:

dmesg 用于检查或控制内核环形缓冲区。

事实上,它将显示自上次启动以来 /var/log/kern.log 的最后 16392 个八位字节。

于 2012-07-10T12:33:59.423 回答