2 분 소요

Hyper-V의 체크포인트(구 스냅샷)는 가상 머신의 특정 시점 상태를 저장하여 빠르게 롤백할 수 있는 강력한 기능입니다. 그러나 잘못 사용하면 성능 저하와 데이터 손실로 이어질 수 있어 올바른 이해가 필요합니다.

서버 인프라 이미지

Hyper-V로 운영되는 가상화 서버 환경

스탠다드 체크포인트 vs 프로덕션 체크포인트

구분 스탠다드 체크포인트 프로덕션 체크포인트
저장 대상 VM 메모리 상태 포함 메모리 상태 미포함
복원 결과 체크포인트 시점 그대로 재부팅 후 시작
데이터베이스 정합성 보장 어려움 VSS 활용, 정합성 보장
권장 용도 개발/테스트 환경 프로덕션 환경

PowerShell로 체크포인트 관리

체크포인트 생성

# 단일 VM 체크포인트 생성
Checkpoint-VM -Name "WebServer01" -SnapshotName "패치 적용 전 $(Get-Date -Format 'yyyyMMdd')"

# 여러 VM 일괄 체크포인트
$vms = @("WebServer01", "DBServer01", "AppServer01")
$vms | ForEach-Object {
    Checkpoint-VM -Name $_ `
        -SnapshotName "월간백업-$(Get-Date -Format 'yyyy-MM')"
    Write-Host "$_ 체크포인트 생성 완료"
}

# 프로덕션 체크포인트 설정 및 생성
Set-VM -Name "DBServer01" -CheckpointType Production
Checkpoint-VM -Name "DBServer01" -SnapshotName "DB 마이그레이션 "

체크포인트 목록 확인

# 특정 VM의 체크포인트 목록
Get-VMSnapshot -VMName "WebServer01" |
    Select-Object Name, CreationTime, ParentSnapshotName |
    Format-Table -AutoSize

# 모든 VM의 체크포인트
Get-VM | ForEach-Object {
    $vm = $_
    Get-VMSnapshot -VMName $vm.Name |
        Select-Object @{N='VM';E={$vm.Name}}, Name, CreationTime
} | Format-Table -AutoSize

# 체크포인트 용량 확인
Get-VMSnapshot -VMName "WebServer01" |
    Select-Object Name, CreationTime,
    @{N='SizeGB'; E={[math]::Round($_.HardDrives.FileSize/1GB,2)}}

체크포인트 복원

# VM 종료 후 체크포인트 복원
Stop-VM -Name "WebServer01" -Force

$checkpoint = Get-VMSnapshot -VMName "WebServer01" |
    Where-Object { $_.Name -like "패치 적용 전*" } |
    Sort-Object CreationTime -Descending |
    Select-Object -First 1

Restore-VMSnapshot -VMSnapshot $checkpoint -Confirm:$false

# VM 재시작
Start-VM -Name "WebServer01"
Write-Host "복원 완료: $($checkpoint.Name)"

체크포인트 삭제

# 특정 체크포인트 삭제
Remove-VMSnapshot -VMName "WebServer01" -Name "오래된 체크포인트"

# 30일 이상 된 체크포인트 자동 삭제
Get-VM | ForEach-Object {
    Get-VMSnapshot -VMName $_.Name |
        Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-30) } |
        ForEach-Object {
            Write-Host "삭제: $($_.VMName) - $($_.Name)"
            Remove-VMSnapshot -VMSnapshot $_ -Confirm:$false
        }
}

코드 이미지

PowerShell로 Hyper-V 체크포인트를 관리하는 화면

체크포인트 사용 시 주의사항

# 체크포인트 보유 현황 리포트
$report = Get-VM | ForEach-Object {
    $snapshots = Get-VMSnapshot -VMName $_.Name
    [PSCustomObject]@{
        VM             = $_.Name
        State          = $_.State
        SnapshotCount  = $snapshots.Count
        OldestSnapshot = ($snapshots | Sort-Object CreationTime | Select-Object -First 1).CreationTime
        CheckpointType = $_.CheckpointType
    }
}

$report | Where-Object { $_.SnapshotCount -gt 0 } |
    Format-Table -AutoSize

# 경고: 프로덕션 VM에 스냅샷이 너무 많으면 성능 저하
$report | Where-Object { $_.SnapshotCount -gt 3 } |
    ForEach-Object { Write-Warning "$($_.VM): 체크포인트 수 $($_.SnapshotCount)개 - 정리 필요" }

AVHD 파일 병합 (체크포인트 삭제 후)

# 체크포인트 삭제 후 AVHD 파일이 자동 병합되나 확인
$vm = Get-VM -Name "WebServer01"
$merging = $vm.HardDrives |
    Where-Object { $_.Path -like "*.avhd*" }

if ($merging) {
    Write-Host "AVHD 병합 진행 중... VM 종료 상태에서 완료됩니다."
} else {
    Write-Host "AVHD 파일 없음 - 체크포인트 완전히 정리됨"
}

자동 체크포인트 스케줄링

# 매주 일요일 새벽 1시 자동 체크포인트 생성 스크립트
$script = @'
$vms = Get-VM | Where-Object { $_.State -eq "Running" }
foreach ($vm in $vms) {
    $snapName = "Weekly-$(Get-Date -Format 'yyyyMMdd')"
    Checkpoint-VM -Name $vm.Name -SnapshotName $snapName
    # 5개 초과 체크포인트 삭제
    $snaps = Get-VMSnapshot -VMName $vm.Name | Sort-Object CreationTime
    if ($snaps.Count -gt 5) {
        $snaps | Select-Object -First ($snaps.Count - 5) |
            Remove-VMSnapshot -Confirm:$false
    }
}
'@

$action = New-ScheduledTaskAction `
    -Execute "PowerShell.exe" `
    -Argument "-NonInteractive -Command `"$script`""

$trigger = New-ScheduledTaskTrigger `
    -Weekly -DaysOfWeek Sunday -At "01:00"

Register-ScheduledTask `
    -TaskName "WeeklyVMCheckpoint" `
    -Action $action `
    -Trigger $trigger `
    -RunLevel Highest `
    -Force

프로덕션 환경에서는 체크포인트를 장기 백업 수단으로 사용하지 마세요. 체크포인트 수가 늘어날수록 I/O 체인이 길어져 성능이 저하됩니다. 정기적인 체크포인트 생성 후 불필요한 것은 즉시 삭제하고, 실제 백업은 Windows Server Backup이나 전용 백업 솔루션을 활용하세요.

댓글남기기