Проблема решена: когда Hyper-V не загружает только что созданную виртуальную машину
Недавно я попытался создать новую виртуальную машину на обычно надежном сервере Hyper-V, но получил сообщение об ошибке. В сообщении об ошибке, которое вы можете видеть на снимке экрана ниже, говорится, что у меня может не быть разрешения на создание виртуальной машины или что служба управления виртуальными машинами может быть не запущена.
Я сразу понял, что сообщение об ошибке вводит в заблуждение. У меня есть необходимые разрешения для создания виртуальной машины, и я убедился, что служба управления виртуальными машинами запущена. Кроме того, другие виртуальные машины на хосте, казалось, работали нормально.
После нескольких попыток создать виртуальную машину я заметил, что виртуальная машина на самом деле создается и что сбой происходит на одном из более поздних этапов процесса создания виртуальной машины. После еще нескольких проб и ошибок я обнаружил, что сбой происходил, когда Hyper-V пытался смонтировать файл ISO в виртуальный DVD-привод. Если вместо этого я выберу вариант установки операционной системы позже, то процесс создания виртуальной машины завершится успешно.
После создания виртуальной машины я зашел в настройки виртуальной машины, добавил виртуальный DVD-привод и сопоставил его с файлом ISO, содержащим операционную систему, которую я хотел установить. Все казалось прекрасным, пока я не попытался загрузить виртуальную машину. Виртуальная машина по существу игнорировала виртуальный DVD-привод и по умолчанию использовала загрузку PXE. Предполагая, что проблема должна быть связана с прошивкой виртуальной машины, я открыл окно настроек виртуальной машины в диспетчере Hyper-V и перешел на вкладку «Прошивка». Меня встретило простое сообщение о том, что загрузочные записи не настроены. Вы можете увидеть, как выглядит ошибка ниже.
Обычно на вкладке «Прошивка» перечислены доступные загрузочные записи, и вы можете выбрать, какую из них вы хотите использовать. Ниже, например, показан снимок экрана правильно работающей виртуальной машины, находящейся на том же хосте, где возникают проблемы.
Время запустить PowerShell
Поскольку диспетчер Hyper-V не позволял мне выбрать загрузочное устройство, я обратился к PowerShell. Командлет Get-VMFirmware перечисляет порядок загрузки указанной виртуальной машины. Как видно на следующем рисунке, моя проблемная виртуальная машина (WSUS) настроена на загрузку из сети. Напротив, функциональная виртуальная машина (PoseyLabs-DC) настроена на загрузку из файла.
Подумав, что для решения проблемы можно использовать командлет Set-VMFirmware, я ввел следующую команду:
Set-VMFirmware “WSUS” -BootOrder $vmDvdDrive, $vmHardDiskDrive
В данном случае WSUS — это имя моей виртуальной машины. Значения $VmDvdDrive получают DVD-привод виртуальной машины с помощью командлета Get-VmDVDDrive. Точно так же значение $VmHardDiskDrive связано с командлетом Get-VmHardDiskDrive.
В любом случае команда завершилась неудачно с сообщением о том, что указанное мной загрузочное устройство недействительно. На самом деле я запустил командлеты Get-VmDvdDrive и Get-VmHardDiskDrive как способ проверки дисков виртуальной машины, и эти команды были успешными, как показано ниже.
Следующим, что я попробовал, была разновидность команды Set-VMFirmware. Вместо указания порядка загрузки я попытался указать первое загрузочное устройство с помощью параметра FirstBootDevice. Хотя эта команда не вернула сообщение об ошибке, в конечном итоге она не оказала никакого влияния на виртуальную машину, как показано ниже.
В тот момент я был в растерянности относительно того, в чем может быть проблема. Я провел довольно много времени, просматривая журналы событий сервера в поисках подсказок относительно источника проблемы, но журналы событий ничем не помогли. Я также попробовал несколько других приемов, таких как перезапуск службы диспетчера виртуальных машин Hyper-V и использование утилиты BCDEdit. Однако ничего из этого не помогло мне решить проблему.
После нескольких разочаровывающих часов устранения неполадок я наткнулся на ветку сообщений, в которой кто-то предположил, что исправление, разработанное для того, чтобы сделать Hyper-V управляемым из Windows 10, ломает виртуальные машины поколения 2. Предлагаемое решение состояло в том, чтобы удалить и переустановить роль Hyper-V. Моя проблема не совсем соответствовала тому, что описывалось в ветке сообщений, но я все равно решил попробовать удалить и переустановить роль Hyper-V.
Одна проблема решена, другая проблема создана
Короче говоря, удаление и переустановка роли Hyper-V устранила одну проблему, но вызвала другую. Если вы посмотрите на скриншот ниже, то увидите, что после переустановки стал доступен порядок загрузки ВМ. Я, кстати, не пересоздавал виртуальную машину. Windows сохранила все мои виртуальные машины при удалении и переустановке роли.
Если вы внимательно посмотрите на приведенный выше снимок экрана, вы заметите, что сетевой адаптер указан как имеющий ошибку конфигурации. Причина, по которой это произошло, заключалась в том, что переустановка роли Hyper-V сломала мой виртуальный коммутатор. Чтобы решить эту проблему, я просто переименовал виртуальный коммутатор Hyper-V по умолчанию, чтобы он соответствовал имени моего виртуального коммутатора, которого больше не существовало после переустановки роли. К сожалению, мне пришлось подключить все свои виртуальные машины к недавно переименованному виртуальному коммутатору. Поскольку у меня было всего около дюжины виртуальных машин, я подумал об использовании Hyper-V Manager для этой задачи, но вместо этого решил использовать PowerShell. Поскольку мой виртуальный коммутатор называется My Virtual Switch, я использовал следующую команду:
Get-VM | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName “My Virtual Switch”
Если вы посмотрите на скриншот выше, вы увидите, что все мои виртуальные машины, кроме двух (которые я уже переподключил вручную), потеряли связь с виртуальным коммутатором. После выполнения показанной выше команды подключение было восстановлено.
Почему Hyper-V потерпел неудачу? Кто знает!
В конечном счете, я понятия не имею, почему Hyper-V вдруг потерял возможность загружать только что созданные виртуальные машины. Могу только предположить, что возможно было глючное обновление. В любом случае переустановка роли Hyper-V и повторное подключение виртуального коммутатора устранили мою проблему.