在VirtualBox中启动裸盘Windows 10虚拟机时,会引导到grub shell。

8

我有一个双系统设置,安装了Windows 10和Kubuntu 18。通过从这里和那里找到的指南,我成功地将Windows作为客户端在Kubuntu主机中以虚拟机的形式运行,使用的软件是VirtualBox。

sudo usermod -a -G disk $USER
VBoxManage internalcommands createrawvmdk -filename "/path/to/vm/win10.vmdk" -rawdisk /dev/sda -partitions 1,3,4 -relative

第一行是为了避免以超级用户身份运行VirtualBox。
当我启动虚拟机时,我会短暂地看到一个错误消息。

Boot Failed. EFI DVD/CDROM
SystemBootOrder not found. Initializing defaults.
Creating boot entry "Boot0003" with label "ubuntu" for file "\EFI\ubuntu\shimx64.efi"

然后进入 grub shell。现在,当我运行命令时

insmod chain
set root=(hd0,gpt1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
boot

Windows可以正常启动和工作,但每次都输入这些信息并不是很流畅。有什么办法可以永久修复这个问题呢?请注意,我仍然希望能够物理上引导两个操作系统。

谢谢。


你遇到了完全相同的问题,最终在其他地方找到解决方法了吗? - medoix
很遗憾,目前还没有任何内容。 - runs on clozapine
1个回答

7

我遇到了同样的问题。我解决了它,但是后来我更新了内核,所以grub又把它修复了!第二次解决这个问题比较快,但我想下一次在StackOverflow上找到答案会更快!

/boot/efi/EFI/ubuntu中的grub.cfg文件如下:

search.fs_uuid 47d6233f-c0ae-4f89-bf18-184452eac803 root hd0,gpt6
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

由于我们已经使用虚拟机vmdk文件仅设置了Windows工作的选定分区,因此search.fs_uuid命令失败,$root为空,因此grub找不到$prefix/grub.cfg(我的linux rootfs中的/boot/grub/grub.cfg在sda6==gpt6上)。
我通过更改EFI grub.cfg实现了自动化,注意我的EFI系统分区为2而不是你示例中的1。
search.fs_uuid 47d6233f-c0ae-4f89-bf18-184452eac803 root hd0,gpt6 
set prefix=($root)'/boot/grub'
if [ -f $prefix/grub.cfg ]
then
    configfile $prefix/grub.cfg
else
    insmod chain
    set root=(hd0,gpt2)
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
    boot
fi

现在,如果grub可以找到cfg文件,它将像以前一样给我菜单选择引导项,但是如果它无法找到 - 当我在VirtualBox中时 - 它将直接启动Win10。希望这能帮到你!

我更改了文件 /boot/efi/EFI/ubuntu/grub.cfg 并重新启动。然后,当我启动我的 Windows 虚拟机实例时,我仍然必须手动使用控件。我需要更新 grub 吗? - Philippe Prados
我不这么认为 - 听起来可能是你的一些参数有误。 - Jimbo
@PhilippePrados 我也曾经遇到过这个问题。事实证明,在编辑了 grub.cfg 之后,你确实需要运行 sudo update-grub 命令,以便将更改复制到引导分区中。问题解决了。 - Jonathan Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接