Linux启动失败怎么排查_启动日志分析流程

2次阅读

linux启动失败的核心思路是分层回溯:从grub、内核、initramfs到系统服务逐层排查,以日志为依据,按顺序提取dmesg、journalctl和boot.log等关键信息定位故障点。

Linux启动失败怎么排查_启动日志分析流程

Linux启动失败时,核心思路是“分层回溯”:从引导加载器开始,逐层检查内核、initramfs、系统服务是否正常加载和运行。日志是唯一客观依据,必须按顺序、有针对性地提取关键信息。

一、先看 GRUB 和内核启动画面残留信息

如果卡在黑屏、光标闪烁、GRUB rescue 提示或刚显示几行就中断,说明问题发生在早期阶段。此时无法依赖磁盘日志,需依靠视觉线索:

  • 启动时按 Shift(BIOS)或 Esc(UEFI)调出 GRUB 菜单,选中启动项后按 e 编辑内核参数
  • 检查 linux 行中的 root= 是否指向有效分区(推荐用 root=UUID=...,可用 blkid 验证)
  • 确认 initrd 路径是否存在(ls /boot/ 查看对应 initramfs 文件名是否匹配)
  • 临时添加 rd.debug systemd.log_level=debugquiet splash 改为 noquiet nosplash,让启动过程输出更多细节

二、进单用户/救援模式后优先抓取三类日志

能进入命令行环境(如通过 systemd.unit=rescue.target 或 Live 系统挂载)后,立即执行以下三项检查,覆盖硬件、内核、用户空间全链路:

  • dmesg -l err,warn:查看内核级错误,重点关注存储设备识别(sda: unknown partition table)、驱动加载失败(Failed to load module xxx)、内存/PCIe 初始化异常
  • journalctl -b -p err:过滤本次启动所有错误级日志,快速定位 systemd 启动哪个 unit 时崩溃(如 Failed to start Network Manager
  • cat /var/log/boot.log(若存在)或 journalctl -u systemd-sysusers.service -n 30:观察用户/组初始化、fstab 挂载、关键基础服务(logind、dbus、udev)是否成功启动

三、聚焦失败服务与依赖链

当系统能进入 shell 但桌面或网络等关键功能缺失,大概率是某个服务启动失败并阻塞了后续流程:

  • 运行 systemctl list-units –state=failed 列出所有失败单元
  • 对每个失败服务执行 systemctl status 服务名 -n 50,重点看 Process 行的完整命令和 status= 后的退出码
  • systemctl show 服务名 | grep -E “(Wants|Requires|After)” 查依赖关系,确认前置服务(如 local-fs.targetcryptsetup.target)是否就绪
  • 手动运行 ExecStart= 后的命令,观察是否报权限、路径、配置文件缺失等直接错误

四、验证文件系统与关键配置

日志无明显报错但系统仍无法完成启动,需排查底层一致性问题:

  • 运行 fsck -n /dev/sdXN(只读检查),确认根分区无损坏;若提示错误,重启前加 -y 自动修复
  • 检查 /etc/fstab:是否有 UUID 错误、挂载点不存在、文件系统类型写错(如把 ext4 写成 ntfs
  • 验证 /etc/crypttab(如有加密卷):设备路径、密钥文件路径、选项是否合法
  • 确认 /boot 分区是否被意外清空或损坏(ls /boot/vmlinuz* /boot/initrd*
text=ZqhQzanResources