virtual-machine - 在 virtualbox 中引导原始磁盘 Windows 10 vm 引导到 grub shell
问题描述
我有一个 Windows 10 和 Kubuntu 18 的双启动设置。按照从这里和那里找到的说明,我设法让 Windows 在 Kubuntu 主机中作为来宾运行,作为使用 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 启动并运行良好,但每次输入这些都不是完全顺畅的工作流程。知道如何永久解决此问题吗?请注意,我仍然希望能够物理启动到两个操作系统。
谢谢,
解决方案
我有同样的问题。我修复了它,但后来更新了我的内核,所以 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 .cfg 在我的sda6 ==gpt6 上的 linux rootfs 中)
我通过更改 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。
希望这可以帮助!
推荐阅读
- swift - 在多个应用程序启动过程中保存数据
- python - Pandas - 将索引值设置为列名
- javascript - 使用 fetch 的无效请求方法 DELETE
- c# - 如何减少 for 循环以使代码更高效?
- android - 是否可以在 Cloud Function 中为 Google Cloud Platform API 生成访问令牌?
- r - 在 r studio 中过滤变量
- python-3.x - 如何比较一个类的实例
- spring - 需要从 Spring Cloud Gateway 路由中的 OAuth2User 获取经过身份验证的用户名
- javascript - CSS - 图像隐藏在溢出区域
- python - IndexError:列表索引超出范围 - python 错误