内核会发出与启动、驱动程序、设备、文件系统、网络、内存和故障有关的消息。这些记录可以解释底层症状,但单独一条警告并不能证明硬件有缺陷。
日志 · 第 4 课
内核日志
学习如何使用 dmesg 和 journalctl 查询当前及已保留的 Linux 内核消息。
读取内核环形缓冲区
dmesg 从内核环形缓冲区读取消息:
$ dmesg --human
该缓冲区容量有限,因此新消息可能覆盖旧消息。访问也可能仅限特权用户。支持 dmesg --follow 的实现可以用它跟踪新内核消息;完成有限时间的重现后应停止跟踪。
为什么较早的内核事件可能没有出现在当前 dmesg 输出中?
使用易读时间戳
原始内核时间戳通常以启动时间为基准。dmesg --ctime 或 --human 可以渲染墙上时钟时间,但转换值取决于时钟历史;如果启动后时钟发生变化,结果可能不准确。在精确事件排序很重要时,应保留相对于启动的时间。
为什么应谨慎看待转换后的 dmesg 墙上时钟时间戳?
查询持久内核记录
在 systemd 主机上,用以下命令查询当前启动的内核记录:
$ journalctl -k -b
如果持久 journal 存储保留了先前启动记录,可查看启动列表并选择其中一次:
$ journalctl --list-boots
$ journalctl -k -b -1
传统 syslog 路由可能创建 /var/log/kern.log 或其他文件,但这取决于配置。保存的 /var/log/dmesg 文件也并非普遍存在,而且可能只代表启动时的快照。
哪个命令请求查看上一次已保留启动的内核消息?
调查内核事件
确定启动、时间戳、设备、子系统以及当时正在进行的操作。查询周围的内核和服务记录,再与硬件清单和当前状态进行比较:
$ journalctl -k -b --since '10 minutes ago'
$ lspci -k
$ lsblk
只使用与相关子系统有关的工具。重新加载驱动程序、解除设备绑定或重启前,应评估对存储、网络、控制台和服务的影响,并保留恢复通道。
面对一条内核警告,最佳响应是什么?
课程已完成
你已完成 内核日志
现在,你可以区分实时内核缓冲区消息与已保留的内核日志。
使用
dmesg读取容量有限的环形缓冲区。谨慎解读启动相对时间和转换后的时间戳。
使用
journalctl -k查询当前或先前启动。在进行破坏性更改前关联内核消息。