通过kvmpipe理程序的Windows客户机操作系统不会在连接networking接口后保留磁盘状态

我有基于openstack的云环境。 我有基于kvm/qemu的pipe理程序。 我在其中一个pipe理程序上创build了Windows guest虚拟机操作系统虚拟机。 我把卷(vhd)附加到vm。 我在客户操作系统中将磁盘状态更改为online 。 然后,我将(hotplugged)networking接口连接到vm。 在虚拟机pipe理程序中,我可以看到vm的xml文件中添加了networking接口。 我重新启动虚拟机,我仍然可以在xml文件中看到所有的磁盘和networking接口。 但他们的插槽重新排列。 然后我检查来宾操作系统上的磁盘状态,并显示Offline 。 我不明白这个问题在哪里。 如果我只是重新启动虚拟机,而不附加额外的networking接口,则磁盘状态将被保留。 有人知道为什么发生? 它不会发生在Linux客户操作系统上,所以我假设这是来宾操作系统级别的问题,可能是与virtIO驱动程序有关的问题。 这个问题与hotplugging没有任何关系,因为即使我closuresvm后连接networking接口,它仍然会发生。

Nova有意不分配给设备的PCI插槽。 每次客人dynamic地分配它们,所以如果你添加/删除设备,特别是使用热插拔,他们几乎保证在每次启动时改变。

您看到的确切行为仅仅是由于分配设备地址的方式。 IIRC,首先将PCI地址分配给所有列出的NIC,然后分配给磁盘/磁盘控制器。 所以,如果你添加额外的网卡,那么所有的磁盘将增加他们的PCI插槽,以便在下一次重新启动时为这个额外的网卡腾出空间。

鉴于此,您不应该依赖PCI插槽来识别OpenStack中的设备。 对于磁盘,您应该通过查看文件系统标签或UUID来理想地识别设备,或者为NIC使用其MAC地址进行标识。