Когда виртуальные машины Hyper-V не могут импортировать

Опубликовано: 16 Апреля, 2023
Когда виртуальные машины Hyper-V не могут импортировать

Microsoft позволяет импортировать виртуальные машины в Hyper-V с помощью диспетчера Hyper-V или командлета PowerShell Import-VM. Эта функция существует уже давно, и по моему опыту процесс импорта виртуальной машины обычно проходит довольно гладко. Однако иногда процесс импорта может завершиться сбоем, и вы можете не получить много информации о том, почему произошел сбой. К счастью, Microsoft предоставляет инструмент, который может помочь вам устранить проблему.

Предпочтительным инструментом для устранения неполадок с импортом виртуальных машин является командлет PowerShell с именем Compare-VM. Командлет Compare-VM довольно прост. Его задача — оценить, способен ли конкретный хост Hyper-V размещать виртуальную машину, которую вы хотите импортировать. Благодаря этой функциональности командлет Compare-VM идеально подходит для устранения проблем с импортом виртуальных машин.

Compare-VM спешит на помощь

Командлет Compare-VM является одним из тех командлетов, которые поддерживают большое количество необязательных параметров, а синтаксис команды может быть довольно сложным. Тем не менее, использование командлета для базовой оценки виртуальной машины и хоста — простой процесс.

То, как вы будете использовать командлет в ситуации неудачного импорта, на самом деле зависит только от того, находится ли виртуальная машина в настоящее время на узле Hyper-V или нет.

Если вы ранее экспортировали виртуальную машину, а теперь вам нужно импортировать ее в Hyper-V, вам потребуется найти XML-файл, описывающий виртуальную машину (Windows Server 2016 Hyper-V отказался от XML-файла). Например, если вы посмотрите на изображение ниже, то увидите, что в моем случае XML-файл называется 047e8a12-50e2-446c-b42f-b834655449da.xml, а файл существует по адресу f:VMsMirageVirtual Machines. Путь и имя файла будут другими для вашей виртуальной машины. На рисунке я открыл XML-файл, чтобы вы могли видеть тип содержащейся в нем информации о конфигурации.

Если бы я хотел запустить командлет Compare-VM для этой конкретной ВМ, команда выглядела бы примерно так:

Compare-VM -Path 'F:vmsMirageVirtual Machines47e8a12-50e2-446c-b42f-b834655449da.xml'

С другой стороны, если бы виртуальная машина Mirage уже находилась на хосте Hyper-V, и я хотел бы импортировать ее на другой хост Hyper-V, мне нужно было бы только указать командлету Compare-VM имя виртуальной машины. и имя хоста, на который я хочу импортировать виртуальную машину. Например, если бы я хотел импортировать виртуальную машину с именем Mirage на хост Hyper-V с именем Hyper-V-4, я бы использовал эту команду:

Compare-VM -Name Mirage -DestinationHost Hyper-V-4

Стоит отметить, что эта команда предполагает, что вы выполняете команду с хоста Hyper-V, содержащего виртуальную машину. Также предполагается, что сервер может разрешить DNS-имя узла назначения и что у вас есть разрешение на доступ к узлу назначения.

Поскольку мы говорим о командлете Compare-VM с точки зрения попытки устранить сбой импорта виртуальной машины, вы, вероятно, ожидаете, что командлет Compare-VM выдаст какую-то ошибку, и это действительно так. Если вы посмотрите на рисунок ниже, то увидите, что произошло, когда я запустил командлет Compare-VM на одном из своих хостов Hyper-V. Вы также можете видеть, что раздел «Несовместимости» содержит ряд числовых кодов ошибок.

Итак, теперь у нас есть ряд кодов, которые отражают причину сбоя процесса импорта виртуальной машины, но, конечно, коды сами по себе бессмысленны. Итак, следующая задача — выяснить, что означает каждый из кодов.

Если вы похожи на меня, то вашим первым побуждением может быть попытка найти коды ошибок в Интернете. На самом деле, я пытался сделать именно это, когда готовился к написанию этой статьи, потому что надеялся найти какой-то основной список кодов несовместимости Compare-VM. К сожалению, Microsoft не предоставляет такого списка. Однако, если вы знаете о таком списке, опубликуйте ссылку в разделе комментариев под этой статьей.

Тем временем, поскольку, похоже, нет доступного основного списка кодов, мы должны получить описание кодов ошибок другим способом. И снова PowerShell может нам помочь. Хитрость заключается в том, чтобы сопоставить командлет Compare-VM с переменной. Сделав это, мы можем использовать переменную для извлечения информации о кодах ошибок.

Для целей этой статьи я собираюсь создать переменную с именем $Compare. Вы можете использовать любое имя переменной, которое вам нравится, но я буду использовать именно это имя. Вот команда, которую я буду использовать для заполнения переменной $Compare:

$Compare = Compare-VM -Name Mirage -DestinationHost Hyper-V-4

После выполнения команды вы можете убедиться, что переменная заполнена правильно, введя имя переменной в PowerShell. Например, если вы посмотрите на рисунок ниже, вы увидите, что ввод $Compare теперь дает тот же результат, что и прямой запуск командлета Compare-VM.

Изображение 14493
Теперь, если я хочу увидеть больше информации о кодах ошибок, я могу просто ввести имя переменной, затем точку и слово «Несовместимости». Пример вы можете увидеть на рисунке ниже.

Изображение 14494
Проблема с этим выводом, конечно, в том, что сообщение об ошибке усекается. Чтобы увидеть сообщение полностью, просто добавьте символ вертикальной черты и Select-Object Message | Флорида Теперь у нас есть ряд сообщений об ошибках, которые мы можем прочитать, как показано ниже.
Изображение 14495

Ошибка импорта Hyper-V: выясните основную причину

Как видите, есть ряд причин, которые могут привести к сбою импорта виртуальной машины. Однако с помощью командлета Compare-VM можно определить основные причины сбоя.