Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Hyper-V 가상 머신 자동 시작 및 부팅 순서 완벽 설정 가이드

Hyper-V에서는 호스트 OS를 부팅하거나 재시작할 때 가상 머신(VM)의 자동 시작 및 종료 동작을 세밀하게 구성할 수 있습니다. 이 글에서는 Hyper-V 호스트가 전원이 켜지거나 정상적으로 종료될 때 가상 머신에 대해 수행할 작업을 설정하는 방법과, PowerShell을 활용해 가상 머신의 부팅 순서를 효율적으로 관리하는 방법까지 자세히 살펴봅니다.

Hyper-V 가상 머신 자동 시작 및 종료 작업 구성

기본적으로 Hyper-V 호스트는 재시작될 때 등록된 가상 머신의 상태를 저장합니다. 즉, 호스트를 재시작하기 전에 VM이 실행 중이었다면 Hyper-V가 이를 자동으로 다시 시작합니다. 자동 시작 설정은 각 가상 머신마다 개별적으로 구성됩니다.

Hyper-V 관리자 콘솔을 실행하고 해당 VM의 속성을 연 뒤, 설정 → 자동 시작 작업(Automatic Start Action)으로 이동합니다. 가상 머신의 자동 시작을 관리하기 위한 세 가지 옵션이 제공됩니다.

  • 없음(Nothing) – 호스트가 시작될 때 가상 머신을 자동으로 시작하지 않습니다(호스트 재시작 이전의 VM 상태와 무관).
  • 서비스 중지 시 실행 중이었다면 자동 시작 – 호스트가 종료되거나 재시작되기 전에 VM이 실행 중이었던 경우에만 자동으로 시작합니다.
  • 항상 이 가상 머신 자동 시작 – Hyper-V 호스트가 부팅될 때마다 항상 해당 가상 머신을 시작합니다.

마지막 옵션에는 시작 지연 시간(Startup Delay)이라는 추가 매개변수가 있으며, 여기서 가상 머신의 시작 지연 시간을 초 단위로 지정할 수 있습니다. 이 지연 시간을 활용하면 가상 머신의 부팅 순서를 관리할 수 있고(예: SQL Server VM보다 도메인 컨트롤러를 먼저 부팅), 여러 VM이 동시에 시작되면서 발생하는 디스크 스토리지 부하를 줄이는 효과도 얻을 수 있습니다.

Hyper-V 가상 머신 자동 시작 및 부팅 순서 완벽 설정 가이드

흥미로운 점은 WAC(Windows Admin Center)에는 아직 Hyper-V 가상 머신의 자동 시작을 관리하는 옵션이 제공되지 않는다는 것입니다.

자동 종료 작업(Automatic Stop Action) 설정

자동 종료 작업 섹션에서는 호스트가 종료되거나 재시작될 때 가상 머신을 어떻게 처리할지 지정할 수 있습니다. 이 설정은 예기치 않은 정전이나 BSOD 같은 비상 상황과 달리, 가상 머신이 정상적으로 종료될 충분한 시간을 확보한 상태에서 Hyper-V 호스트를 안전하게 재시작하도록 돕습니다.

  • 가상 머신 상태 저장(Save) – 메모리를 포함한 가상 머신의 전체 상태가 저장됩니다. 다음 시작 시 VM은 해당 지점부터 이어서 실행됩니다. 단, VM 메모리(*.BIN 파일)를 보관하려면 디스크에 추가 여유 공간이 필요하며, 게스트 OS는 재시작되지 않습니다.
  • 가상 머신 끄기(Turn off) – Hyper-V 호스트가 종료되면 가상 머신도 물리적 컴퓨터를 종료하는 것과 동일한 방식으로 중지됩니다. VM 상태는 저장되지 않으며, 게스트 OS는 전체 부팅 과정을 거쳐 새로 시작됩니다. 이 모드에서는 VM에서 실행 중인 애플리케이션의 데이터 불일치 위험이 다소 존재합니다.
  • 게스트 운영 체제 종료(Shutdown) – Hyper-V 통합 서비스를 통해 게스트 OS를 정상 종료합니다. VM에서 실행 중인 모든 애플리케이션이 안전하게 중지되므로 데이터 불일치 위험이 매우 낮습니다.

Hyper-V 가상 머신 자동 시작 및 부팅 순서 완벽 설정 가이드

PowerShell로 자동 시작/종료 설정 관리

PowerShell을 사용하면 Hyper-V 가상 머신의 자동 시작 및 종료 설정을 한 번에 확인하고 변경할 수 있습니다.

모든 VM의 현재 시작 및 종료 설정을 조회하려면 다음 명령을 실행합니다.

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

Hyper-V 가상 머신 자동 시작 및 부팅 순서 완벽 설정 가이드

AutomaticStartAction 옵션을 사용하면 VM의 자동 시작 설정을 변경할 수 있으며, 지정 가능한 값은 Nothing, StartIfRunning, Start입니다.

Get-VM –VMname lon-win10 | Set-VM –AutomaticStartAction Start

GUI가 없는 무료 Windows Hyper-V Server 환경에서도 PowerShell을 활용하면 가상 머신 설정을 손쉽게 구성할 수 있다는 점이 큰 장점입니다.

특정 VM 하나(예: FSMO 역할을 보유한 도메인 컨트롤러)를 제외한 나머지 모든 VM의 시작 지연 시간을 설정하려면 다음과 같이 입력합니다.

Get-VM –VMname * | Where-Object –FilterScript {$_.vmname –notlike "lon-dc*"} | Set-VM –AutomaticStartDelay 90

또한 –AutomaticStopAction 옵션을 사용하면 VM 종료 설정(Save, TurnOff, ShutDown)을 지정할 수 있습니다.

Hyper-V 가상 머신 부팅(시작) 순서 구성

독립형 Hyper-V 호스트를 시작할 때 관리자는 가상 머신들의 시작 순서를 직접 관리해야 하는 경우가 많습니다. 예를 들어 Exchange VM은 도메인 컨트롤러가 가용 상태가 된 후에만 부팅되어야 하고, 애플리케이션 서버는 데이터베이스 서버 이후에 시작되어야 합니다. 하지만 Hyper-V에는 시작 지연 옵션(AutomaticStartDelay) 외에 가상 머신의 시작 순서를 관리하는 별도의 내장 도구가 없습니다.

방법 1: 시작 지연 시간으로 순서 지정

가장 간단한 방법은 VM마다 서로 다른 시작 지연 시간을 설정하여 부팅 순서를 구성하는 것입니다.

Get-VM –VMname lon-dc01 | Set-VM –AutomaticStartDelay 0
Get-VM –VMname lon-exch1,lon-db01 | Set-VM –AutomaticStartDelay 90
Get-VM –VMname lon-rds01,lon-app01 | Set-VM –AutomaticStartDelay 180

방법 2: PowerShell 시작 스크립트 활용

또 다른 방법은 PowerShell 시작 스크립트를 사용해 VM을 순차적으로 시작하는 것입니다. 스크립트 내에서 다음 VM을 시작하기 전에 지연 시간을 두고, VM 내부의 애플리케이션이나 서비스가 실제로 기동되었는지 추가로 확인할 수 있습니다. 관리 편의성을 높이려면 노트(Notes) 필드를 태그처럼 활용해 여러 VM을 그룹으로 묶을 수 있습니다. 예를 들어 다음과 같이 VM에 부팅 순서 태그를 설정했습니다.

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

Hyper-V 가상 머신 자동 시작 및 부팅 순서 완벽 설정 가이드

아래 PowerShell 스크립트는 지정된 순서대로 가상 머신을 시작하고, Test-NetConnection cmdlet을 사용해 특정 서비스(TCP 포트)의 가용성을 추가로 점검합니다.

$VMtoStart = Get-VM | where notes -contains 'Boot order 1'
foreach ($cn in $VMtoStart)
{Start-VM $cn.name -asjob}
While (!(Test-NetConnection lon-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 lon-exch1 -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}

스크립트 작성 후에는 이를 자동 시작에 등록하거나 작업 스케줄러(Task Scheduler)를 통해 실행하면 됩니다. 단, 이 스크립트로 시작되는 모든 VM에 대해서는 Hyper-V의 자동 시작 기능을 반드시 비활성화해야 중복 실행을 피할 수 있습니다. 또한 Windows에서는 기본적으로 PowerShell 스크립트 실행이 제한되어 있으므로, 필요에 따라 PS1 스크립트에 코드 서명을 하거나 PowerShell 실행 정책(Execution Policy)을 조정해야 합니다.