本文共 1099 字,大约阅读时间需要 3 分钟。
首先需要声明的是,无论是获取全量数据还是增量数据,其面向操作的对象都是虚拟磁盘,而非虚拟机。
获取 VMware 虚拟机的全量备份相对简单,通常有以下两种方式:
方式一:直接使用 VixDiskLib 来备份虚拟磁盘的所有内容,这种方式的缺点在于,对于「精简置备」或「厚置备延迟置零」的虚拟磁盘而言,实际上需要备份的数据可能远小于虚拟磁盘中所含有的数据。因为虚拟磁盘中有些数据可能只是没有被擦除,非当前虚拟机所实际拥有的数据。
方式二: changeId='*'
的 QueryChangedDiskAreas 调用,可以获得虚拟磁盘的全量数据。「*」表示 QueryChangedDiskAreas 应该返回虚拟磁盘中实际已分配的数据块偏移量,这里解决了方式一的缺陷。但需要注意的是,QueryChangedDiskAreas 获得的是已修改数据块的偏移量,而非实际的数据,仍然需要结合 VixDiskLib 来取得实际的磁盘数据。
NOTE:对于「厚置备置零」的虚拟磁盘来说,方式二和方式一的效果是等同的。
VirtualDisk.getBacking.getChangeId
来取得 Step 1 中所创建快照的虚拟磁盘的 ChangeId。QueryChangedDiskAreas
,并传入从 Step 2 取得的 ChangeId、从 Step 3 创建的快照 moRef 和指定虚拟磁盘的唯一 ID 作为实参。如此就能够获得自第一次快照时间点(前端点)到第二次快照时间点(后端点)之间,该虚拟磁盘的已修改数据块的偏移量。NOTE:从上述过程可知,在多磁盘场景中,虚拟机的一个快照数据文件中可能包含了该虚拟机所有虚拟磁盘的增量数据。所以当我们使用 VixDiskLib_ConnectEx 并 VixDiskLib_Open 一个快照之后,还需要根据不同虚拟磁盘的已修改数据块偏移量来 VixDiskLib_Read 出其中属于该虚拟磁盘的那一份增量数据。
转载地址:http://eilvl.baihongyu.com/