我正在修改kvm模块,我在内核代码中添加了printk语句。运行虚拟机后,printk给出了故障地址和有关客户操作系统的其他信息。
我需要从这个信息中生成统计数据。当我使用dmesg时,我只能看到错误地址 在内核空间,即它们的地址高于0XC0000000。(当VMEXIT发生时,即从我们从客户端切换到主机模式时,需要出现故障地址)
当我在kern.log中看到相同的统计信息时,我也会从用户空间(0XC0000000以下)获得错误地址。 所以在我看来dmesg的容量有限,而且给出的信息是kern.log的一个子集 我的kern.log文件太大了可以从kern.log中删除旧数据,因为像grep,join,awk这样的文本处理命令在文件上运行的时间太长了。
我的问题是:
dmesg和kern.log有什么区别?
如何将kern.log文件大小减少为cron作业?(擦除过去24小时内添加的所有数据)
有没有更好的方法从内核获得printf类型的功能?
答案 0 :(得分:5)
/var/log/kern.log
和他的轮换日志(/var/log/kern.log.1 /var/log/kern.log.2 ....)包含内核生成的日志,由{{处理1}}。
dmesg
正如手册页中所解释的那样:
dmesg用于检查或控制内核环缓冲区。
实际上,它将显示自上次启动以来/var/log/kern.log的最后16392个八位字节。