You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UEFI直接启动Ubuntu 16.04时出现Kernel panic问题求助

解决Ubuntu 16.04通过EFI Stub直接启动时的Kernel Panic问题

我之前也碰到过类似的EFI Stub启动后根设备识别失败的情况,结合你给出的报错信息和已做的操作,咱们一步步排查解决:

一、先把root=参数的准确性拉满

你的报错核心是内核找不到根分区,这里最容易踩坑的是参数格式:

  • 优先用PARTUUID而非普通UUID,早期内核的EFI Stub环境对普通UUID的支持存在兼容性问题。可以在已挂载的系统里执行blkid查看根分区的PARTUUID(格式类似12345678-01),然后启动条目里写root=PARTUUID=12345678-01
  • 如果用设备路径,必须写完整的/dev路径(比如root=/dev/sda2),但要注意UEFI启动时的设备命名可能和系统内不一致,PARTUUID是更可靠的选择

二、补上关键的内核启动参数

从报错日志里的RAID相关输出来看,哪怕你不用RAID,也建议加上raid=noautodetect参数,避免内核在RAID自动检测环节出错。另外必须明确指定initrd的路径,且要和ESP内的文件路径完全匹配(区分大小写!)

给你一个efibootmgr创建启动条目的正确示例:

efibootmgr -c -d /dev/sda -p 1 -L "Ubuntu EFI Stub" -l "\EFI\ubuntu\vmlinuz-4.13.0-32-generic" -u "root=PARTUUID=xxxxxx-xx raid=noautodetect initrd=\EFI\ubuntu\initrd.img-4.13.0-32-generic ro"

注意:

  • -d是ESP所在的磁盘,-p是ESP的分区号(比如sda1)
  • -l里的路径是ESP内的相对路径,必须用反斜杠\,大小写要和实际文件名完全一致
  • -u后面的ro参数不能少,它会让内核以只读模式挂载根分区,后续initramfs会自动重新挂载为读写模式

三、重新生成兼容的initrd

你提到执行了update-initramfs,但建议在chroot环境下重新生成,确保initrd包含根分区所需的所有驱动:

# 挂载系统分区和ESP
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
# 绑定必要的系统目录
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
# chroot到目标系统
chroot /mnt
# 重新生成对应内核的initrd
update-initramfs -u -k 4.13.0-32-generic
# 退出并卸载挂载
exit
umount /mnt/sys /mnt/proc /mnt/dev /mnt/boot/efi /mnt

这样生成的initrd会包含当前系统的文件系统驱动(比如ext4),避免内核启动时无法识别根分区格式。

四、检查ESP的基础状态

确保ESP分区是FAT32格式,且文件权限正确:

  • 挂载ESP后执行ls -l /boot/efi/EFI/ubuntu/,确认内核和initrd文件是可读状态(一般权限为-rwxr-xr-x或-rw-r--r--)
  • 不要把内核和initrd放在嵌套过深的目录里,UEFI对路径长度有一定限制

五、用极简参数测试

先去掉quiet splash这类无关参数,用最精简的启动参数测试:

root=PARTUUID=xxxxxx-xx raid=noautodetect initrd=\EFI\ubuntu\initrd.img-4.13.0-32-generic ro

如果能正常启动,再逐步加回其他参数排查问题。

内容的提问来源于stack exchange,提问作者gronostaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:20:38