Короткий ответ

Импорт — не «указать папку и Пуск». Сначала Compare-VM, затем выбор: Register на месте, Restore (копия в дефолтные пути) или Copy. Для второй копии всегда -GenerateNewId, иначе столкнётесь с существующей VM-APP01 и тем же GUID дисков/ACL. Поправьте SwitchName на CorpNet, пути к VHDX, не импортируйте поверх живого прод-файла на C:\ClusterStorage\Volume1.

Не Register каталог экспорта с того же CSV, где уже крутится оригинал, без Copy.

Симптомы и как отличить

Типичная картина:

  • мастер показывает красные incompatibilities;
  • «A virtual machine with this name already exists»;
  • после «успеха» VM Off, диск не найден;
  • сеть Unnamed / не CorpNet.

Отличия:

Что видноКуда
Нечем импортироватьэкспорт
Диск есть, не монтируетсяVHDX
Импорт прошёл, не стартуетстарт
Стартовала без сетисеть

Возможные причины

  1. Не совместили коммутаторы, процессор, версию конфига.
  2. Тот же GUID уже в Hyper-V / кластере.
  3. Пути из XML абсолютные C:\... со старого сервера.
  4. Импорт на 2019 конфига с 2025 (версия выше).
  5. Недостаточно прав на файлы экспорта (Read).
  6. Checkpoint в экспорте, цепочка порвана при копировании «только vhdx».
  7. Secure Boot / Generation не совпали с ожиданиями, но это вскроется на старте.

Диагностика

$vmx = Get-ChildItem 'D:\Export\VM-APP01' -Recurse -Filter *.vmcx | Select-Object -First 1
$report = Compare-VM -Path $vmx.DirectoryName
$report
$report.Incompatibilities | Format-Table Message, MessageId, Source

Если структура экспорта «Virtual Machines<guid>\»: -Path на папку VM, сверяйте Get-Help Compare-VM.

Get-VM | Format-Table Name, Id
Get-VMSwitch | Format-Table Name, Id
Get-ClusterGroup -ErrorAction SilentlyContinue | Format-Table Name
Test-Path 'D:\Export\VM-APP01\Virtual Hard Disks'
Get-ChildItem 'D:\Export\VM-APP01' -Recurse -Include *.vhdx,*.avhdx,*.vmcx | Select-Object FullName, Length

Версия хоста: Get-VMHost | Format-List LogicalProcessorCount; поддержка Version VM — не импортируйте слишком новый конфиг на старый узел.

Решение

Сценарий A. Есть incompatibilities — правим отчёт

Типично: Virtual switch. Создайте CorpNet или:

$report = Compare-VM -Path 'D:\Export\VM-APP01\Virtual Machines'
$report.Incompatibilities | Where-Object MessageId -eq 33012  # пример; ориентируйтесь на текст Switch
# Практика: Connect после импорта, если Compare даёт reconnect

Надёжный путь: импорт, затем

Connect-VMNetworkAdapter -VMName 'VM-APP01' -SwitchName 'CorpNet'

Имя VM после GenerateNewId лучше сразу задать VM-APP01-LAB, не прод-имя.

Сценарий B. Копия для лаборатории

Import-VM -Path 'D:\Export\VM-APP01\Virtual Machines' -Copy -GenerateNewId -VhdDestinationPath 'D:\Hyper-V\VM-APP01-LAB' -VirtualMachinePath 'D:\Hyper-V\VM-APP01-LAB'

Проверьте help вашей ОС: параметры Path/VhdDestinationPath обязательны при Copy. Не целите VhdDestinationPath в C:\ClusterStorage\Volume1\VM-APP01 продакшена.

Сценарий C. Перенос на новый хост «это та же VM»

Restore/Register без GenerateNewId, оригинал на старом хосте выключен и удалён из Hyper-V (не файлы, пока не проверили старт). Один GUID — один кластер.

Сценарий D. Версия конфигурации слишком новая

Импортируйте на хост того же или более нового поколения. Понижение XML вручную не поддерживается.

Сценарий E. Только VHDX, без экспорта

Новая VM + Attach диск. Это не Import. Пропишите Generation, Secure Boot, памяти вручную. Sysprep если клон.

После импорта ACL диск получит новый GUID — норма.

Compare-VM не проверяет целостность vhdx. Test-VHD по каждому диску архива до Import. Нулевой файл после оборванного копирования даст «успешный» импорт и смерть на Start.

Не Register «на USB»: скопируйте дерево на фиксированный диск HV01, затем Import. Отвал USB оставит VMMS с мёртвыми Path.

После Copy смените имя компьютера и IP до включения копии в VLAN прода. Duplicate в AD/DHCP — отдельный инцидент. Isolated VLAN или Sysprep.

Get-VM | Format-Table Name, Version, Id — новый Id обязателен для копии. Update-VMVersion односторонний: только на копии, не на последнем экземпляре прода.

Если импорт на кластер: диски сразу в C:\ClusterStorage\Volume1\..., затем Configure Role. Import в локальный D:\ + «потом перенесём» забывают навсегда.

Как проверить, что проблема устранена

Get-VM -Name 'VM-APP01-LAB' | Format-List Name, Id, State, Version, Path
Get-VMHardDiskDrive -VMName 'VM-APP01-LAB' | Format-Table Path
Get-VHD -Path (Get-VMHardDiskDrive -VMName 'VM-APP01-LAB').Path
Start-VM -Name 'VM-APP01-LAB'
Get-VMNetworkAdapter -VMName 'VM-APP01-LAB'

Id другой, чем у прода. Path не совпадает с прод-CSV. Гость стартует, NIC на CorpNet. В госте при клоне — новый SID/имя компьютера по вашей процедуре, иначе конфликт в AD.

Compare-VM после фикса incompatibilities без красных строк.

Если не помогло

  • Старт падает: статья VM не запускается (Saved state из экспорта Running VM иногда не подходит цели).
  • Диск 0x80070005: ACL/lock.
  • Кластер не видит VM: добавьте роль отдельно, диски на CSV.
  • Dual MAC в сети: смените MAC на копии.

Профилактика

  • Импорт копий всегда GenerateNewId + отдельный каталог.
  • Имена vSwitch стандартизировать до переезда.
  • Не хранить единственную копию как «Register на USB».
  • Документ версии конфига VM vs ОС хоста.
  • Health целевого узла до массового импорта.
  • Не импортируйте в рабочий CSV, не сверив, что Path не пересекается с Running VM. Get-VMHardDiskDrive -VMName * | Where-Object Path -like '*VM-APP01*'.
  • После GenerateNewId сразу переименуйте VM в инвентаре, иначе через месяц две «VM-APP01» разъедутся в мониторинге.

FAQ

Register vs Restore vs Copy?

Register — файлы уже на месте. Restore — в default folders хоста. Copy — новые файлы. Для «привезли архив» обычно Copy.

Можно ли два раза импортировать один экспорт?

Да, с GenerateNewId каждый раз. Без нового ID — конфликт.

Импорт в кластер сразу HA?

Import на узел, диски на CSV, затем Configure Role. Не ожидайте, что мастер сам сделает clustered.

Checkpoint в импорте обязательны?

Если avhdx не скопировали — не импортируйте дерево. Слейте до экспорта.

Compare-VM без Incompatibilities, Start всё равно fail?

Сравнивают конфиг, не содержимое гостя (boot, лицензия). Дальше журналы Worker.

Нужно ли менять MAC всегда?

Для копии в той же L2 — да (статический MAC + DHCP). Для «та же VM на новом железе» — можно сохранить.