VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案
目录
前文列表
VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析
VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解
VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析
VMware 虚拟化编程(4) — VDDK 安装
VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一
VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二
VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
VMware 虚拟化编程(8) — 多线程中的 VixDiskLib
VMware 虚拟化编程(9) — VMware 虚拟机的快照
VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT
全量备份数据的获取方式
首先需要声明的是,无论是获取全量数据还是增量数据,其面向操作的对象都是虚拟磁盘,而非虚拟机。
获取 VMware 虚拟机的全量备份相对简单,通常有以下两种方式:
方式一:直接使用 VixDiskLib 来备份虚拟磁盘的所有内容,这种方式的缺点在于,对于「精简置备」或「厚置备延迟置零」的虚拟磁盘而言,实际上需要备份的数据可能远小于虚拟磁盘中所含有的数据。因为虚拟磁盘中有些数据可能只是没有被擦除,非当前虚拟机所实际拥有的数据。
方式二:
changeId='*'
的 QueryChangedDiskAreas 调用,可以获得虚拟磁盘的全量数据。「*」表示 QueryChangedDiskAreas 应该返回虚拟磁盘中实际已分配的数据块偏移量,这里解决了方式一的缺陷。但需要注意的是,QueryChangedDiskAreas 获得的是已修改数据块的偏移量,而非实际的数据,仍然需要结合 VixDiskLib 来取得实际的磁盘数据。
NOTE:对于「厚置备置零」的虚拟磁盘来说,方式二和方式一的效果是等同的。
增量备份数据的获取过程
- Step 1:对虚拟机执行第一次快照,并获取全量数据。
- Step 2:通过 vShpere WS API
VirtualDisk.getBacking.getChangeId
来取得 Step 1 中所创建快照的虚拟磁盘的 ChangeId。 - Step 3:对虚拟机执行第二次快照。
- Step 4:调用 vShpere WS API
QueryChangedDiskAreas
,并传入从 Step 2 取得的 ChangeId、从 Step 3 创建的快照 moRef 和指定虚拟磁盘的唯一 ID 作为实参。如此就能够获得自第一次快照时间点(前端点)到第二次快照时间点(后端点)之间,该虚拟磁盘的已修改数据块的偏移量。 - Step 5:结合 Step 4 获得的已修改数据块偏移量和 VixDiskLib 所提供的的 VixDiskLib_Read 函数就能够取得该虚拟磁盘的增量数据。
- Step 6:逐一对虚拟机所含有的虚拟磁盘重复 Step 2,4,5,最终获得虚拟机完整的增量数据。
NOTE:从上述过程可知,在多磁盘场景中,虚拟机的一个快照数据文件中可能包含了该虚拟机所有虚拟磁盘的增量数据。所以当我们使用 VixDiskLib_ConnectEx 并 VixDiskLib_Open 一个快照之后,还需要根据不同虚拟磁盘的已修改数据块偏移量来 VixDiskLib_Read 出其中属于该虚拟磁盘的那一份增量数据。
VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案的更多相关文章
- VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
目录 目录 前文列表 将已存在的虚拟机恢复到指定时间点 恢复为新建虚拟机 灾难恢复 恢复细节 恢复增量备份数据 以 RDM 的方式创建虚拟磁盘 创建虚拟机 Sample of VirtualMachi ...
- VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计
目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...
- VMware 虚拟化编程(9) — VMware 虚拟机的快照
目录 目录 前文列表 VMware 虚拟机的快照 快照的执行过程 删除快照 快照类型 Quiseced Snapshot 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDis ...
- VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT
目录 目录 前文列表 数据块修改跟踪技术 CBT 为虚拟机开启 CBT CBT 修改数据块偏移量获取函数 QueryChangedDiskAreas changeId 一个 QueryChangedD ...
- VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析
目录 目录 前文列表 VMware vSphere Web Services API VMware vSphere Web Services SDK vSphere WS API 中的托管对象 Man ...
- VMware 虚拟化编程(14) — VDDK 的高级传输模式详解
目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...
- VMware 虚拟化编程(12) — VixDiskLib Sample 程序使用
目录 目录 前文列表 vixDiskLibSample 安装 Sample 程序 Sample 程序使用方法 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/V ...
- VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_GetMetadataKeys VixDiskLib_ReadMetadata 获取虚拟磁盘元数据 VixDiskLib_ ...
- VMware 虚拟化编程(4) — VDDK 安装
目录 目录 前文列表 VDDK 安装 VDDK 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编程(2) - 虚拟磁盘 ...
随机推荐
- POJ 3414 Pots (BFS/DFS)
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7783 Accepted: 3261 Special Ju ...
- easyUI相关文件的引入
引入以下内容: <head> <meta http-equiv="Content-Type" content="text/html; charset=u ...
- Apache 配置外网站点
基于域名,一般是对外网站 www.etiantian.org/var/www/html/www blog.etiantian.org /var/www/html/blog bbs.tiantian.o ...
- 关于tomcat NoClassDefDoundErr异常的记录
在做DRP项目的时候,copy了drp1.3,粘贴重命名成drp1.4,把drp1.4加入到tomcat中,发现drp1.4中新加的jsp可以正常运行,而从1.3那copy来的不能运行,抛出NoCla ...
- 牛客练习赛14 E - 无向图中的最短距离 (bfs+bitset)
一个链接:https://ac.nowcoder.com/acm/contest/82/E来源:牛客网 无向图中的最短距离 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144 ...
- shell脚本中oldIFS=$IFS
https://blog.csdn.net/champwang/article/details/54670293 转自https://man.linuxde.net/shell-script/shel ...
- du df的用法
1,两者区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在 的,没有被删除的.他计算的大小就是当前他认为存在的所有文件大小的累加和. df, ...
- 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)
其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用核心就是用localStorage存.取数据,这样 ...
- springboot 集成oss
集成aliyun oss 结构如下: pom.xml <dependency> <groupId>org.springframework.boot</groupId> ...
- 用Java写一个递归遍历目录下面的所有文件
java获取文件的属性如文件大小和修改时间: long mysize = file.length();long lastModified = file.lastModified();System.ou ...