所以我有一个运行 Windows 10 和 Ubuntu 16.04 的双启动系统。我通过分区将它们分开。
我在 Windows 分区上有一些我时不时需要的程序和文件,关闭 Ubuntu 并重新启动 Windows 很麻烦,特别是当我打开了终端和程序并且我不想关闭并重新打开它们时。
所以我的问题是:使用 Ubuntu 时是否可以在 VBox 中启动 Windows 分区?如果可以,我该怎么做?
答案1
实际上,我不知道,但似乎可以做到这一点虚拟盒以及:
首先,您需要在 VirtualBox GUI 中创建一个虚拟机。像平常一样选择所有选项,但当询问虚拟硬盘时,请选择“不添加虚拟硬盘”。
发出 fdisk 列出分区并找到 Windows 分区:
sudo fdisk -l
假设/dev/sda
VBoxManage internalcommands createrawvmdk -filename "</path/to/file>.vmdk" -rawdisk /dev/sda1
警告:请勿尝试启动主机操作系统或在虚拟机中安装其分区,否则将会发生不好的事情!
答案2
确实有可能虚拟机(如下所示)。您将需要一个可以下载的 UEFI 实现,并且您需要为其设置一堆选项qemu
。以下内容应适用于带声音的英特尔芯片组。您可能希望先在没有声音和网络的情况下进行测试。
警告:请勿尝试在虚拟机中启动主机操作系统或其驱动器,否则将会发生不好的事情!
sudo qemu-system-x86_64 --enable-kvm -cpu host -m 2048 -smp 3 -mem-path /dev/hugepages \
-display sdl -vga qxl \
-device qemu-xhci,id=xhci \
-device virtio-tablet,wheel-axis=true \
-soundhw hda \
-netdev user,id=vmnic,smb=/temp \
-device virtio-net,netdev=vmnic \
-drive file=/usr/share/ovmf/x64/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \
-drive file=$HOME/.config/qemu-windows.nvram,if=pflash,format=raw,unit=1 \
-drive file=/dev/sdb,index=0,media=disk,driver=raw \
-cdrom /opt/UefiShell.iso
现在我使用 sudo,因为 QEMU 需要从 访问原始分区
/dev/sdb
。另一个更好的方法是将 分配给 一个组/dev/sdb
,设置适当的组权限并将我添加到该组。
-m 2048 -smp 3
表示为客户机分配 2GB RAM 并使用 3 个 CPU 核心
-mem-path /dev/hugepages
更好地描述Arch 维基。
-display sdl -vga qxl
在主机中使用 SDL 进行渲染和窗口管理,在客户机中使用 QXL GPU 设备(Windows 有 QXL 驱动程序)。
-device qemu-xhci,id=xhci
通过模拟 XHCI 控制器启用 USB3 支持
-device virtio-tablet,wheel-axis=true
模拟支持鼠标滚动的平板电脑指点设备
-soundhw hda
模拟英特尔高清音频netdev 用于设置网络接口
-drive file=/usr/share/ovmf/x64/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on
这是非常重要的部分。它以只读方式加载 OVMF UEFI 固件作为第一个 Flash 设备。此固件实现了 UEFI bios,并允许运行 UEFI Shell 或启动 Windows 的 .efi 引导加载程序 (bootmgfw.efi)。此 OVMF 可直接从OVMF 项目仓库或者如果您使用的是 Arch Linux,只需安装 ovmf 包。
-drive file=$HOME/.config/qemu-windows.nvram,if=pflash,format=raw,unit=1
这会加载一个读写 NVRam 闪存映像作为第二个虚拟闪存芯片。OVMF 固件使用它来存储 UEFI 变量、.efi 启动顺序等。可以从 OVMF 设置中复制默认映像(位于/usr/share/ovmf/x64/OVMF_VARS.fd
ovmf Arch Linux 包中)。它必须是可写的副本。
-drive file=/dev/sdb,index=0,media=disk,driver=raw
将我的原始 sdb 块设备附加到虚拟机。它用作客户机的 HDD,其中预装了 Windows 和 EFI 分区。-cdrom /opt/UefiShell.iso UEFI shell iso 作为 CDROM。在 OVMF nvram 正确配置为默认启动 Windows 之前,这将导致启动到 EFI shell,从而允许手动运行 .efi 可执行文件。只需导航到 EFI 分区并运行 Windows efi 加载程序即可运行 Windows –
blkX:\EFI\Microsoft\Boot\bootmgfw.efi
。我不知道如何强制 Windows 写入 UEFI 启动顺序。Windows 上似乎没有像 efibootmgr 这样的工具。:D Windows 会在某些 Windows 更新期间随机设置 UEFI 启动顺序(主要是当您不想让它触及您的 EFI 设置时)。它最终很快为我设置了 EFI 配置。但如果失败,您可以尝试在 TianoCore EFI 启动期间按 ESC 进入启动菜单。或者,您始终可以使用 -cdrom 命令启动 Linux,并使用 efibootmgr 强制 OVMF 默认启动此虚拟机的 Windows 加载程序条目。efibootmgr 命令的使用超出了本文的范围,可以在其他许多在线资源中找到。