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

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

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

对于其他版本的 Windows,这个问题中的方法似乎足够了 -如何将 IDE VM 迁移至 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

答案1

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

  1. 将启动盘配置为 SATA 并启动虚拟机。

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

    bcdedit /set "{current}" safeboot minimal
    
  3. 关闭虚拟机并将启动设备类型更改为 virtio。

  4. 启动虚拟机后,虚拟机将进入安全模式。启动安全模式会自动启用和加载所有启动驱动程序,包括 virtio。由于现在已安装一个微型端口来使用它,内核现在将使其成为启动时要加载的驱动程序的一部分。

  5. 要禁用下次启动的安全模式,请在提升的命令提示符中运行:

    bcdedit /deletevalue "{current}" safeboot
    
  6. 关闭。

  7. 将启动盘重新配置为 virtio 并启动虚拟机。

答案2

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

  1. 将 virtio 驱动程序 ISO 添加到 VM。
    • 要求:可以从位于以下位置的 RPM 中提取最新的驱动程序 ISO:https://fedorapeople.org/groups/virt/virtio-win/repo/latest/
    • 建议:另外,如果您无法使用启动修复或无法加载驱动程序并使 Windows 10 操作系统卷可用,请添加 Windows 10 DVD/CD ISO 和启动表单。
  2. 使用疑难解答 -> 高级选项 -> 命令提示符,可以从失败的启动恢复菜单或从 Windows 10 DVD/CD 启动,然后从修复模式选项进入命令提示符。
  3. 通过以下方式识别驱动程序后者映射wmic logicaldisk get deviceid, volumename, description
    • 就我而言,virtio-win 安装 ISO(CD-ROM 光盘)被分配给E:您的情况会有所不同!
  4. 通过 CLI 加载驱动程序,例如drvload e:\viostor\w10\amd64\viostor.inf
    • 加载驱动后,wmic logicaldisk get deviceid, volumename, description再次运行。
    • F:在我的案例中,Windows 安装被挂载到此处。您的案例会有所不同!
  5. 使用DISM命令注入存储控制器驱动程序
    • 例如dism /image:f:\ /add-driver /driver:e:\viostor\w10\amd64\viostor.inf
    • 如上所述,根据您自己的环境更改驱动器号分配。

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

进一步注意:

  • 虽然可以使用启动修复,但有一次我确实遇到了drvload需要重新启动的命令问题。它似乎没有加载 Windows 10 操作系统卷,重新启动毫无意义,因为我卡在启动修复屏幕上,需要再次加载驱动程序,因此使用 Windows ISO 进行启动更为可靠。
  • 有一次,我使用可以在裸机上或在 qemu/libvirt(使用原始存储和 virtio)中启动的混合 Windows 10 实例,我在裸机上运行时进行了升级,但在下次虚拟启动时,它搞乱了我的 virtio 驱动程序。启动修复dism在这种情况下无需 Windows 10 安装 DVD 即可正常工作。
  • 如果您确实从 Windows 安装 DVD/ISO 启动,请小心避免 Windows 10 的 DVD 急于恢复或重新安装所有内容...

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

答案3

一般要遵循的步骤如下:

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

程序详细如下:

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

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

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

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

答案4

不幸的是,即使驱动程序安装完美,仍然会出现“无法访问的启动设备”的情况。原因有点令人震惊(我发现):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 磁盘并让它“正常工作”,那么你真的不得不讨厌你的用户。

相关内容