如何使用 qemu 启动物理 Windows 分区?

McE*_*roe 20 windows qemu multi-boot

我在我唯一的硬盘上安装了 gentoo 和 Windows 7。我想通过 q​​emu 从 gentoo 中开始我的 Windows 安装。启动菜单工作正常,但在我选择它后不久我的 Windows 蓝屏。

我将如何使它工作?

(我假设 Windows 缺少 qemu 模拟硬件工作所需的驱动程序。)

doa*_*oak 13

可以通过以下方式启动本机物理Windows 7分区:

  1. 准备必要条件(Windows 7安装介质、Virtio 驱动程序)。
  2. 使您的硬盘驱动器可供当前用户以只读方式访问。
  3. 在快照模式下使用 QEMU 启动它。

这不会更改物理驱动器上的任何内容(实际上它是只读的)。如果您想保留这些内容,请-snapshot从 QEMU 调用中删除或commit all在 QEMU 控制台中使用。

顺便说一下,这也适用于Windows 10


细节

准备必需品

  1. 准备一个 ISO,或者如果你手头有驱动器,那就是 Win7 的真正安装介质。
  2. 从 Fedora 下载 Virtio 驱动程序,例如这个驱动程序:https :
    //fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso

请注意使用与安装的 Windows 架构(32 位与 64 位)匹配的正确安装介质。以下命令假定为 64 位架构。

使磁盘可访问

这假设您的硬盘驱动器已经/dev/sda并且已经以 root 身份执行:

   chmod g-w /dev/sda
   chgrp $USER /dev/sda
Run Code Online (Sandbox Code Playgroud)

此更改将(可能)在下次重新启动时丢失,因为udev通常会重新创建所有设备文件。

使用 QEMU 启动

  1. 这再次假设您的硬盘驱动器是/dev/sda. 网络被禁用:

     qemu-system-x86_64 -snapshot -m 3G -enable-kvm -usbdevice tablet \
     -drive file=/dev/sda,if=virtio \
     -drive file=<win7-installation-media> \
     -drive file=<virtio-driver-media>,media=cdrom -boot d \
     -net none
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在从 CD/DVD 启动以启动Windows 7恢复,加载 Virtio 驱动程序并在恢复命令提示符下运行以下命令。确保用正确的驱动器号替换驱动器号:

     dism /image:g:\ /add-driver /driver:e:\viostor\w7\amd64
    
    Run Code Online (Sandbox Code Playgroud)

驱动器G:是包含Windows 7安装的驱动器。DriveE:代表带有 Virtio 驱动程序的 CDROM 驱动器。为了显示此命令变体的一些帮助,请使用dism /image:g:\ /?.

dism命令是从这个超级用户答案复制而来的。

【抱歉,截图已经准备好了,但由于10声望门槛我无法发布。不幸的是,我无法在此期间找到它们:(]


小智 5

我设法在 archlinux 上做到了这一点,主要是通过改编其他(更聪明的)人在博客中提供的示例。

最小版本:

安装 deps

sudo pacman -S qemu   # qemu itself
sudo pacman -S ovmf   # intel EFI driver
cp /usr/share/ovmf/x64/OVMF_CODE.fd bios.bin   # copy OVMF_CODE.fd to bios.bin somewhere. It MUST be renamed.
Run Code Online (Sandbox Code Playgroud)

启动 qemu

qemu-system-x86_64 \
    -enable-kvm                                   `# enable KVM optimiations` \
    -L .                                          `# dir with bios.bin` \
    --bios bios.bin                               `# bios.bin itself` \
    -m 8G                                         `# provide reasonable amount of ram` \
    -cpu host                                     `# match the CPU type exactly` \
    -drive file=/dev/sda,format=raw,media=disk    `# load raw HDD` 
Run Code Online (Sandbox Code Playgroud)

性能优化

还向我推荐了以下标志,我一直在成功使用它们。

# emulate exact host cpu,
# enable hyper-v enlightenments
-enable-kvm
-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time
-machine type=pc,accel=kvm

# use all available CPU cores
-smp $(nproc)
Run Code Online (Sandbox Code Playgroud)

查看器

我用香料作为观众:

-daemonize  `# don't start monitor, we connect using RDP` \
-vga qxl \
-spice port=5930,disable-ticketing \
-device virtio-serial \
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent \
Run Code Online (Sandbox Code Playgroud)

后跟以下显示查看器

spicy -h 127.0.0.1 -p 5930 & disown spicy;  # spice-gtk
Run Code Online (Sandbox Code Playgroud)

Windows 引导加载程序警告

最后,如果您使用多个磁盘,请注意 Windows 引导加载程序。我现在有一个 Windows 安装,除非还存在第二个非操作系统驱动器,否则它不会启动。

参考

我希望我把我的消息来源保留在这里 - 我记得至少以下内容非常有帮助:

https://wiki.qemu.org/Main_Page https://qemu.weilnetz.de/doc/qemu-doc.html https://wiki.archlinux.org/index.php/QEMU https://wiki.gentoo .org/wiki/QEMU https://www.suse.com/documentation/sles11/book_kvm/data/part_2_book_book_kvm.html

祝你好运!


Has*_*ken 4

从我在这篇文章中看到的,您无法使用 qemu 来启动现有的 Windows 安装。

给出的主要论点是,当安装 Windows 时,产品密钥与计算机的主板相关联。现在,当您尝试使用 qemu 运行 Windows 时,Windows 会将 qemu 模拟器视为不同的主板,从而出现问题。

请参阅该帖子了解更多详细信息。

  • VirtualBox 可以将自己宣传为任意主板 (https://forums.virtualbox.org/viewtopic.php?t=33356),也许 QEMU 也可以。 (3认同)