KVM 中的 Windows 10:将启动盘更改为 Virtio

Gra*_*eme 45 linux-kvm windows-10

我已经使用 IDE 磁盘安装了 Windows 10 虚拟机,现在想更改磁盘以使用 Virtio 驱动程序。

对于其他版本的 Windows,这个问题中的方法似乎已经足够了 - How to migrate an IDE VM to a virtio VM?

但是,对于 Windows 10,这会导致INACCESSIBLE_BOOT_DEVICE问题。

我知道首选方法是从一开始就使用 Virtio 设备,并在出现提示时安装适当的 virtio 驱动程序。不幸的是,我在更改 KVM 中的 CD 时遇到了一些单独的问题(我也无法让 2 个 CDROM 设备工作)。

有没有办法在不重新安装的情况下解决这个问题?

类似的问题在这里 - https://me.m01.eu/blog/2015/03/windows-10-kvm-and-iscsi/#comment-36090

小智 43

所有答案都是正确的,但在安装 virtio 驱动程序后,您可能需要执行一些额外的步骤。以下是我遵循的步骤:

  1. 打开提升的命令提示符并通过键入将 VM 设置为启动到安全模式

    bcdedit /set {current} 最小安全启动

  2. 关闭 VM 并将引导设备类型更改为 virtio。

  3. 启动虚拟机。它将进入安全模式。

    注意:在安全模式下,所有引导启动驱动程序都将被启用和加载,包括 virtio 驱动程序。由于现在安装了一个微型端口来使用它,内核现在将使它成为要在启动时加载的驱动程序的一部分,并且不会再次禁用它。

  4. 在启动的 VM 中重置 bcdedit 设置以允许机器通过键入(再次在提升的命令提示符下)启动到正常模式:

    bcdedit /deletevalue {current} 安全启动

  5. 完毕。

  • 极好的!这对我来说是缺失的一点。我使用了`bcdedit /set safeboot minimum`,省略了`{current}`,因为我不确定里面应该放什么。 (3认同)
  • @CharlesGreen `{current}` 是字面意思,你按原样输入。 (2认同)
  • 如果您使用的是管理员 powershell,请引用 {current}:`bcdedit /set "{current}" safeboot minus` (2认同)
  • 它没有在我的 Step4 上启动(无启动设备)(Win 2k19)。现在,我将一个空的 20GB 卷与 virtio 以及驱动程序映像一起添加到虚拟机中。安装驱动程序后,我确保检测到驱动器(磁盘管理)。我认为这会强制 Windows 在启动时加载该驱动程序。这样做,安全模式现在对我有用,我可以按照解决方案进行操作。 (2认同)

JPv*_*iel 27

提供了一个相当简单的答案- 并且可能在许多情况下起作用,以及其他选项的提示。如果(像我一样)您无法切换到 IDE 并被迫使用 VirtIO,那么以下替代方法可能会起作用:

  1. 将 Windows 10 DVD/CD ISO 和 virtio 驱动程序 ISO 添加到 VM。
  2. 启动 Windows 10 DVD/CD 并从修复模式选项进入命令提示符。
  3. 通过 CLI 加载驱动程序,例如 drvload e:\viostor\w10\amd64\viostor.inf
    • 就我而言,e: 是分配 virtio 安装 ISO 的地方。
    • 加载驱动程序后 f: 是安装 Windows 的地方。
  4. 使用DISM命令注入存储控制器驱动
    • 例如 dism /image:f:\ /add-driver /driver:e:\viostor\w10\amd64\viostor.inf
    • 如上所述,根据您自己的环境更改驱动器号分配。

避免需要摆弄特殊的 Windows 启动 CD/映像和动态“修补”实际的 Windows 安装映像。

请注意,对于这个利基案例,我建议避免启动修复(这对我来说失败了)。加载后它似乎不知道如何包含 vitor.inf,如果您尝试使用它,请小心避免 Windows 10 的 DVD 急于恢复或重新安装所有内容...

DISM 方法的功劳:使用 dism 添加驱动程序


har*_*ymc 11

一般要遵循的步骤是:

  1. 在 VM 中安装 VirtIO 驱动程序
  2. 设置VM的系统盘使用VirtIO
  3. 如果 VM 无法启动,请执行启动修复甚至修复安装

详细的程序是:

  1. 将启动盘返回到 IDE。
  2. 确保 Windows VM 已关闭。
  3. 这里下载 VirtIO 驱动程序 ISO 。
  4. 将其安装在 VM 的 CD 驱动器上。
  5. 添加一个 VirtIO 类型的存储设备。大小分配无关紧要,因为您使用它来安装驱动程序。
  6. 启动 Windows 虚拟机。它将尝试安装驱动程序。如果没有,请打开设备管理器,您应该会看到旁边带有感叹号图标的 SCSI 设备。您可以选择更新驱动程序并指向已安装 ISO 的相应目录。安装后,不要重新启动而是关闭机器。
  7. 在 Windows 的 virt-manager 设置中,将存储类型从 IDE 更改为 VirtIO。
  8. 您可以删除之前创建的存储设备。不再需要它了。
  9. 启动 Windows,它应该启动并安装 SCSI 驱动程序。完成后您需要重新启动。
  10. 如果 VM 未启动但已安装驱动程序,您可以尝试执行以下操作:

    1. 启动修复可以修复某些可能阻止 Windows 启动的系统问题。
    2. 最后一个解决方案:从 Windows 10 ISO 启动时修复安装。这将保留所有应用程序和用户设置,只需刷新 Windows 并启动。使用最新的 Windows 10 ISO。

如果不幸需要最后一步,可能会遇到的另一个困难是 Windows 引导 CD 无法识别 VirtIO 磁盘,因为 Microsoft 未将这些驱动程序包含在其中。在这种情况下,需要创建一个包含这些驱动程序的自定义启动 CD/USB,但请确保您从与安装相同级别的 Windows ISO 启动,获取最新的 ISO(当前为 1511)。

以下是有关如何在 Windows 中集成驱动程序的一些教程:

  • 虽然上面的答案听起来不错而且看起来很简单,但不幸的是,我的 VM 使用了“pc-q35-2.5”机器仿真/类型,无法添加 IDE 控制器。 (2认同)

sdh*_*dhd 8

harrymc 的回答对我来说很好。

我遵循了以下步骤:

  1. windows下安装virtio驱动
  2. 添加一个额外的“虚拟”virtio 磁盘。重新启动并检查“虚拟”是否有效。
  3. 如果步骤 2 有效,则将启动盘切换到 virtio。
  4. 重启
  5. 删除额外的“虚拟”virtio 磁盘
  6. ...

  • 这是一个被低估的答案 - 在 Proxmox 中,即使安装了所有驱动程序,Windows 10 也无法初始化。我必须创建一个 1 GB 的小磁盘作为 VirtIO 块设备,启动 VM,验证它是否正确显示,然后关闭并将主驱动器更改为 VirtIO。Windows 10 没有正确检测到 HDD 驱动程序,所以我不得不在进行切换之前哄它在启动时加载它。 (2认同)

小智 6

不幸的是,有可能完美安装驱动程序但仍然得到“无法访问的引导设备”。原因有点令人震惊(我发现):Win 10 安装“记住”了首次安装时所需的驱动程序,并且默认情况下不会在启动时加载其他存储驱动程序。这样做似乎是为了“盗版”——这使得在不同硬件上运行“相同”安装变得困难。在这篇来自 gentoo 论坛的帖子中,有一些关于这个“特性”的很棒的文档。本质如下:

启动时禁止加载的驱动程序可以按如下方式确定: 在注册表项 Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services 中,对于安装已知的每个驱动程序,都有一个子项。此子项的名称只是驱动程序的名称。在每个驱动程序子项中,如果要防止在启动时加载该驱动程序,则将有一个子项“STARTOVERRIDE”。特别是,在 STARTOVERRIDE 子项中有一个名称为 "0" 的参数。如果此参数的值为“3”,则不会在启动时加载。将此值设置为 0 将“覆盖”行为。

我自己只是去 Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services 并搜索“STARTOVERRIDE”。每次我找到它时,如果它下面有一个名为“0”且值为“3”的名称,我将更改为“0”。这似乎有点矫枉过正,您只需要更改需要加载的驱动器即可。就我而言,有几个,我不记得是哪个,所以我只是在那个“服务”部分进行了“F3搜索”。

还有一个最后的提示,当前的、已签名的、virtio 存储不需要,但如果其他人想要使用(尚未)签名的更具实验性的驱动程序,则可能是阅读本文的人:我发现即使在执行上述操作后技巧,我还需要启动到高级选项屏幕并选择 F7(“禁用驱动程序签名验证”)。令人讨厌的是,设置 bcd 标志来禁用驱动程序验证是不够的,因为驱动程序需要在机器读取 BCD 并发现它不需要验证签名之前加载。

总而言之,不是微软最闪亮的时刻。如果您宁愿给合法用户一个虚构的人工蓝屏,而不是让人们(比如)用 NVMe 磁盘替换 SATA 磁盘并让它“正常工作”,那么您真的必须讨厌您的用户。


Adr*_*ffo 5

哇,好多恶作剧。为什么不直接使用Arch Wiki 的 QEMU方法呢?首先你要做好virtio-win-0.1-81.iso准备。从红帽下载。

1 - 创建一个假(虚拟)磁盘$ qemu-img create -f qcow2 fake.qcow2 1G

2 - 将 Windows 启动驱动器保留为 IDE 或 SATA 或其他驱动器,添加新的假驱动器作为辅助驱动器,但该驱动器的驱动程序应该是virtio.

2a - 如果使用 libvirt,请通过编辑 VM 的 xml 来添加假驱动器,并将以下内容添加到:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/full/path/to/fake.qcow2'/>
  <target dev='vda' bus='virtio'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

2b - 如果使用 QEMU 直接启动您的虚拟机$ qemu-system-x86_64 -m 512 -drive file=windows_disk_image,if=ide -drive file=fake.qcow2,if=virtio -cdrom virtio-win-0.1-81.iso

3 - 启动 VM 并viostor从 Win .iso 安装驱动程序。

4 - 安装后,关闭 Windows VM,删除 xml 配置(如果是 libvirt),删除 fake.qcow2 并启动 Win VM。

5 - 享受吧!