
Zajmę się dziś tematem tworzenia kopii zapasowych wirtualnych dysków twardych. Założenia są następujące:
- Wirtualizator, to Microsoft Hyper-V
- Bez użycia komercyjnego – dedykowanego oprogramowania.
- Kopia jest wykonywania na udział sieciowy.
Wykorzystam do tego PowerShell. Na początek tworzymy plik z zapisanymi poświadczeniami do udziału sieciowego. W poniższym skrypcie musimy uzupełnić dwie rzeczy, w $securePassword
wstawiamy swoje hasło zamiast gfgdsgdgsdgF5
oraz nawę użytkownika zamiast What-IT\Administrator
. Można również zmienić ścieżkę do pliku C:\cred.xml
, będzie ona wykorzystana w kolejnym skrypcie więc i tam trzeba będzie ją poprawić.
$securePassword = "gfgdsgdgsdgF5" | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ("What-IT\Administrator", $securePassword)
$credential | Export-CliXml -Path "C:\cred.xml"
Uruchamiam teraz Microsoft PowerShell ISE, kopiuję powyższy kod i uruchamiam go:

Jeżeli wykonanie zakończyło się bez błędu to przechodzimy do kolejnego kroku. Ten kod również musimy spersonalizować
- Zmienną
$vmName
zmieniamy na nazwę naszej maszyny wirtualnej. - Zmienną
$diskPath
zmieniamy na ścieżkę do dysku, który jest podpięty do tej maszyny wirtualnej i dla którego chcemy wykonać kopię. - W zmiennej
$networkPath
podajemy ścieżkę do udziału sieciowego, gdzie kopia ma zostać zapisana.
$vmName = "What-IT"
$checkpointName = "Snapshot_$(Get-Date -Format yyyyMMddHHmmss)"
$diskPath = "E:\Hyper-V\What-IT\Virtual Hard Disks\What-IT.vhdx"
$networkPath = "\\192.168.3.180\s\BACKUP\VM"
$destFileName="Backup:\$vmName-$(Get-Date -Format yyyyMMddHHmmss).vhdx"
$credential = Import-CliXml -Path "C:\cred.xml"
$username = $credential.UserName
$password = $credential.GetNetworkCredential().Password
New-PSDrive -Name "Backup" -PSProvider FileSystem -Root $networkPath -Credential $credential
Checkpoint-VM -Name $vmName -SnapshotName $checkpointName
Copy-Item -Path $diskPath -Destination $destFileName
Remove-PSDrive -Name "Backup"
Remove-VMSnapshot -VMName $vmName -Name $checkpointName
Tak jak poprzednio, kopiujemy kod i uruchamiamy go w PowerShell ISE:

Jeżeli wykonanie skryptu nie zakończy się błędem, to w udziale sieciowym powinny się pojawić kopie naszego wirtualnego dysku twardego. W nazwie pliku znajduje się nazwa maszyny wirtualnej, której kopia dotyczy oraz data i godzina wykonania kopii. W zależności od rozmiarów dysku twardego, prędkości sieci, skrypt może się wykonywać od kliku sekund do kilkudziesięciu minut.

Cały proces można zautomatyzować uruchamiając cyklicznie skrypt w harmonogramie zadań. Należy wtedy pamiętać o regularnym usuwaniu (ręcznym lub automatycznym) wykonanych kopii.
Koniec 🙂
Jeżeli pomogłem to ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.