通过虚拟盒双启动访问windows分区

通过虚拟盒双启动访问windows分区

所以我有一个运行 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.fdovmf 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 命令的使用超出了本文的范围,可以在其他许多在线资源中找到。

相关内容