我在 Windows 8 Pro 中使用 Hyper-V 运行至少一台 VM,并且我想在它仍在运行时对其进行备份。
Windows Server 2012 通过内置的“Windows Server Backup”引擎很好地处理了这个问题。
但我找不到在 Windows 8 上实现此目的的方法。
我发现HyperV备份以及用于备份 HyperV 的开源应用程序,但它在 Windows 8 上不起作用。
答案1
Windows 服务器备份、系统还原、以前的版本、Windows 备份/Windows 7 文件恢复和 Windows 上的大多数其他备份技术都使用称为卷影复制 (VSS) 的服务来执行备份。
使用 VSS 的备份软件将能够对虚拟机进行快照,然后备份虚拟机没有将它们关闭。
为什么不使用 Windows Backup(包含在 Windows 8 Pro 中)来执行备份?
答案2
这是我用来备份在 Windows 8 上运行的客户端虚拟机的 PowerShell 脚本,尽管我并不实时地执行它们。PowerShell 不是我最擅长的套件,而且它做出了一些假设,但我希望它对帮助其他人快速入门有所帮助
function SendMail([string]$Subject, [string]$Body)
{
#SMTP Variables
$EmailFrom = "[email protected]"
$EmailTo = "[email protected]"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("Username", "Password");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}
function init()
{
# Delete existing shares
#Net Use * /delete /y
$guid = [guid]::NewGuid()
$vms = Get-VM
}
try
{
$guid = [guid]::NewGuid()
$vms = Get-VM
$pass = cat C:\HVBackup\securestring.txt | ConvertTo-SecureString
$mycred = New-Object -typename System.Management.Automation.PSCredential -ArgumentList "Username",$pass
New-PSDrive -Name V -PSProvider FileSystem -Root "\\NAS\Hyper-V" -Persist -Credential $mycred
$Subject = "Notification from Virtual Machine Backup"
$Body = "Starting Virtual Machine Backup."
SendMail($Subject,$Body)
foreach ($vm in $vms)
{
if($vm.State -eq "Running") { Stop-VM $vm.VMName -Save -Force }
}
#Stop-VM * -Save -Force
# Delete all the files older than 7 days
$TargetFolder = “V:\Backups”
foreach ($i in Get-ChildItem $TargetFolder -recurse)
{
if ($i.CreationTime -lt ($(Get-Date).AddDays(-7)))
{
Remove-Item $File.FullName -force
}
}
# Export the virtual machines to directory
Export-VM * V:\Backups\$guid\
$Subject = "Notification from Virtual Machine Backup"
$Body = "Finished Virtual Machine Backup."
SendMail($Subject,$Body)
exit 0
}
catch [System.Exception]
{
$Subject = "Notification from Virtual Machine Backup"
$Body = "There has been an error whilst running virtual machine backup." + $_.Exception.Message
Write-Host($_.Exception.Message)
SendMail($Subject,$Body)
exit 1
}
finally
{
Remove-PSDrive V
$vms = Get-VM
foreach ($vm in $vms)
{
if($vm.State -eq "Saved") { Start-VM $vm.VMName }
}
# Start the domain controller virtual machine
#Start-VM dc.applicita.local
}
这是我用来生成密码文件的脚本。
read-host -assecurestring | ConvertFrom-SecureString | out-file C:\HVBackup\securestring.txt
答案3
我知道这是一个老问题。我在搜索如何备份在 Windows 10 上运行的 Hyper-V 计算机的解决方案时发现了它。我相信 Windows 10 中的情况与 Windows 8 中的情况相同。所以希望以下内容对遇到此问题的其他任何人都有用。
最重要的是,如果不使用第三方工具,你就无法备份在 Windows 8/10 上运行的 hyper-v 机器。wbadmin
允许您在 Windows 服务器上备份 hyper-v 机器的命令不支持在 Windows 8/10 上备份 hyper-v 机器。
然而,虽然你不能备份, 你可以出口。导出几乎与备份一样好,可能最显着的区别是虚拟机不知道它已被“备份”,因此例如 SQL 服务器不知道已运行备份,这可能会对日志被截断的时间产生影响。
您可以使用 Hyper-V 管理器 GUI 执行导出,或者如果您想从命令行执行导出(如果您希望由任务计划程序运行它,您可能会这样做),则 powershell cmdlet 是:
Export-VM -Name 'VM-Name' -PATH 'C:\Export-Path'
如果你想从 .cmd/.bat 文件运行它,那么它变成:
powershell -NonInteractive -Command "Export-VM -Name 'VM-Name' -PATH 'C:\Export-Path'"
请注意,如果您要导出到网络共享,则需要授予运行 Hyper-V 的计算机对网络共享的访问权限。