Hyper v принудительно выключить машину
Как остановить зависшую виртуальную машину на Hyper-V?
Если ваша виртуальная машина, запущенная на хосте Hyper-V зависла по каким-то причинам, перестала отвечать, и не реагирует на кнопки включения, выключения, перезагрузки в консоли Hyper-V, единственный быстрый способ принудительно остановить такую машину — завершить процесс этой ВМ в хостовой ОС. Покажем, как принудительно перезагрузить ВМ в Hyper-V на Windows Server 2016/2019 без перезагрузки всего сервера и запущенных ВМ (если у вас нет HA кластера Hyper-V и Live-Migration).
Виртуальная машина Hyper-V зависла в статусе Stopping, Starting
Итак, предположим, что одна из ВМ на Hyper-V зависла в состоянии Stopping (Stopping-Critical)/ Starting (Starting 10%).
Гостевая ОС перестала отвечать, а кнопки “Turn Off”,” Shut Down” и” Reset” в консоли Hyper-V Manager стали недоступны либо при нажатии возвращают ошибку:
Итак, предположим, что одна из ВМ на Hyper-V зависла, гостевая ОС перестала отвечать, а кнопки «Turn Off», «Shut Down» и «Reset» в консоли Hyper-V Manager стали недоступны либо при нажатии возвращают ошибку:
Ошибка Hyper-V: Connecting to Virtual Machine Management service
Если ваш Hyper-V не отображает виртуальные машины в консоли Hyper-V Manager, возвращая ошибку «Connecting to Virtual Machine Management service«, вам нужно перезапустить процесс vmms.exe (Hyper-V Virtual Machine Management service). Это безопасная операция и не прервет работу запушенных виртуальных машин. Проще всего перезапустить процесс vmms.exe через службу vmms и через консоль services.msc или командой:
Завершение процесса зависшей ВМ с помощью Task Manager
Единственный способ принудительно выключить/ перезапустить такую зависшую виртуальную машину без перезагрузки всего хостового сервера Hyper-V – завершить ее рабочий процесс на гостевой ОС. Все ВМ на хосте Hyper-V запускаются с помощью процесса vmwp.exe (Virtual Machine Worker Process). Для поиска процесса нужно узнать GUID виртуальной машины.
Определить GUID ВМ можно через консоль управления Hyper—V Manager. Откройте настройки сервера (Hyper—V Settings). В разделе Server указано каталог, в котором хранятся конфигурационные файлов ВМ (в нашем примере D:\VMStore).
Откройте этот каталог в File Explorer и найдите каталог с именем зависшей виртуальной машины. Скопируйте GUID, который указан в имени конфигурационного файла ВМ с расширением *.vmcx.
Теперь нужно запустить диспетчер задач (Task Manager) и перейти на вкладку Details. Все виртуальные машины запускаются в рамках собственного экземпляра процесса vmwp.exe. Чтобы определить какой процесс за какую ВМ отвечает, нам нужен полученный ранее GUID зависшей ВМ. Найдите процесс vmwp.exe, у которого в столбце User name указан GUID вашей ВМ. Завершите данный процесс (End Task).
Виртуальная машина будет принудительно остановлена. Теперь вы сможете делать с ней все что угодно.
Сбросить зависшую ВМ на Hyper-V VM с помощью PowerShell
Гораздо проще найти и завершить процесс зависшей виртуальной машины с помощью PowerShell. Запустите консоль PowerShell с правами администратора (учетная запись должна состоять в локальной группе Hyper-V administrators).
В этом случае также нужно завершить процесс ВМ по ее ID. Можно получить GUID ВМ с по ее имени. Например, для ВМ с именем SVM-GUARDEDHOST1, выполните команду:
$VMGUID = (Get-VM «SVM-GUARDEDHOST1»).ID
Если вы не хотите набирать полное имя ВМ, можете вывести список всех ВМ, зарегистрированных на данном хосте Hyper-V:
Get-VM | Select Name, Id
Скопируйте GUID нужной ВМ из полученного списка.
Теперь нужно найди идентификатор процесса (PID) ‘vmwp.exe’ для вашего VMGUID:
Затем с помощью команды Stop-Process нужно принудительно завершить этот процесс:
Stop-Process ($VMWMProc.ProcessId) –Force
Вот так несложно можно принудительно завершить рабочий процесс подвисшей виртуальной машины Hyper-V.
Hyper-V: Не удалось изменить состояние виртуальной машины
Иногда бывает, что даже после завершения зависшего процесса вы не можете включить ВМ и она зависает в статусе Starting с ошибкой:
В этом случае проверьте следующие варианты:
Stop-VM
Shuts down, turns off, or saves a virtual machine.
Syntax
Description
The Stop-VM cmdlet shuts down, turns off, or saves a virtual machine.
Examples
Example 1
Shuts down virtual machine TestVM through the guest operating system.
Example 2
Shuts down virtual machine TestVM through the guest operating system, regardless of any unsaved application data. Hyper-V gives the guest five minutes to save data, then forces a shutdown. This shutdown can result in loss of unsaved data.
Example 3
Turns off virtual machine TestVM. This operation is equivalent to disconnecting the power from the virtual machine, and can result in loss of unsaved data.
Parameters
Runs the cmdlet as a background job.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Runs the cmdlet in a remote session or on a remote computer. Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet. The default is the current session on the local computer.
Type: | CimSession [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies one or more Hyper-V hosts on which a virtual machine is to be shut down. NetBIOS names, IP addresses, and fully qualified domain names are allowable. The default is the local computer. Use localhost or a dot (.) to specify the local computer explicitly.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies one or more user accounts that have permission to perform this action. The default is the current user.
Type: | PSCredential [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies that the shutdown of the virtual machine is to be forced. If the virtual machine has applications with unsaved data, the virtual machine has five minutes to save data and shut down. If the virtual machine is locked, it is shut down immediately.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the name of the virtual machine to be shut down.
Type: | String [ ] |
Aliases: | VMName |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Specifies that a Microsoft.HyperV.PowerShell.VirtualMachine object is to be passed through to the pipeline representing the virtual machine to be shut down.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies that the virtual machine is to be saved.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies that the virtual machine is to be turned off.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the virtual machine to be shut down.
Type: | VirtualMachine [ ] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Shows what would happen if the cmdlet runs. The cmdlet is not run.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Outputs
None
Microsoft.HyperV.PowerShell.VirtualMachine
If -PassThru is specified.
Hyper-V: настройка автоматического запуска и порядка загрузки виртуальных машин
В гипервизоре Hyper-V, как и в VMWare ESXi, вы можете настроить параметры автоматического запуска и выключения виртуальных машин при включении/перезагрузке хостовой ОС. В этой статье мы покажем, как настроить действия, которые должен выполнить хост Hyper-V с виртуальными машинами на нем при включении или корректном выключении, а также как задать порядок загрузки ВМ.
Как настроить автоматический запуск/выключение виртуальных машин в Hyper-V?
По умолчанию сервер Hyper-V при перезагрузке сохраняет состояние виртуальных машин на нем. Т.е. если ВМ была запущена до перезагрузки, Hyper-V запустит ее автоматически. Настройки автозапуска задаются персонально для каждой ВМ.
Для последней опции доступен еще один параметр – Startup Delay. Здесь можно указать задержку запуска для данной виртуальной машины (в секундах). С помощью такой задержки вы можете управлять порядком запуска виртуальных машин (например, включать контроллер домена перед запуском ВМ с SQL Server), а также снизить нагрузку на систему хранения, вызванную одновременным запуском множетсва ВМ).
Также в разделе Automatic Stop Action можете задать для виртуальных машин действие, которое нужно выполнить при выключении (перезагрузке) хоста.
Вы можете проверить и изменить настройки автозапуска и выключения виртуальных машин с помощью PowerShell.
Выведем текущие настройки запуска и остановки всех ВМ:
Get-VM –VMname * | Select-Object VMname,AutomaticStartAction,AutomaticStartDelay,AutomaticStopAction
Вы можете изменить настройки автозапуска для ВМ с помощью опции AutomaticStartAction. Возможные значения (Nothing, StartIfRunning, Start).
Get-VM –VMname win10 | Set-VM –AutomaticStartAction Start
Чтобы установить задержку запуска для всех ВМ, кроме одной (например контролера домена с FSMO ролями):
Get-VM –VMname * | Where-object –FilterScript <$_.vmname –notlike “msk-dc*”>| Set-VM –AutomaticStartDelay 90
С помощью параметра –AutomaticStopAction соотвественно можно задать параметры выключения ВМ (Save, TurnOff,ShutDown)
Порядок загрузки (запуска) виртуальных машин в Hyper-V
При включении отдельностоящего хоста Hyper-V администратору необходимо управлять порядком запуска виртуальных машин. Например, вам нужно чтобы ВМ с Exchange загружалась только после загрузки контроллера домена, а сервер с приложением должен стартовать после db сервера. В Hyper-V нет встроенных инструментов управления порядком запуска виртуальных машин, кроме параметра задержки старта (AutomaticStartDelay).
В самых простых случаях вы можете настроить порядок загрузки ВМ, задав для них разные задержки запуска:
Get-VM –VMname dc01| Set-VM –AutomaticStartDelay 0
Get-VM –VMname exchange, db01 | Set-VM –AutomaticStartDelay 90
Get-VM –VMname rds01,app01 | Set-VM –AutomaticStartDelay 180
Другой вариант – вы можете стартовать ВМ по очереди с помощью стартап скрипта PowerShell. В таком скрипте можно задать задержку перед запуском следующей ВМ и выполнить дополнительные проверки доступности приложения или сервиса в ВМ (что убедиться что нужно приложение или служба запустились). Также для удобства можно объединить несколько ВМ в одну группу с помощью меток. Например, я задал такие метки для ВМ
Следующий PowerShell скрипт запускает виртуальные машины в определённом порядке, выполняя дополнительные проверки доступности определенных служб (TCP портов) в ВМ с помощью PowerShell командлета Test-NetConnection:
Осталось добавить этот PowerShell скрипт в автозагрузку или запускать через задание планировщика (нужно не забыть отключить автоматический запуск всех ВМ, которые запускаются этим скриптом). Не забывайте, что в Windows запуск PowerShell скриптов по-умолчанию ограничен. Если нужно, подпишите этот PS1 скрипт или измените политику запуска PowerShell скриптов.
Как исправить зависание виртуальной машины Hyper-V в состоянии остановки
Использование виртуальных машин в последнее время резко возросло. Это естественно, если принять во внимание их преимущества. Hyper-V — это собственное программное обеспечение для виртуализации Windows, которое позволяет создавать виртуальные машины в вашей системе Windows. Хотя он не предоставляет столько функций по сравнению с VMware или VirtualBox, он по-прежнему используется довольно часто. Как и у любого другого программного обеспечения, у него есть свои проблемы. Одна из проблем, с которой часто сталкиваются различные пользователи, — это застревание виртуальной машины в состоянии остановки.
Когда это происходит, виртуальная машина отказывается останавливаться, и, следовательно, ее нельзя запустить, чего вы не хотите. Это может произойти по ряду причин, которые мы упомянем ниже. Однако прежде чем мы начнем, важно упомянуть, что иногда проблема просто вызвана устаревшим хост-компьютером Windows. Поэтому, прежде чем начать работу с этой статьей, убедитесь, что вы установили все доступные обновления Windows. С учетом сказанного, давайте начнем.
Теперь, когда мы закончили с возможными причинами проблемы, давайте начнем с методов, с помощью которых вы можете снова восстановить свою виртуальную машину.
Убивая, мы не имеем в виду полностью избавиться от виртуальной машины. Скорее, это означает завершение процесса зависшей виртуальной машины, чтобы вы могли снова запустить ее в обычном режиме. Это довольно простой процесс, если у вас есть одна виртуальная машина, работающая на хост-машине. Если вы это сделаете, вы можете пропустить некоторые из шагов, которые мы собираемся перечислить ниже, которые помогают найти GUID проблемной виртуальной машины.
Для этого следуйте инструкциям ниже:
Метод 2: изменить параметры питания
Как оказалось, параметры питания вашей хост-машины с Windows также могут влиять на состояние ваших виртуальных машин Hyper-V. Один из столкнувшихся с той же проблемой сказал, что изменение дисплея, чтобы никогда не выключаться, решило проблему для них. Таким образом, выстрел стоит того. Вот как это сделать:
Метод 3: отключить RRAS
Неправильно настроенная служба удаленного доступа также может стать причиной проблемы. Как мы уже упоминали ранее, ваш сетевой интерфейс может нарушать работу службы, что приводит к зависанию виртуальной машины. Таким образом, простой способ исправить это — отключить службу маршрутизации и удаленного доступа. Вот как это сделать:
Метод 4: перезагрузите хост-машину
В большинстве случаев проблему как таковую можно легко решить, просто повторно разместив хост-машину. После перезагрузки хост-машины виртуальная машина очистится и запустится нормально. Кроме того, убедитесь, что ваша система обновлена, поскольку проблема также может быть вызвана ошибкой Windows, которая часто исправляется в последующих обновлениях.
Виртуализация vSphere, Hyper-V, Xen и Red Hat
Более 5540 заметок о виртуализации, виртуальных машинах VMware, Microsoft и Xen, а также Kubernetes
VM Guru / Articles / Автоматический запуск и выключение виртуальных машин на платформе Microsoft Hyper-V. |
|