linux启动失败时最直接有效的排查方式是查看启动日志:优先用journalctl -b查本次启动日志,dmesg查内核消息,grub恢复模式下结合journalctl -b -1和dmesg -l err,warn定位故障,同时检查fstab挂载及关键systemd服务状态。

Linux 启动失败时,最直接有效的排查方式是查看启动日志。系统在启动过程中会将内核、initrd、systemd 服务等关键阶段的日志写入缓冲区或磁盘日志,即使无法进入桌面或命令行,也能通过特定方法获取。
使用 journalctl 查看完整启动日志
如果能成功进入系统(哪怕只是 recovery mode 或 tty 终端),优先使用 journalctl:
-
查看本次启动的所有日志:
journalctl -b -
查看上一次启动日志(适用于重启后进不去):
journalctl -b -1 -
只显示启动失败的服务:
journalctl -b --failed -
实时跟踪启动过程(需提前运行):
journalctl -b -f(适合在恢复模式中执行)
注意:-b 表示 “boot”,默认读取当前启动的 journal;若 /var/log/journal 未启用持久化,重启后可能丢失旧日志,建议先执行 sudo mkdir -p /var/log/journal && sudo systemd-tmpfiles --create --prefix /var/log/journal 开启日志持久化。
检查内核启动消息(dmesg 缓冲区)
内核日志独立于 systemd 日志,记录硬件检测、驱动加载、早期 panic 等关键信息:
-
查看内核环形缓冲区内容:
dmesg -H(带时间与颜色)或dmesg | less -
过滤错误和警告:
dmesg -l err,warn -
查找常见启动卡点关键词:如
Failed to start、timeout、no response、ACPI Error、drm_kms_helper: failed to set mode、ataX.00: failed command
若系统完全卡在 logo 或黑屏,可在 GRUB 启动菜单按 e 编辑启动项,在 linux 行末尾添加 systemd.log_level=debug 或 loglevel=7 提高内核和 systemd 日志详细程度,再按 Ctrl+X 启动临时生效。
从 GRUB 进入恢复环境查看日志
当无法正常登录时,可通过 GRUB 进入 rescue 模式获取日志:
- 开机时长按 Shift(BIOS)或按 Esc(UEFI)调出 GRUB 菜单
- 选择“Advanced options for Ubuntu/Debian/CentOS…” → 选带
recovery mode的内核 - 进入菜单后选择 root Drop to root shell prompt
- 执行
mount -o remount,rw /(若根分区只读) - 再运行
journalctl -b -1或dmesg -l err,warn查看上一次失败启动的关键线索
检查关键启动单元和服务状态
systemd 把启动过程拆分为多个 target 和 service,可快速定位阻塞点:
-
查看默认启动目标是否激活:
systemctl get-default(通常是 graphical.target 或 multi-user.target) -
查看该 target 下所有单元状态:
systemctl list-dependencies --reverse --state=failed graphical.target -
检查基础服务是否异常:
systemctl status systemd-udev-settle.service、systemctl status systemd-fsck@dev-disk-by\x2duuid-*.service、systemctl status systemd-remount-fs.service -
特别关注挂载失败:检查
/etc/fstab中是否存在 UUID 错误、NFS 超时、加密卷解密失败等,这类问题常导致启动停滞在 “A start job is running for…”
不复杂但容易忽略。










