最近在 Windows 10 上面使用 Hyper-V 想說要來備份 VM 才發現原來以前可以自動備份 Hyper-V 的是 Windows Server,如果不是 Windows Server 並沒有自動備份的功能,不過我就想這部分應該有現成的腳本可以做吧!果不其然讓我找到有一個叫做 Hyper-V-Backup 的 PowerShell 可以做到簡單備份 VM,剩下就只要再把它放入每日排程就可以完成這件事情了!
安裝 Hyper-V-Backup
它的安裝方法其實很簡單,只要打開 PowerShell 使用系統管理員執行輸入安裝指令,而安裝過程就是全部同意就結束了!
Install-Script -Name Hyper-V-Backup
在第一次執行指令的時候會出現 “因為這個系統上已停用指令碼執行,所以無法載入” 的保護機制,解決方法可以查看我之前寫的WINDOWS 安裝 CDK TOOLKIT 後出現 “因為這個系統上已停用指令碼執行,所以無法載入”,使用裡面的解法就可以讓指令正常執行了!
執行自動備份指令
安裝成功後就可以執行腳本了,腳本有提供備份成功會自動寄信的功能,不過因為我不需要使用,所以就沒有填寫了。
無自動發送郵件的指令範例
以下指令代表:
- 備份位置:D:\Backups
- 備份前暫存位置: C:\temp
- 備份保留天數:30
- 壓縮功能:開啟
- 備份 Log 位置:D:\scripts\logs
Hyper-V-Backup.ps1 -BackupTo D:\Backups -Wd C:\temp -Keep 30 -Compress -Sz -SzOptions '-t7z,-ppassword' -L D:\scripts\logs
自動發送郵件的指令範例
如果想要讓它自動寄信可以使用以下指令
Hyper-V-Backup.ps1 -BackupTo \\server\vm-backup -Wd C:\temp -Keep 30 -Compress -Sz -SzOptions '-t7z,-ppassword' -L D:\scripts\logs -Subject 'Server: Hyper-V Backup' -SendTo [email protected] -From [email protected] -Smtp smtp.outlook.com -User [email protected] -Pwd D:\scripts\ps-script-pwd.txt -UseSsl
而自動發送信件需要建立密碼檔,產生密碼檔得指令為以下
$creds = Get-Credential $creds.Password | ConvertFrom-SecureString | Set-Content D:\scripts\ps-script-pwd.txt
備份成功檔案包含
備份成功後可以看到會產生壓縮檔,裡面包涵 Snapshots, Virtual Hard Disks, Virtual Machines,提供給需要還原 VM 的時候使用。
實現每日自動備份
有了方便的備份指令後,剩下就是把它加入每日排程就可以實現每日自動備份了!
程式或指令碼填入
powershell
新增引述填入
-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command "& 'C:\Program Files\WindowsPowerShell\Scripts\Hyper-V-Backup.ps1' -BackupTo D:\Backups -Wd C:\temp -Keep 90 -Compress -Sz -L D:\scripts\logs "
參考資料
- https://gal.vin/utils/hyperv-backup-utility/
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!