dmesg --time-format=iso最可靠:输出iso 8601格式真实时间戳,不依赖系统时钟校正;辅以-l err,warn和关键词过滤,结合上下文定位开机卡点。

dmesg 是定位开机慢最直接的工具,关键在时间戳要准、筛选要狠、上下文要看全。默认相对时间难对应实际事件,-T 又容易失真,得换更稳的方式。
用对时间格式,别被“假时间”带偏
内核日志里 [ 1.234567] 这种数字是启动后秒数,不是真实时间。-T 把它硬加当前系统时间,一旦 NTP 校正过、虚拟机时钟漂移、或手动改过 time,结果就不可信——可能差几分钟甚至倒退。
- 推荐用 dmesg --time-format=iso:输出像 2026-07-29T10:15:22.345678,读的是内核写日志时的真实时间戳,不依赖系统时钟
- 老内核没这个参数?用 dmesg -H(Linux 5.7+),自带倒序、颜色、稳定时间格式
- 想看启动早期卡点?重点盯 0–5 秒内 的日志,比如 [ 0.000000] 到 [ 4.999999],多数硬件初始化失败发生在这里
聚焦错误和超时,跳过启动杂讯
完整 dmesg 输出里 90% 是 info 级别启动信息,真正拖慢启动的线索藏在 err/warn 和特定行为词里。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 先筛级别:dmesg -l err,warn --time-format=iso
- 再加关键词过滤:dmesg -l err,warn --time-format=iso | grep -i "fail\|timeout\|hang\|wait\|no response\|link down"
- 特别注意成簇出现的记录,比如连续几条 nvme0n1: I/O timeout 后跟 reset controller,说明 PCIe 链路不稳定,不是硬盘本身坏
- 别只搜 “error”:像 ACPI: EC: GPE storm detected 或 ata1: soft reset failed 这类不带 error 字但明确阻塞流程的日志,更要优先处理
结合上下文定位卡点位置
单看一条报错不够,得看它前后发生了什么。比如某设备加载超时,前一步是不是驱动 probe 失败?后一步是不是挂载被阻塞?
- 用 dmesg --time-format=iso | less 慢翻,按 / 键搜索关键词,再用 k/j 上下移动看邻近行
- 对比正常启动日志:先存一份干净日志 dmesg > /tmp/dmesg-good.log,出问题时再比对差异
- 关注典型卡点模块:USB 控制器初始化慢、NVMe 驱动等待 PHY 就绪、RAID 卡扫描超时、ACPI 表解析失败,这些都常出现在 1–3 秒区间
临时干预验证假设
找到可疑项后,别只看日志,要动手试。很多启动慢是某个模块或设备拖住整个流程。
- 禁用可疑驱动:在 /etc/modprobe.d/blacklist.conf 加 blacklist radeon 或 blacklist nouveau,然后更新 initramfs
- Debian/Ubuntu:sudo update-initramfs -u
- RHEL/Fedora:sudo dracut -f
- 加内核启动参数绕过检测:比如 rd.driver.blacklist=nouveau 或 acpi_enforce_resources=lax,通过 GRUB 编辑启动项临时测试










