VMware虚拟机备份与恢复

前言

本文主要是根据自己实际项目经验对云与备份之(1):VMware虚机备份和恢复这篇文章进行补充说明。本文将以部分引用,部分说明的方式进行组织,加粗部分为我自己总结的内容。
原文中提到两套SDK(vddk跟Web service SDK),整个虚拟机备份流程需要着两套SDK配合使用,我把这两套SDK整理了一下,使之能够在clion跟idea中运行,地址如下:VMwareProject
vix_disklib_sample

1. 与备份有关的VMWare基础知识

1.1 VMware 虚机磁盘在 ESXi 宿主机上的文件

简单来说,虚机的每个虚拟磁盘由ESXi 宿主机上的三个文件组成(这里的虚机名字是 sammy-target-win-small,下面是其第一个磁盘对应的三个文件):

  • sammy-target-win-small.vmdk (配置文件,大小 633 字节)
  • sammy-target-win-small-flat.vmdk (二进制文件,大小 12884901888 字节)
  • sammy-target-win-small-ctk.vmdk (二进制文件,大小 78694 字节)
    其中,

第一个文件保存的是该磁盘的元数据,其中包括另外两个文件的信息

# Extent description
RW 25165824 VMFS "sammy-target-win-small-flat.vmdk"

# Change Tracking File
changeTrackPath="sammy-target-win-small-ctk.vmdk"

第二个文件是 Extent description 文件,二进制数据保存在这个文件中。下面会介绍使用API获取该文件中数据的方法。
第三个文件是 CTK 文件。下面讲到 CTK 的时候再说。

@刘世民 [云与备份之(1):VMware虚机备份和恢复](http://www.cnblogs.com/sammyliu/p/5661085.html)

1.2 虚拟磁盘类型

上一节中的磁盘组织形式并不是唯一的,早期版本的Esxi不是以这种方式组织。vddk文档中定义了8种磁盘类型,在创建虚拟磁盘时,使用不同磁盘类型,则虚拟磁盘的组织方式不同。8中磁盘类型如下:

  • VIXDISKLIB_DISK_MONOLITHIC_SPARSE – Growable virtual disk contained in a single virtual disk file. This is the default type for hosted disk, and the only setting in the Virtual Disk API Sample Code sample program.
  • VIXDISKLIB_DISK_MONOLITHIC_FLAT – Preallocated virtual disk contained in a single virtual disk file. This takes time to create and occupies a lot of space, but might perform better than sparse.
  • VIXDISKLIB_DISK_SPLIT_SPARSE – Growable virtual disk split into 2GB extents ( s sequence). These files can to 2GB, then continue growing in a new extent. This type works on older file systems.
  • VIXDISKLIB_DISK_SPLIT_FLAT – Preallocated virtual disk split into 2GB extents ( f sequence). These files start at 2GB, so they take a while to create, but available space can grow in 2GB increments.
  • VIXDISKLIB_DISK_VMFS_FLAT – Preallocated virtual disk compatible with ESX 3 and later. Also known as thick disk. This managed disk type is discussed in Managed Disk and Hosted Disk.
  • VIXDISKLIB_DISK_VMFS_SPARSE – Employs a copy-on-write (COW) mechanism to save storage space.
  • VIXDISKLIB_DISK_VMFS_THIN – Growable virtual disk that consumes only as much space as needed, compatible with ESX 3 or later, supported by VDDK 1.1 or later, and highly recommended.
  • VIXDISKLIB_DISK_STREAM_OPTIMIZED – Monolithic sparse format compressed for streaming. Stream optimized format does not support random reads or writes.
    只有vddk使用VIXDISKLIB_DISK_VMFS_FLAT类型创建虚拟磁盘时才会生成1.1节中所示的虚拟磁盘文件,使用Web Service SDK创建虚拟磁盘则不受此限制。

1.3 虚拟磁盘模式

虚拟磁盘模式分为持久跟非持久,以下为vddk中对持久的定义

  • 持久模式(persistent):In persistent disk mode, changes are immediately and permanently written to the virtual disk, so that they survive even through to the next power on.
  • 非持久模式(nonpersistent):In nonpersistent mode, changes to the virtual disk are discarded when the virtual machine powers off. The VMDK files revert to their original state.

使用vSphere client创建虚拟磁盘跟vddk的选项可能会有区别

  • 独立持久:持久模式磁盘的行为与物理机上常规磁盘的行为相似。写入持久模式磁盘的所有数据都会永久性地写入磁盘。
  • 独立非持久:关闭虚拟机电源或重置虚拟机时,对非持久模式磁盘的更改将丢失。使用非持久模式,您可以每次使用相同的虚拟磁盘状态重新启动虚拟机。对磁盘的更改会写入重做日志文件并从中读取,重做日志文件会在关闭虚拟机电源或重置虚拟机时被删除。

1.4 vCenter Server

vCenter Server相当于一套管理多台Esxi服务器的系统,如果需要对虚拟机进行备份,则需要部署这么一套系统,具体怎么部署可以参考VMware Vsphere 6.0安装部署 (三) vCenter Server安装。备份所使用的Web serviceSDK依赖这套系统,对于这套系统的使用可以参考我其他关于vSphere的文章。

1.5 vSphere Web Client

vSphere Web Client为vCenter Server提供一个web管理界面,文中关于对vCenter的操作都是在这界面上完成。

1.5 虚拟机注册

在vCenter Server中,Esxi服务器以及虚拟机以实体对象的形式存在,已有的虚拟机文件可以通过注册功能,将虚拟机文件激活成虚拟机,这里涉及到虚拟机的其他文件,可以参考什么是虚拟机?。在vCenter Server中将.vmx文件作为虚拟机,所以在vCenter Server中找到虚拟机文件,右键注册就可以了。

2. 备份要点

原文中对备份流程进行了详细说明,我这里就不再赘述,我将从以下几个方面说明备份要点。其中具体代码实现可以去我的csdn查看相关文章

2.1 如何确定虚拟机对象?

这个时候就需要使用Web service SDK去遍历vCenter Server中的虚拟机对象,并返回虚拟机的名称和在vCenter中的id,有了这两个变量,就可以确定虚拟机对象了。

2.2 如何获取虚拟机相关配置?

这一步中最重要的是拿到虚拟机磁盘对象,对虚拟机的备份,实际上是对虚拟磁盘的备份,这里还是使用Web ServiceSDk进行获取

2.3 如何获取变化数据?

原文中有提到一个API:QueryChangedDiskAreas

获取 CBT 变化块的函数的定义为:QueryChangedDiskAreas(snapshot, deviceKey, startOffSet, changeID)。其中,

  • snapshot 代表当前的快照,也就是“变化”时间段的后端点;
  • deviceKey 是目标虚拟磁盘的 device ID;
  • startOffSet 是开始获取变化块的offset;
  • changeID 是指“变化”时间段的前端点,即老的快照的 changeID。
    其结果类似 “(117768192, 65536),(132120576, 65536),(145096704, 43122688),(265289728, 65536),(958398464, 65536)”,每项的格式为 (offset,length),表示一个发生变化的数据块。
@刘世民 [云与备份之(1):VMware虚机备份和恢复](http://www.cnblogs.com/sammyliu/p/5661085.html)

使用QueryChangedDiskAreas获取到变化数据后,需要将这些数据保存下来,以供后续使用。

2.4 如何下载变化数据?

这个时候就需要vddk,vddk可以连接到远程的虚拟磁盘,并根据上一节保存的数据,将虚拟磁盘中的变化数据读取并保存下来,以供恢复使用。

3. 恢复要点

3.1 完全恢复

如果在完全备份的时候采用文件下载的形式进行备份,则在恢复的时候就可以直接将文件上传至vCenter Server然后注册虚拟机就可以了。如果备份的时候只备份了虚拟磁盘,则在恢复的时候需要使用Web Service SDK创建虚拟机,再将磁盘数据写入到新建的虚拟机中。

3.2 增量恢复

增量恢复以完全恢复为前提,每个增量点依次恢复。

3.3 其他办法

如果业务十分紧急,则可以将备份的虚拟机文件以NFS的形式挂载到vCenter Server上,通过注册虚拟机的方式进行恢复。