我的 Windows 10 笔记本电脑上有 Hyper-V,第一代 VM 运行 RHEL 7.9。我正在尝试使用 UEFI 引导更新它以在第 2 代 VM 上运行。
作为迁移到第 2 代 VM 的一部分,我需要将 UEFI 引导代码安装到 /boot 分区中。
我安装了以下软件包,我认为这是我需要的:
grub2-efi-x64.x86_64 (1:2.02-0.07.el7_9.9)
shim-x64.x86_64 (15-11.el7)
grub2-efi-x64-modules.noarch (1:2.02-0.07.el7_9.9)
shim-unsigned-x64.x86_64 (15-9.el7)
efibootmgr -v
显示以下内容:
如您所见,我通过 尝试了几种不同efibootmgr
的配置,但似乎都不起作用。
虚拟机的启动设置:
所以理论上,VM 应该从 启动\EFI\redhat\shimx64.efi
,据我所知,它应该是/boot/efi/EFI/redhat/shimx64.efi
文件,它确实存在:
df -h
显示在我通过救援 DVD 引导时/boot
已安装。/dev/sda1
chroot /mnt/sysimage
正如您从 /boot 分区的截图中看到的那样,在我看来,内核的有效 initramfs 文件(我认为我们甚至没有做到这一点):
我还尝试使用以下方法重置 grubs 配置:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
该grub.cfg
文件包含从内核版本的角度来看看起来正确的菜单条目,但是我什至没有看到 grub 菜单,所以我不认为我们已经走到了这一步。对我来说听起来像是 UEFI 引导加载程序问题,但我不知道如何解决问题。
当我取出 DVD 并启动机器时,Hyper-V 会降低启动顺序,直到遇到网络适配器。
最终,Hyper-V 显示了这一点:
我究竟做错了什么?
如果我从救援 DVD 启动,然后在 grub 菜单中拖放到命令行(通过c
)并运行configfile (hd0,gpt1)/efi/EFI/redhat/grub.cfg
,我可以启动已安装的 Linux 操作系统。
mount | grep -i "boot"
从启动的操作系统显示:
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)