dmesg 不显示启动信息(boot messages),通常不是命令本身的问题,而是内核日志缓冲区或系统日志机制的变化导致的。下面按常见原因逐一说明。
dmesg 显示的是 内核环形缓冲区(kernel ring buffer),它大小有限。
如果系统运行时间较长、日志很多:
dmesg 就看不到开机阶段的内容✅ 验证方式:
dmesg | head
如果开头不是 Booting Linux、BIOS、ACPI 之类,说明已被覆盖。
✅ 解决思路:
dmesg在 systemd 系统中:
systemd-journald 接管dmesg 只显示当前内核缓冲区即使 dmesg 没有,journal 里通常还有。
✅ 查看完整启动日志:
journalctl -b
查看本次启动的早期内核日志:
journalctl -b -k
某些系统或云镜像会设置:
quiet
或更极端的:
loglevel=0
这会:
✅ 检查:
cat /proc/cmdline
✅ 解决:
编辑 GRUB,去掉 quiet,例如:
linux /boot/vmlinuz root=... quiet
改为:
linux /boot/vmlinuz root=...
然后:
update-grub # 或 grub2-mkconfig
某些发行版限制 dmesg:
dmesg
# 无输出或报错
✅ 检查:
sysctl kernel.dmesg_restrict
若为 1:
sudo sysctl -w kernel.dmesg_restrict=0
或直接使用:
sudo dmesg
在以下环境:
dmesg 可能:
这是预期行为,不是故障。
如果你看到的是:
启动信息可能不完整。
# 1. 是否有权限
sudo dmesg | head
# 2. 是否已被覆盖
dmesg | head
# 3. 看 journal
journalctl -b -k
# 4. 看启动参数
cat /proc/cmdline
dmesg不显示启动信息,绝大多数情况是因为“日志已被覆盖”或“由 journald 接管”,而不是 dmesg 坏了。
如果你愿意,可以告诉我:
dmesg 实际输出内容我可以更精确地判断是哪一种原因。