Tworzenie kopii zapasowych maszyn wirtualnych to jeden z fundamentów bezpieczeństwa środowiska IT. Jeśli korzystasz z wbudowanego w Windows Hyper-V, masz prostą i skuteczną metodę na ręczne wykonanie backupu — eksport maszyny wirtualnej.
Czym jest eksport maszyny wirtualnej w Hyper-V?
Eksport w Hyper-V to proces, który tworzy pełną kopię maszyny wirtualnej — jej konfiguracji, dysków wirtualnych (VHD/VHDX) oraz bieżącego stanu (jeśli VM jest wyłączona lub działa w trybie zapisów kontrolnych). Dzięki temu można później łatwo przywrócić maszynę na tym samym lub innym hoście Hyper-V.
To nie jest pełnoprawne rozwiązanie do backupu ciągłego, ale doskonale sprawdza się w wielu przypadkach:
- przed aktualizacją systemu lub oprogramowania VM,
- przed migracją maszyny na inny serwer,
- jako doraźna kopia bezpieczeństwa.
Wymagania wstępne
Zanim przystąpisz do eksportu, upewnij się, że:
- Na dysku docelowym masz wystarczająco dużo wolnego miejsca.
- Maszyna nie wykonuje w tym czasie intensywnych operacji I/O (najlepiej ją wyłączyć lub użyć snapshotu).
1. Uruchom Menedżera Hyper-V
Otwórz „Menedżera Hyper-V” z menu Start lub virtmgmt.msc.
2. Wybierz maszynę do eksportu
Z listy maszyn wirtualnych kliknij prawym przyciskiem myszy tę, którą chcesz wyeksportować, i wybierz Eksportuj…
3. Wybierz lokalizację docelową
Wybierz folder, do którego mają zostać zapisane dane eksportowanej maszyny. Hyper-V utworzy w nim strukturę katalogów zawierającą:
- plik konfiguracyjny maszyny,
- pliki dysków wirtualnych,
- dane stanu zapisanych (jeśli są w użyciu).
4. Rozpocznij eksport
Kliknij Eksportuj i poczekaj na zakończenie procesu. Czas operacji zależy od rozmiaru dysków VM i wydajności hosta.
Rozwiązanie to nadaje się idelanie na okresową kopię całość maszyny.
Jest tylko jeden problem – duzo maszyn – duzo klikania.
Całość można uprościć skryptem Powershell , który ładnie zapyta które maszyny chcemy zgrać i gdzie.
function Check-7Zip {
return (Get-Command "7z.exe" -ErrorAction SilentlyContinue) -ne $null
}
$has7zip = Check-7Zip
if (-not $has7zip) {
Write-Host " 7-Zip (7z.exe) nie jest dostepny w PATH. Kompresja zostanie pominieta." -ForegroundColor Yellow
}
# Pobierz wszystkie maszyny wirtualne
$allVMs = Get-VM
$selectedVMs = $allVMs | Out-GridView -Title "Wybierz maszyny do eksportu" -PassThru
if (-not $selectedVMs) {
Write-Host "Nie wybrano zadnych maszyn. Zakonczono." -ForegroundColor Yellow
exit
}
$destinationPath = Read-Host "Podaj sciezka docelowa dla eksportu (np. D:\VMExport)"
if (-not (Test-Path $destinationPath)) {
Write-Host "Tworze katalog $destinationPath" -ForegroundColor Cyan
New-Item -ItemType Directory -Path $destinationPath -Force | Out-Null
}
# Eksport i kompresja
foreach ($vm in $selectedVMs) {
$vmExportPath = Join-Path -Path $destinationPath -ChildPath $vm.Name
Write-Host "Eksportuję: $($vm.Name) -> $vmExportPath" -ForegroundColor Green
Export-VM -Name $vm.Name -Path $vmExportPath
if ($has7zip) {
$zipPath = "$vmExportPath.7z"
Write-Host "Kompresuje do: $zipPath" -ForegroundColor Cyan
& 7z a -t7z -mx=9 $zipPath "$vmExportPath\*" | Out-Null
Write-Host "Skompresowano do $zipPath" -ForegroundColor Green
# (Opcjonalnie) usun oryginalny folder po kompresji
# Remove-Item -Path $vmExportPath -Recurse -Force
}
}