前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hyper-V虚拟机自动添加检查点和导出备份

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

作者头像
心莱科技雪雁
发布2019-12-05 10:15:29
3.5K0
发布2019-12-05 10:15:29
举报
文章被收录于专栏:雪雁的专栏雪雁的专栏

背景说明

笔者使用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

编写备份脚本

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

# 备份路径(备份路径不要和虚拟机位置在一个盘)
$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的计划任务里面,使用管理员权限执行即可。不过,其实这仅仅是开始,通常情况下,我们还需考虑日志记录等等。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麦扣聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档