Linux内核日志怎么看_dmesg排错实践

4次阅读

dmesg需聚焦时间、级别、设备、错误信号四锚点:用-t显绝对时间,-l筛选err/warn级日志,-w实时监听硬件事件,操作前备份并确认config_printk启用。

Linux内核日志怎么看_dmesg排错实践

直接用 dmesg 看内核日志,不是简单敲个命令就完事。关键在“聚焦”——过滤掉干扰信息,抓住时间、级别、设备和错误信号这四个锚点。否则满屏滚动的启动日志,真正出问题的那一行早被刷走了。

带时间戳看,别信默认数字

默认输出里 [ 1.234567] 这种是开机后秒数,系统重启过、挂起过,这个数字就失去参考价值。排查时优先加 -T 显示本地绝对时间:

  • dmesg -T | tail -n 30:看最近半分钟发生了什么
  • dmesg -T | grep -i "nvme|ata|sd[a-z]":查磁盘类异常,配合时间更容易定位IO卡顿或掉盘时刻
  • 若发现时间跳变(比如从 09:12 突然跳到 09:05),说明系统曾休眠或时间同步过,此时应结合 journalctl --since "2026-03-03 09:00" 交叉验证

按级别筛,先抓 err 和 warn

内核日志分 8 级,日常重点关注 err(错误)和 warn(警告),它们往往对应真实故障:

  • dmesg -l err,warn:最简筛选,立刻排除大量 info 级的正常加载日志
  • dmesg -l err,crit,alert,emerg:更严格,只留致命级事件,适合崩溃后快速定性
  • 注意:Error 不一定出现在日志级别字段里,有时藏在消息正文,所以 grep -i "error|fail|timeout|reset" 仍有必要

实时盯住硬件事件

USB 插拔、磁盘识别、网卡重置这类动作转瞬即逝,翻历史日志大概率漏掉。必须用 -w 持续监听:

  • dmesg -w | grep -i "usb|xhci|ehci":插 U 盘时终端立刻出响应
  • dmesg -w | grep -i "nvme|timeout|link down":监控 NVMe 盘链路异常
  • -w 比老式 -f 更可靠,缓冲区翻转时自动续读,不会中断

保存与复位要留痕

内核日志不落盘,重启即丢。操作前养成备份习惯:

  • 查问题前先存档:dmesg > /tmp/dmesg-before.log
  • 复位缓冲区用 dmesg -c,它会清空并输出当前全部内容,比 dmesg -C 更安全(后者只清不输出)
  • 某些容器或嵌入式环境 dmesg 返回空,先确认是否启用 CONFIG_PRINTK 内核选项,或改用 journalctl -k 替代

不复杂但容易忽略:dmesg 是内核的“第一手记录”,它不美化、不汇总、不延迟。看懂它,等于拿到系统底层运行的原始录像带。

text=ZqhQzanResources