在virtualbox中引导原始磁盘10 vm引导到grub shell

问题描述 投票:4回答:1

我有一个Windows 10和Kubuntu 18的双启动设置。按照从这里和那里发现的指令,我设法让Windows作为VM中的guest虚拟机使用VirtualBox作为VM运行。

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

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

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启动和工作正常,但每次进入这些并不是完全平滑的工作流程。知道如何永久修复此问题吗?请注意,我仍然希望能够物理启动到两个操作系统。

谢谢,

virtual-machine virtualbox raw-disk
1个回答
2
投票

我有同样的问题。我修复了它,但随后更新了我的内核,所以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

因为我们已经设置了VirtualBox vmdk文件,只有所选的Windows分区才能工作,所以search.fs_uuid命令失败,$ root为空,因此grub找不到$ prefix / grub.cfg(/ boot / grub / grub)我的linux rootfs中的.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。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.