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

Не жмите Start повторно и не делайте Delete Saved State, пока не сняли код ошибки, путь диска и состояние конфигурации. На HV01 для VM-APP01 сначала Get-VM, затем журнал Microsoft-Windows-Hyper-V-Worker-Admin (часто Event ID 14100) и Get-VHD по каждому контроллеру. Большинство «не стартует» — это Access Denied на VHDX, нет места, битый Saved State, CSV в redirected/offline или цепочка AVHDX без родителя, а не «сломался Hyper-V».

Кластерная VM стартует как clustered role: смотрите владельца группы и CSV C:\ClusterStorage\Volume1, не только GUI Hyper-V на одном узле.

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

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

  • в диспетчере Hyper-V кнопка Пуск серая или сразу «failed to change state»;
  • Get-VM VM-APP01 показывает Off, Saved, Paused или Failed;
  • гость не доходит до загрузчика, консоль VMConnect чёрная;
  • после патча хоста часть VM в Saved и не выходят.

Отличия:

Что видноСкорее не «VM не стартует»Куда
VM Running, нет pingсеть vNIC/vSwitchVM потеряла сеть
Ошибка на конкретном VHDXlock/ACL/форматVHDX не подключается
Все VM на узле, CSV Offlineхранилище кластераCSV недоступен
Хост сам нездоровыйRAM/диск/рольсостояние хоста

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

От частых к редким:

  1. VHDX/AVHDX недоступен: ACL, lock backup, путь на мёртвом CSV, missing parent differencing.
  2. На томе хоста или CSV нет места под Saved State, smart paging или рост dynamic VHDX.
  3. Повреждённый Saved State после жёсткого выключения HV01.
  4. Недостаточно RAM с учётом Dynamic Memory других гостей на узле.
  5. vSwitch из конфига удалён — старт падает на синтетическом NIC.
  6. Secure Boot / Generation 2: гость без подписи загрузчика после правки VHDX.
  7. Версия конфигурации VM выше, чем роль Hyper-V на этом узле (после переноса с 2025 на 2019).
  8. Антивирус хоста открыл .vhdx без исключения.

Диагностика

Работайте на узле-владельце. Плейсхолдеры: HV01, VM-APP01, коммутатор CorpNet, CSV C:\ClusterStorage\Volume1.

1. Состояние VM и хоста

Get-VM -Name 'VM-APP01' | Format-List Name, State, Status, Uptime, Path, ConfigurationLocation, Version, Generation, MemoryAssigned, MemoryDemand
Get-VMHost | Format-List ComputerName, LogicalProcessorCount, MemoryCapacity, VirtualHardDiskPath, VirtualMachinePath
Get-Volume | Format-Table DriveLetter, FileSystemLabel, FileSystem, SizeRemaining, Size

State : Saved и нулевой MemoryAssigned — это не «висит», это снимок памяти на диске. Пока не прочитаете ошибку старта, не удаляйте .vsv/.bin.

2. Журнал Worker и VMMS

Get-WinEvent -FilterHashtable @{
  LogName   = 'Microsoft-Windows-Hyper-V-Worker-Admin'
  StartTime = (Get-Date).AddHours(-6)
} | Where-Object { $_.Message -match 'VM-APP01' } |
  Select-Object -First 20 TimeCreated, Id, LevelDisplayName, Message
Get-WinEvent -FilterHashtable @{
  LogName   = 'Microsoft-Windows-Hyper-V-VMMS-Admin'
  StartTime = (Get-Date).AddHours(-6)
} | Select-Object -First 15 TimeCreated, Id, Message

Фиксируйте Event ID 14100 и вложенный HRESULT. Сохраните вывод в каталог заявки, не скрин GUI.

3. Диски VM

Get-VMHardDiskDrive -VMName 'VM-APP01' |
  Format-Table VMName, ControllerType, ControllerNumber, ControllerLocation, Path
Get-VMHardDiskDrive -VMName 'VM-APP01' | ForEach-Object {
  Get-VHD -Path $_.Path | Format-List Path, VhdFormat, VhdType, FileSize, Size, ParentPath, Attached
}

Если ParentPath указывает на отсутствующий файл — это цепочка checkpoint, не «битый VHDX». Тогда checkpoint и AVHDX, а не Start-VM в цикле.

4. Кластер и коммутатор

Get-ClusterGroup -Name 'VM-APP01' -ErrorAction SilentlyContinue |
  Format-List Name, State, OwnerNode, GroupType
Get-ClusterSharedVolume | Format-Table Name, State, OwnerNode, FriendlyVolumeName
Get-VMNetworkAdapter -VMName 'VM-APP01' | Format-Table VMName, Name, SwitchName, Connected, MacAddress
Get-VMSwitch -Name 'CorpNet' -ErrorAction SilentlyContinue

Нет CorpNet — сначала виртуальный коммутатор, иначе старт снова упадёт на адаптере.

5. Процессор, Secure Boot, интеграции

Get-VMProcessor -VMName 'VM-APP01' | Format-List Count, CompatibilityForMigrationEnabled, ExposeVirtualizationExtensions
Get-VMFirmware -VMName 'VM-APP01' -ErrorAction SilentlyContinue |
  Format-List SecureBoot, SecureBootTemplate
Get-VMIntegrationService -VMName 'VM-APP01'

Решение

Сценарий A. Access Denied / файл занят

  1. Кто держит VHDX: backup job, другой узел кластера, Mount-VHD, антивирус.
  2. ACL: учётка NT VIRTUAL MACHINE\<GUID VM> и NT VIRTUAL MACHINE\Virtual Machines должны иметь права на файл и каталог. Не «Everyone Full» на CSV.
  3. После снятия lock:
Start-VM -Name 'VM-APP01'

Если VM clustered:

Start-ClusterGroup -Name 'VM-APP01'

Сценарий B. Нет места

Освободите том без удаления C:\ClusterStorage\Volume1\<VM-APP01>\*.vhdx. Кандидаты: старые export, ISO, дампы хоста, чужие AVHDX после забытых checkpoint. Затем повторный Start-VM. Dynamic диск, который упёрся в max, — отдельная тема роста VHDX, не «ещё раз Пуск».

Сценарий C. Saved State не поднимается

  1. Снимите копию каталога *.vsv, *.bin рядом с конфигом.
  2. Только после копии: в Hyper-V Manager Delete Saved State либо:
Remove-VMSavedState -VMName 'VM-APP01'
Start-VM -Name 'VM-APP01'

Гость стартует как после reset. Проверьте ФС и СУБД внутри.

Сценарий D. Не хватает RAM

Посмотрите MemoryDemand соседних VM и Startup RAM VM-APP01. Временно уменьшите Startup у тестовых гостей или перенесите VM на другой узел, не выключая прод «чтобы хватило». Dynamic Memory с завышенным Maximum на десяти VM легко съедает хост — см. отдельный разбор Dynamic Memory.

Сценарий E. CSV не Online на этом узле

Не Stop-ClusterResource «на всякий случай». Верните том в Online/Direct, затем стартуйте роль. Слепой Offline CSV роняет все VM на Volume1.

Сценарий F. Версия конфигурации и Secure Boot

На 2019 нельзя запустить конфиг, созданный/обновлённый под более новую версию, без совместимого хоста. Не понижайте XML руками. Secure Boot: для Linux-шаблона смените шаблон на Microsoft UEFI Certificate Authority, не отключайте Secure Boot «навсегда» без причины.

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

Get-VM -Name 'VM-APP01' | Format-List State, Status, Uptime, Heartbeat
Get-VHD -Path 'C:\ClusterStorage\Volume1\VM-APP01\VM-APP01.vhdx' | Format-List Attached, FileSize
Get-VMIntegrationService -VMName 'VM-APP01' | Format-Table Name, Enabled, PrimaryStatusDescription

Ожидание: State : Running, Heartbeat OK (если IC в госте живы), диск Attached. Функционально: VMConnect или RDP, гость доходит до логона, не цикл reboot. Для кластера — Get-ClusterGroup VM-APP01 в Online на ожидаемом OwnerNode.

Повторите Start-VM не должен быть нужен. Журнал Worker за последние минуты без новой 14100 по этой VM.

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

  • Старт есть, сразу Off: смотрите boot order и Generation, не Hyper-V «сломался».
  • Running без Heartbeat: Integration Services, гостевая ФС.
  • Ошибка только на одном узле кластера: CPU compatibility, путь CSV, права на этом узле.
  • После backup VM в Saved: зависание при backup.
  • Цепочка .avhdx без merge: не удаляйте файлы из Explorer.

Не ставьте VM в production с отключённым антивирусом хоста «чтобы стартанула». Исключения на каталог VHDX — да; выключение Defender навсегда — нет.

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

  • Мониторинг свободного места CSV и тома Saved State.
  • Исключения антивируса на C:\ClusterStorage\ и каталоги VM по гайду Microsoft, не на весь диск C:.
  • Регулярный health: проверка хоста.
  • Не копить production checkpoint.
  • Перед патчем хоста — Live Migration или Shutdown гостей по плану, не Saved State «на ночь» без места.

FAQ

Можно ли сразу Delete Saved State?

Только если есть копия/backup и вы приняли потерю RAM-состояния. Для файлового сервера это аварийный reset.

Start из GUI падает, из PowerShell нет?

Часто другой узел или другая учётка. Сравните Get-VM на владельце кластера и UAC/CredSSP.

Нужно ли пересоздать VM, сохранив VHDX?

Нет как первый шаг. Пересоздание меняет GUID, ACL NT VIRTUAL MACHINE\<GUID> и clustered role. Сначала диск и журнал.

VM Generation 1 с IDE не стартует после переноса на CSV?

Проверьте, что путь короткий, диск не read-only, и контроллер указывает на существующий файл. Generation 1 IDE не умеет часть сценариев, которые SCSI/Generation 2 переносят спокойно.

Ошибка 0x800705AA при живой RAM на хосте?

Это не всегда «мало RAM». Бывает исчерпание других ресурсов раздела (вкладки, VA). Смотрите Task Manager Hyper-V и число VM на узле, не только «свободно 8 ГБ».

Кластер показывает Online, Hyper-V — Off?

Роль и вычислительная VM разъехались. Чините через Failover Cluster Manager / Get-ClusterGroup, не вторым Start-VM на чужом узле.