Короткий ответ
Не жмите 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/vSwitch | VM потеряла сеть |
| Ошибка на конкретном VHDX | lock/ACL/формат | VHDX не подключается |
| Все VM на узле, CSV Offline | хранилище кластера | CSV недоступен |
| Хост сам нездоровый | RAM/диск/роль | состояние хоста |
Возможные причины
От частых к редким:
- VHDX/AVHDX недоступен: ACL, lock backup, путь на мёртвом CSV, missing parent differencing.
- На томе хоста или CSV нет места под Saved State, smart paging или рост dynamic VHDX.
- Повреждённый Saved State после жёсткого выключения
HV01. - Недостаточно RAM с учётом Dynamic Memory других гостей на узле.
- vSwitch из конфига удалён — старт падает на синтетическом NIC.
- Secure Boot / Generation 2: гость без подписи загрузчика после правки VHDX.
- Версия конфигурации VM выше, чем роль Hyper-V на этом узле (после переноса с 2025 на 2019).
- Антивирус хоста открыл
.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, SizeState : 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 / файл занят
- Кто держит VHDX: backup job, другой узел кластера,
Mount-VHD, антивирус. - ACL: учётка
NT VIRTUAL MACHINE\<GUID VM>иNT VIRTUAL MACHINE\Virtual Machinesдолжны иметь права на файл и каталог. Не «Everyone Full» на CSV. - После снятия 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 не поднимается
- Снимите копию каталога
*.vsv,*.binрядом с конфигом. - Только после копии: в 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 на чужом узле.