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

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

我唯一的硬盘上同时安装了 gentoo 和 windows 7。我想通过 q​​emu 从 gentoo 内部启动 windows 安装。启动菜单工作正常,但选择它后不久 windows 就出现蓝屏。

我该如何让它工作呢?

(我认为 Windows 缺少 qemu 模拟硬件运行所需的驱动程序。)

答案1

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

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

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

顺便说一下,这对Windows 10也一样。


细节

准备必需品

  1. 准备一个 ISO,或者如果您手头有驱动器,则准备 Win7 的真实安装媒体。
  2. 下载 Virtio 驱动程序,例如 Fedora 的此驱动程序:
    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

这些更改可能在下次重启时丢失,因为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
    
  2. 现在从 CD/DVD 启动Windows 7的恢复,加载 Virtio 驱动程序并在恢复命令提示符中运行以下命令。确保将驱动器号替换为正确的驱动器号:

     dism /image:g:\ /add-driver /driver:e:\viostor\w7\amd64
    

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

命令dism复制自这个超级用户的回答

[抱歉,截图已经准备好了,但由于声望值门槛为 10,我无法发布。不幸的是,我目前无法找到它们 :(]

答案2

我已经设法在 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.

启动 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` 

性能优化

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

# 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)

查看器

我使用 Spice 作为查看器:

-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 \

接下来是显示查看器

spicy -h 127.0.0.1 -p 5930 & disown spicy;  # spice-gtk

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

祝你好运!

答案3

据我所见这个帖子,您不能使用 qemu 来启动现有的 Windows 安装。

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

參閱邮报更多细节。

答案4

这是我用于物理 Windows 10 驱动器的内容。请注意,在许多情况下,如果您不使用“ -cpu host”标志,Windows 将无法启动。

只需用你的驱动器替换即可/dev/nvme0n1/dev/sda或者/dev/sdb

qemu-system-x86_64 --enable-kvm -cpu host -smp 8 -m 8192 -drive format=raw,file=/dev/nvme0n1  # Replace this last parameter

来源

相关内容