У гіпервізора Hyper-V, як і в VMWare ESXi, ви можете налаштувати параметри автоматичного запуску і виключення віртуальних машин при включенні / перезавантаженні хостовой ОС. У цій статті ми покажемо, як налаштувати дії, які повинен виконати хост Hyper-V з віртуальними машинами на ньому при включенні або коректному виключенні, а також як задати порядок завантаження ВМ.

  • Як налаштувати автоматичний запуск / вимикання віртуальних машин в Hyper-V?
  • Порядок завантаження (запуску) віртуальних машин в Hyper-V

Як налаштувати автоматичний запуск / вимикання віртуальних машин в Hyper-V?

За замовчуванням сервер Hyper-V при перезавантаженні зберігає стан віртуальних машин на ньому. Тобто якщо ВМ була запущена до перезавантаження, Hyper-V запустить її автоматично. Налаштування автозапуску задаються персонально для кожної ВМ.

Запустіть консоль Hyper-V, відкрийте властивості будь-ВМ і перейдіть в розділ Settings -> Дія автоматичного запуску. Доступно три опції управління автозапуском віртуальної машини:

  • Нічого – при завантаженні хоста віртуальна машина не запускається автоматично (не залежно від її стану до перезавантаження сервера);
  • Автоматично запускати, якщо він працював, коли служба зупинилася – ВМ буде автоматично запущена тільки якщо вона була включена до виключення хоста.
  • Завжди запускайте цю віртуальну машину автоматично – завжди включати дану віртуальну машину при завантаженні хоста Hyper-V.

Для останньої опції доступний ще один параметр – Затримка запуску. Тут можна вказати затримку запуску для даної віртуальної машини (в секундах). За допомогою такої затримки ви можете управляти порядком запуску віртуальних машин (наприклад, включати контролер домену перед запуском ВМ з SQL Server), а також знизити навантаження на систему зберігання, викликану одночасним запуском множетсва ВМ).

настройка автоматичного запуску віртуальних машин hyper-v

Що цікаво, в Windows Admin Center поки відсутні опції для управління автозавантаженням віртуальних машин Hyper-V.

Також в розділі Автоматична зупинка дії можете задати для віртуальних машин дія, яку потрібно виконати при виключенні (перезавантаження) хоста.

Тут маються на увазі не аварійні ситуації (відключення живлення, падіння в BSOD), а коректна перезавантаження хостовой ОС, коли у віртуальних машин є час щоб завершити роботу.

  • Збережіть стан віртуальної машини – зберігається повне стан віртуальної машини (включаючи пам’ять). При наступному запуску ця ВМ продовжить роботу з того ж місця. Тут потрібно мати на увазі, що на диску буде потрібно додаткове вільне місце для збереження оперативної пам’яті ВМ (* .BIN файли). Гостьова ОС при цьому не перезавантажується.
  • Вимкніть віртуальну машину – при завершенні роботи хоста Hyper-V така віртуальна машина просто вимикається (аналогія відключення живлення на фізичному комп’ютері). Стан ВМ не зберігається, гостьова ОС починає повноцінний цикл завантаження. У такому режимі є ризик отримати неконсістентние дані в додатках, запущених всередині ВМ;
  • Вимкніть гостьову операційну систему – виконується штатний вимикання гостьовий ОС через службу інтеграції Hyper-V (graceful shutdown). Всі запущені всередині ВМ додатки вимикаються штатно, ризик отримати неконсістентние дані мінімальний.

налаштувати дію з віртуальними машинами при виключенні

Ви можете перевірити і змінити налаштування автозапуску і виключення віртуальних машин за допомогою PowerShell.

Виведемо поточні настройки запуску і зупинки всіх ВМ:

Get-VM –VMname * | Select-Object VMname,AutomaticStartAction,AutomaticStartDelay,AutomaticStopAction

вивести налаштування запуску, виключення ВМ на хості Hyper-V через powershell (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. В такому скрипті можна задати затримку перед запуском наступної ВМ і виконати додаткові перевірки доступності додатки або сервісу в ВМ (що переконатися що потрібно додаток або служба запустилися). Також для зручності можна об’єднати кілька ВМ в одну групу за допомогою міток. Наприклад, я поставив такі мітки для ВМ

set-vm dc01,dc02 -Notes "Boot order 1"
set-vm exchange1, db01 -Notes "Boot order 2"
set-vm rds01,app01 -Notes "Boot order 3"

задати мітки віртуальним машинам hyper-v для управління порядком завантаження

Наступний PowerShell скрипт запускає віртуальні машини в певному порядку, виконуючи додаткові перевірки доступності певних служб (TCP портів) в ВМ за допомогою PowerShell командлет Test-NetConnection:

$VMtoStart = Get-VM | where notes -contains 'Boot order 1'
foreach ($cn in $VMtoStart)
{Start-VM $cn.name -asjob}
While (!(Test-NetConnection dc01 -Port 445 -WarningAction SilentlyContinue).tcpTestSucceeded ){
Start-Sleep 30
}
$VMtoStart = Get-VM | where notes -contains 'Boot order 2'
foreach ($cn in $VMtoStart)
{Start-VM $cn.name -asjob}
While ((Test-NetConnection exchange1 -Port 25 -WarningAction SilentlyContinue).tcpTestSucceeded ){
Start-Sleep 30
}
$VMtoStart = Get-VM | where notes -contains 'Boot order 3'
foreach ($cn in $VMtoStart)
{Start-VM $cn.name -asjob}

Залишилося додати цей PowerShell скрипт в автозавантаження або запускати через завдання планувальника (потрібно не забути відключити автоматичний запуск всіх ВМ, які запускаються цим скриптом). Не забувайте, що в Windows запуск PowerShell скриптів за замовчуванням обмежений. Якщо потрібно, підпишіть цей PS1 скрипт або змініть політику запуску PowerShell скриптів.

Leave a Reply

Your email address will not be published. Required fields are marked *