Hyper-V虚拟机自动添加检查点和导出备份

Hyper-V虚拟机自动添加检查点和导出备份

背景说明

笔者使用Hyper-V在内部搭建了大量的环境和系统,比如:

  1. k8s内部集群

  2. Azure Devops Server(TFS==>VSTS==>Azure Devops Server)

  3. SharePoint

大部分基本上都是用于内部研究、测试等场景,但是为了避免很多麻烦,必要的备份还是必须的。

虚拟化的最大优势之一是能够轻松地保存虚拟机的状态。如果各个系统或环境都需要独立备份,这是一个很大的工作量,先不说全量备份和差异备份的方式,单单就各自的备份处理实现就是一个很麻烦的事情。而基于虚拟机,我们仅需通过检查点保存虚拟机的状态即可。

检查点类型

Windows 10 Hyper-V 包括两种类型的检查点:

  • 标准检查点: 在启动检查点时拍摄虚拟机和虚拟机内存状态的快照。 快照并非完整备份,并可能导致系统在 Active Directory 等不同节点之间复制数据时出现数据一致性问题。 Hyper-V 只提供 Windows 10 之前的标准检查点(以前称为快照)。
  • 生产检查点: 在 Linux 虚拟机上使用卷影复制服务或文件系统冻结来创建虚拟机的数据一致性备份。 没有获取任何虚拟机内存状态的快照。

检查点的类型可以通过界面操作来完成,也可以通过以下命令:

Set-VM -Name <vmname> -CheckpointType Production
Set-VM -Name <vmname> -CheckpointType Standard

使用命令管理检查点

Hyper-V支持通过命令来添加检查点。主要命令如下所示:

Checkpoint-VM -Name <VMName>

比如我们的虚拟机名称为“TFS”,我们就可以使用以下命令来进行添加检查点:

Checkpoint-VM -Name TFS

如何查看已创建的检查点呢?可以使用以下命令:

Get-VMCheckpoint -VMName <VMName>

查看检查点

关于检查点的其他命令还有:

  • 还原检查点:

    Restore-VMCheckpoint -Name <checkpoint name> -VMName <VMName> -Confirm:$false
  • 重命名检查点

    Rename-VMCheckpoint -VMName <virtual machine name> -Name <checkpoint name> -NewName <new checkpoint name>
  • 删除检查点

    Remove-VMCheckpoint -VMName <virtual machine name> -Name <checkpoint name>
  • 导出检查点

    Export-VMCheckpoint -VMName <virtual machine name> -Name <checkpoint name> -Path <path for export>

更多命令见:

get-command -module hyper-v

查看Hyper-V命令

编写备份脚本

熟悉了以上命令,我们可以编写备份脚本如下所示:

# 备份路径(备份路径不要和虚拟机位置在一个盘)
$exportPath = "E:\虚拟机备份\"
# 需要备份的虚拟机列表
$vmNames = "TFS", "SharePoint"

$vmNames | ForEach-Object -Process {
    Write-Host "准备备份 $_"
    # 设置备份路径
    $path = [System.IO.Path]::Combine($exportPath, $_, [System.DateTime]::Now.ToString("yyyy-MM-dd"))
    [System.IO.Directory]::CreateDirectory($path)

    if ([System.IO.Directory]::GetDirectories($path).Length -eq 0) {
        Write-Host "备份路径 $path"

        Write-Host "正在创建检查点 $_"
        # 创建检查点
        Checkpoint-VM -Name $_
        $checkPoint = Get-VMCheckpoint -VMName $_ | Select-Object -Last 1

        Write-Host "正在导出检查点 $_"
        # 导出检查点到备份路径
        Export-VMCheckpoint -VMName $_ -Name $checkPoint.Name -Path $path

        Write-Host "备份已完成 $_"
    }else {
        Write-Host "备份已存在 $_"
    }
}

接下来就可以添加到Windows的计划任务里面,使用管理员权限执行即可。不过,其实这仅仅是开始,通常情况下,我们还需考虑日志记录等等。


 上一篇
Magicodes.Sms短信库的封装和集成 Magicodes.Sms短信库的封装和集成
Magicodes.Sms短信库的封装和集成简介 Magicodes.Sms是心莱团队封装的短信服务库,已提供Abp模块的封装。 Nuget新的包 名称 说明 Nuget Magicodes.Sms.Aliyun 阿里云短信库
下一篇 
Magicodes.IE之导入学生数据教程 Magicodes.IE之导入学生数据教程
基础教程之导入学生数据说明本教程主要说明如果使用Magicodes.IE.Excel完成学生数据的Excel导入。 要点 本教程使用Magicodes.IE.Excel来完成Excel数据导入 需要通过创建Dto来完成导入 Magicode
  目录