Назад | Перейти на главную страницу

гостевая ОС Windows поверх гипервизора kvm не сохраняет статус диска после подключения сетевого интерфейса

у меня есть openstack на основе облачной среды. у меня есть kvm/qemu на базе гипервизоров. я создал Windows гостевая ОС vm на одном из гипервизоров. И я прикрепил том (vhd) к vm. Я изменил статус диска на online в гостевой ОС. Затем я подключил сетевой интерфейс (горячее подключение) к vm. Я мог видеть добавленный сетевой интерфейс в xml-файле vm на гипервизоре. Я перезапустил виртуальную машину и все еще могу видеть все диски и сетевые интерфейсы в XML-файле. Но слоты в них переставлены. Затем я проверяю статус диска в гостевой ОС, и он показывает Offline. Я не понимаю, в чем проблема. Если я просто перезапущу виртуальную машину без подключения дополнительного сетевого интерфейса, статус диска сохранится. Кто-нибудь знает, почему это происходит? Этого не происходит в гостевой ОС Linux, поэтому я предполагаю, что это проблема уровня гостевой ОС, может быть virtIO проблема, связанная с драйвером. Проблема не имеет никакого отношения к горячему подключению, потому что это все еще происходит, даже если я подключаю сетевой интерфейс после выключения vm.

Nova намеренно не дает никаких гарантий относительно слотов PCI, назначенных устройствам. Они динамически назначаются каждый раз, когда гость становится гостем, поэтому, если вы добавляете / удаляете устройства, особенно с горячим подключением, они почти гарантированно изменяются при каждой загрузке.

Точное поведение, которое вы видите, просто связано с тем, как назначаются адреса устройств. IIRC, адреса PCI сначала назначаются всем перечисленным сетевым адаптерам, а затем назначаются дискам / дисковым контроллерам. Таким образом, если вы добавите дополнительные сетевые адаптеры, тогда все диски получат увеличенный слот PCI, чтобы освободить место для этого дополнительного сетевого адаптера при следующей перезагрузке.

Учитывая это, вам не следует полагаться на слоты PCI для идентификации устройств в OpenStack. Для дисков в идеале вы должны идентифицировать устройства по метке файловой системы или UUID, а для сетевых карт использовать их MAC-адрес для идентификации.