问题基本出在grub配置、内核/initramfs路径或根分区识别环节:需确认grub.cfg是否真正更新(检查-o参数、/boot空间、路径正确性)、验证vmlinuz与initramfs文件存在且匹配、核对root=参数指向的uuid或设备是否准确,必要时进grub>手动测试定位故障点。

开机启动项改完无法引导,问题基本出在 GRUB 配置、内核/ initramfs 文件路径、或根分区识别这三个环节。不是配置改了就一定生效,得确保每一步都和当前系统实际状态对得上。
检查 grub.cfg 是否真正更新
很多人执行了 update-grub 或 grub2-mkconfig -o /boot/grub2/grub.cfg,但没确认命令是否成功、目标文件是否被写入。常见疏漏:
- 没加 -o 参数,命令只是把配置打印到屏幕,没保存到文件
- /boot 分区空间满(df -h /boot 查),导致写入失败,但命令不报错
- 用了错误的配置路径:Ubuntu/Debian 是 /boot/grub/grub.cfg,CentOS/RHEL 是 /boot/grub2/grub.cfg
- 编辑的是 /etc/default/grub,但忘了运行生成命令,修改就白做了
验证内核与 initramfs 文件是否存在且路径匹配
GRUB 启动时按 e 编辑菜单,重点看两行:
- linux 行末尾的 vmlinuz-* 路径是否真实存在(ls /boot/vmlinuz-*)
- initrd 行的 initramfs-* 或 initrd.img-* 是否对应存在(ls /boot/initramfs-*.img)
- 路径写错一个字母(比如 vmlinux 写成 vmlinuz)、版本号不一致、或文件被误删,都会报 Error 15
确认 root= 参数指向正确的设备或 UUID
linux 行里的 root= 值必须能被内核识别,否则卡在 “Cannot mount selected partition”(Error 17):
- 用 sudo blkid 查当前根分区的真实 UUID,和 grub.cfg 中的 root=UUID=... 对比
- 如果重装过系统、调整过分区、或复制了硬盘,UUID 很可能已变,旧配置就失效
- 临时测试可改成 root=/dev/sda2(需确认设备名),但长期应优先用 UUID
- 若用 LVM 或加密卷,root= 还需包含 rd.lvm.lv=... 或 rd.luks.uuid=... 等参数
进 GRUB 命令行手动试一次再判断
如果连 GRUB 菜单都不显示,直接进 grub> 或 grub rescue>,说明 GRUB 主程序没装好或 /boot 没被识别:
- 输入 ls 看有哪些磁盘分区,比如 (hd0,gpt1)、(hd0,msdos2)
- 逐个 ls (hd0,gpt1)/ 找含 vmlinuz- 和 grub/ 的分区
- 找到后 set root=(hd0,gpt1),再 insmod linux、linux /vmlinuz-xxx root=UUID=...、initrd /initramfs-xxx.img、boot
- 能手动启动,说明文件完好,问题纯属配置未生效;不能启动,再查文件缺失或文件系统模块未加载











