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


25

我已经使用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。我自己不知道这个问题。遵循Windows早期版本的各种解决方法后,我尝试在插入VirtIO块设备后在Windows VM上安装VirtIO驱动程序,但仍然出现INACCESSIBLE_BOOT_DEVICE蓝屏。我最终在VirtIO引导设备上重新安装。
Deltik

由于我很懒,因此我将其发布为注释,以供您验证:添加带有virtio“ controller”的附加磁盘。Windows要求您安装驱动程序。无需创建分区或任何东西。然后将启动磁盘切换到virtio。因为现在已安装控制器驱动程序实例(非常重要),所以它应该可以工作。
丹尼尔·B

@DanielB:那正是我所做的。看来,你的建议适用于Windows的早期版本,但不能在Windows 10
Deltik

嗯好吧 好吧,我猜想我有一个不解决问题的最佳方法(大声笑):只需修改Windows ISO并包括驱动程序即可。请记住,它需要保持可引导状态。这样,您可以(希望)直接安装到virtio。
Daniel B

1
@DanielB:可以在安装过程中使用单独的驱动程序光盘加载VirtIO驱动程序。如果Windows 10与VirtIO驱动程序一起安装,则没有问题。只是Internet上将Windows从IDE切换到VirtIO的现有说明不适用于Windows 10 KVM虚拟机。
Deltik

Answers:


24

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

  1. 打开提升权限的命令提示符,并通过键入以下内容将VM设置为引导进入安全模式

    bcdedit / set {当前} safeboot最小

  2. 关闭VM,然后将启动设备类型更改为virtio。

  3. 引导虚拟机。它将进入安全模式。

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

  4. 在启动的虚拟机中,重置bcdedit设置,以使机器可以通过键入(再次在提升的命令提示符下)启动进入普通模式:

    bcdedit / deletevalue {当前} safeboot

  5. 做完了


1
太棒了!这是我所缺少的。我曾经使用过bcdedit /set safeboot minimal,省略了,{current}因为我不确定应该在里面放什么。
查尔斯·格林

2
@CharlesGreen {current}是文字,您按原样输入。
Marc.2377 '18

如果您使用PIN登录会出现问题,因为密码登录可能需要网络访问。结果,我正在重新安装Windows。answers.microsoft.com/en-us/windows/forum/windows_10-security/...
安德鲁·奥尔尼

我在第一步中尝试使用bcdedit / set {current} safeboot网络来避免登录问题,我还首先创建了一个本地用户以提高安全性,但我真的不认为该问题适用于我,但是由于该机器是连接到域,我无法控制我想确保自己没有做错任何事情。网络参数至少没有破坏该过程。
HackerBaloo

您如何做1),即提升的提示?
Frederick Nord

16

提供了一个相当简单的答案 -在许多情况下可能会起作用,同时还会提示其他选项。如果(像我一样)无法切换到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安装映像。

请注意,对于这种小众案例,我建议避免启动修复(对我而言这失败了)。加载后似乎不知道如何包含vistor.inf,如果尝试使用它,请小心避免Windows 10的DVD渴望还原或重新安装所有内容...

感谢使用 DISM方法:使用dism添加驱动程序


1
替代4:右键单击inf文件->安装。
rbs

另外,请注意Windows更新是否会破坏此功能。作为每reddit的帖子,“更新删除我的司机的Virtio”:reddit.com/r/VFIO/comments/6b06y5/...。当您同时将Windows安装同时作为双启动和VM运行并在本地硬件上应用更新时,可能会发生这种情况
。– JPvRiel

1
这,加上下面的答案。我必须将启动引导到安全模式(最小bcdedit / set {current} safeboot),然后删除安全模式引导(bcdedit / deletevalue {current} safeboot),然后重新启动。之后,它与Windows Server 2016 Essentials一起使用。
G Trawo

10

通常要遵循的步骤是:

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

详细的过程是:

  1. 将启动磁盘返回到IDE。
  2. 确保Windows VM已关闭。
  3. 此处下载VirtIO驱动程序ISO 。
  4. 将其安装在VM的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 ISO开始。

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


除了在步骤9上尝试启动时,出现INACCESSIBLE_BOOT_DEVICE错误(这是我发布问题的位置)时,此答案将起作用(并且在Windows上的其他版本上也适用)。启动修复(10.1)不起作用,并且实际上不可能执行步骤10.2。修复安装只能通过以下方法完成:首先在没有CD的情况下引导系统,然后setup.exe在CD上运行。这就是问题中链接的描述,据我所知,没有其他方法可以做到。
Graeme

我还应该提供什么其他信息?我已经多次告诉您,该选项不存在。这里的问题是您一直坚持要这样做。如果是“互联网上各种文章中有数十篇其他文章”,请参考一本。链接一篇文章,描述如何从CD引导并开始修复安装-无需先引导已安装的系统并setup.exe在CD上运行。从可靠的来源链接一篇文章,证明您没有在撒谎,我将向您道歉并给予宝贵的支持。
Graeme

例如,请参见此视频,了解如何从安装媒体在Windows 10上进行启动修复。如果不是,请尝试使用命令提示符。就像我在上面说过的那样,您可能需要使用流畅的ISO-我不知道WIn10安装是否包含VirtIO驱动程序。
harrymc '16

或者,您可以采用drvload方法将VirtIO驱动程序添加到已引导的Windows PE安装映像中。
harrymc '16

2
虽然上面的答案听起来不错,而且看起来很简单,但不幸的是,对于使用pc-q35-2.5机器仿真/类型的VM ,无法添加IDE控制器。
JPvRiel

5

来自harrymc的答案对我来说很好。

我遵循的以下步骤:

  1. 在Windows中安装virtio驱动程序
  2. 添加另一个“虚拟” virtio磁盘。重新启动并检查“虚拟”是否有效。
  3. 如果步骤2可行,则将启动磁盘切换到virtio。
  4. 重启
  5. 删除其他“虚拟” virtio磁盘
  6. ...

请不要添加“谢谢”作为答案。在网站上花费一些时间,您将获得足够的特权来投票赞成您喜欢的答案,这是超级用户说谢谢的方式。
DavidPostill

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

3

不幸的是,有可能完美地安装了驱动程序,并且仍然获得“无法访问的启动设备”。原因有点令人震惊(我发现):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磁盘并使其“正常工作”,那么您真的很讨厌用户。


感谢您提供这么多的细节,这是最可行的解决方案!一个regfile可以导入并解决所有问题。
Florian Heigl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.