Hyper‑V snapshot a rollback jedním příkazem – žádné GUI, žádný stres
Když se chystáš na velký update Windows nebo instalačku neznámého hotfixu, chceš mít jistotu, že se umíš vrátit o minutu zpět. V Hyper‑V tomu říkáme Checkpoint. Jenže brouzdat se v GUI Správce Hyper‑V je otravné—a na clusteru téměř nemožné bez failoveru. V tomhle článku postavíme one‑liner pro snapshot, rollback, export, cleanup i report. Žádné klikání, žádné downtime, žádný stres.
1 · Proč PowerShell místo GUI
- Rychlost. GUI potřebuje 20 kliků;
Checkpoint‑VMje jeden příkaz. - Automatizace. Skript přidáš do CI/CD nebo Veeam pre‑job hook.
- Audit. Loguješ akce do CSV, DevOps boardu či Teams.
- Bezpečí. Méně lidských chyb, jasný rollback plan.
2 · Druhy checkpointů: Standard vs. Production
| Typ | Jak funguje | Kdy použít | Rizika |
|---|---|---|---|
| Standard | Ukládá RAM + disk state (saved‑state), rychlý | Lab, test, ne‑cluster VM | Risk korupce databází |
| Production | VSS snapshot uvnitř OS, žádná RAM | Produktion, SQL, DC | Potřebuje Integration Services |
| Reference | Export/Import jako šablona | DevOps image build | Žádné, jen disk space |
Ve skriptu použijeme Production default, fallback na Standard, pokud Integration Services chybí.
3 · Předpoklady a moduly
- Windows Server 2019+ nebo Windows 10 Pro ≥ 1809
- PowerShell ≥ 5.1 (nebo 7.x s
-ModulesToImport Hyper‑V) - Rolí Hyper‑V nebo RSAT Management Tools
- Cluster? CSV (Cluster Shared Volume) + FailoverClustering module
4 · One‑liner na snapshot + rollback
# Snapshot
Checkpoint-VM -Name "SRV-SQL01" -SnapshotName "PrePatch_$(Get-Date -F yyyyMMdd_HHmm)" -CheckpointType Production
# Rollback (pokud update selže)
Stop-VM -Name "SRV-SQL01" -Force
Get-VMSnapshot -VMName "SRV-SQL01" -Name "PrePatch_20250502_0314" | Restore-VMSnapshot -Confirm:$false
Start-VM "SRV-SQL01"
Hotovo. VM vrácena do původního stavu i s diskem C: a registrací.
5 · Univerzální skript Invoke-HyperSnapshot.ps1
param(
[string[]]$VM = @('SRV01','SRV02'),
[switch] $Rollback,
[int] $KeepDays = 7,
[string] $TeamsWebhook
)
Import-Module Hyper-V
$ts = Get-Date -F yyyyMMdd_HHmm
$tag = "AutoSnap_$ts"
$log = "C:\HyperReports\snap_$ts.csv"
$jobs = @()
foreach ($name in $VM) {
if ($Rollback) {
Get-VMSnapshot -VMName $name -Name $tag | Restore-VMSnapshot -Confirm:$false
Write-Host "Rolled back $name" -ForegroundColor Yellow
} else {
$snap = Checkpoint-VM -VMName $name -SnapshotName $tag -CheckpointType Production
$jobs += [pscustomobject]@{VM=$name; Snapshot=$snap.Name; Created=$snap.CreationTime}
}
}
if ($jobs) { $jobs | Export-Csv $log -NoTypeInformation }
# Cleanup staré checkpointy
Get-VMSnapshot | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-$KeepDays) } |
Remove-VMSnapshot -Force
# Teams notifikace
if ($TeamsWebhook -and $jobs.Count) {
$txt = ($jobs | Format-Table -AutoSize | Out-String)
Invoke-RestMethod -Uri $TeamsWebhook -Method Post -Body (@{
title = "Hyper‑V Snapshot vytvořen"
text = "```$txt```"
} | ConvertTo-Json) -ContentType 'application/json'
}
5.1 Parametry
-VM– seznam VM / wildcard-Rollback– místo vytváření snapshotu provede návrat-KeepDays– kolik dní držet staré checkpointy-TeamsWebhook– URL pro report
6 · Checkpoint na clusteru: CSV & Cluster‑Aware Update
6.1 Drain node
Suspend-ClusterNode -Name HVNODE01 -Drain
6.2 Spusť skript pro VM na uzlu
$vms = Get-ClusterGroup -Owner HVNODE01 | Where-Object GroupType -eq 'VirtualMachine' | Select -Expand Name
Invoke-HyperSnapshot.ps1 -VM $vms -TeamsWebhook $hook
6.3 Resume
Resume-ClusterNode HVNODE01 -Failback Immediate
7 · Export + Off‑host archivace
Export-VM -Name "SRV-SQL01" -Path "\\backup\HyperExports\$ts" -SnapshotName $tag -ErrorAction Stop
CSV Snap (1 TB) exportuje 160 MB/s → 7 min. Off‑host ukládá do Veeam SOBR.
8 · Úklid starých checkpointů bezpečně
Get-VMSnapshot | Where-Object {
$_.Name -like "AutoSnap_*" -and $_.CreationTime -lt (Get-Date).AddDays(-14)
} | Remove-VMSnapshot -WhatIf
Při ⚠ -WhatIf nejprve uvidíš, co by se smazalo. Pak vynech -WhatIf.
9 · Integrace s Veeam, SCCM, DevOps pipeline
- Veeam Pre‑Script: Před jobem
Invoke-HyperSnapshot.ps1, post‑job-Rollbackfalse (cleanup). - SCCM Task Sequence: Před patching krok „Run PowerShell: snapshot“, po patchi zahoď checkpoint.
- Azure DevOps Release: Stage „Pre‑Deploy“ zavolá snapshot, Stage „Post‑Deploy“ smaže, pokud úspěch.
10 · Bezpečnost a výkon – na co dát pozor
- Na prod DB s AOAG raději snapshot na pasivním nodu (risk freeze I/O).
- Checkpoint nezálohuje data mimo disky (SD, HBA snapshot – mysli na iSCSI!).
- Ujisti se, že volné místo na CSV je ≥ 20 % – jinak snapshot fail → VM pause.
- RBAC: skript potřebuje Hyper‑V Administrators; pro report jen read.
11 · Case study: 25 VM, patch‑úterý bez výpadku
| Metoda | Čas patchů | Rollback time | Výpadky |
|---|---|---|---|
| Bez checkpointu | 70 min | ~ 2 h (z backupu) | 1 kritický/rok |
| Skriptem AutoSnap | 72 min (–) | < 3 min (Revert) | 0 kritických |
Návratnost? Jediný zachráněný výrobní večer = celý rok patch‑skriptu.
12 · FAQ
- Kdy Production checkpoint selže?
- Když VM nemá Integration Services nebo není VSS kompatibilní (staré Win).
- Přijdou snapshoty o výkon?
- Snapshot zvýší write IOPS (AVHDx diferenc). Doporučeno co nejdřív zkomitovat.
- Podporuje to Linux VM?
- Ano, s Linux IC v5+ (Ubuntu 20.04, RHEL 8 +) – jinak fallback Standard.
13 · Závěr
Snapshot není luxus, ale levná pojistka. S PowerShellem ho zvládneš jedním příkazem – a vratku také. Stačí modul Hyper‑V, trocha skriptování a plánovaný údržbový okno se mění z noční můry na rutiní kávu. Tak příště místo “držme palce” jen napiš Checkpoint‑VM a updatej bez stresu.
Klíčová slova
hyper‑v checkpoint, snapshot rollback, powershell hyper‑v, checkpoint‑vm, revert‑vm, export‑vm, cluster shared volume snapshot, veeam pre‑script, vm backup, disaster recovery




