Hyper‑V snapshot a rollback jedním příkazem – žádné GUI, žádný stres webseidon Lukáš Adámek Odry Fulnek Vítkov Klokočov webdeveloper, webdesignér

Hyper‑V snapshot a rollback jedním příkazem – žádné GUI, žádný stres

Hyper‑V snapshot a rollback jedním příkazem – žádné GUI, žádný stres

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‑VM je 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

TypJak fungujeKdy použítRizika
StandardUkládá RAM + disk state (saved‑state), rychlýLab, test, ne‑cluster VMRisk korupce databází
ProductionVSS snapshot uvnitř OS, žádná RAMProduktion, SQL, DCPotřebuje Integration Services
ReferenceExport/Import jako šablonaDevOps 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 -Rollback false (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 timeVýpadky
Bez checkpointu70 min~ 2 h (z backupu)1 kritický/rok
Skriptem AutoSnap72 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

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32