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

Ubuntu 20.04 ZFS系统update-grub无法识别/boot中已更新的内核镜像

Ubuntu 20.04 ZFS系统update-grub无法识别/boot中已更新的内核镜像

看起来你的ZFS系统在更新内核后,GRUB没能正确识别新内核,还伴随了device-mapper的错误,我来帮你一步步排查解决:

第一步:临时禁用os-prober,排除扫描干扰

你看到的device-mapper: reload ioctl错误是os-prober在扫描其他分区时触发的,这个错误可能中断了GRUB配置的生成流程,导致它没来得及扫描到/boot里的新内核。先试试禁用os-prober:

  1. 编辑GRUB配置文件:nano /etc/default/grub
  2. 在文件末尾添加一行:GRUB_DISABLE_OS_PROBER=true
  3. 保存退出后,重新运行:update-grub
  4. 观察这次的输出,看看是否能找到vmlinuz-5.4.0-182-generic和对应的initrd镜像

如果成功识别了新内核,那问题就出在os-prober上。之后你可以用lsof /dev/nvme0n1p4或fuser /dev/nvme0n1p4查看哪个进程在占用这两个NVMe分区,或者直接保留os-prober禁用状态,这并不会影响Ubuntu的正常启动。

第二步:确认新内核的initrd镜像完整

如果禁用os-prober后还是没找到新内核,先检查新内核的initrd镜像是否存在:
运行ls /boot/initrd.img-5.4.0-182-generic,如果没有输出,说明initramfs镜像没有生成,手动生成它:
update-initramfs -c -k 5.4.0-182-generic
生成完成后再运行update-grub试试。

第三步:检查ZFS Boot数据集的挂载与配置

Ubuntu 20.04的ZFS系统通常会用bpool存储boot相关文件,先确认bpool的数据集配置正确:

  1. 查看所有ZFS数据集:zfs list -t filesystem,找到bpool/BOOT/ubuntu条目
  2. 检查它的挂载点:zfs get mountpoint bpool/BOOT/ubuntu,确保输出的挂载点是/boot
  3. 确认新内核文件确实在bpool里:zfs list -r bpool/BOOT/ubuntu | grep 5.4.0-182,如果能看到对应文件,说明没问题;如果看不到,可能是内核安装时没写入bpool,需要重新安装内核包:
    apt install --reinstall linux-image-5.4.0-182-generic linux-modules-5.4.0-182-generic linux-modules-extra-5.4.0-182-generic

第四步:重新安装GRUB到EFI分区

如果以上步骤都没解决问题,可能是GRUB的EFI引导记录出现了异常,重新安装GRUB:

  1. 先确认EFI分区已挂载:mount | grep /boot/efi,如果没挂载,先手动挂载(比如mount /dev/nvme0n1p1 /boot/efi,请根据你的实际EFI分区路径调整)
  2. 运行GRUB安装命令:grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
  3. 再次运行update-grub,之后重启系统测试是否能进入新内核

备注:内容来源于stack exchange,提问作者Peter Van Doren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:29:30