关于虚拟机快照文件被删除的恢复方式跳跃性较强,且没有名词解释,导致产生歧义。为了验证方案可行性,工程师特别对此类案例进行了案例还原,来分步演示虚拟化平台SeSparse数据恢复方法,具体数据恢复演示过程如下。
1、搭建环境 在虚拟化平台创建虚拟机(父盘VMDK大于2T),为了后期导出进行观察,创建模式为精简。
2、在新建的虚拟机内写入文件,便于观察快照索引与父盘数据之间的联系。
3、创建快照文件,再写入部分数据,以备验证修改后快照内数据存储方式与索引之间的联系。
4、虚拟机部分操作完毕,关机准备对原VMDK文件和快照文件进行分析。(因为数据存储内有虚拟机,无法卸载数据存储,进行了强制断电)
5、使用恢复软件打开硬盘,准备导出VMDK文件和快照文件。结果发现原VMDK导出后变为0KB,快照文件则顺利导出,实验步骤中断。
6、根据现象进行猜想,可能是数据量太小,没有及时写入VMDK。使用快照文件进行了恢复,原意是要对VMDK文件进行写入,扩大数据量。结果发现恢复后新增一个VMDK文件,且新写入的数据都存储于此文件中。(结论:根据快照进行恢复后,新增数据并未写入原VMDK文件,而是以快照断点为起始,做了一个新的快照文件,之前的快照文件被删除)
7、进行了删除快照操作(通过虚拟化平台正常删除而不是直接删除快照文件),发现快照和原VMDK进行了合并,数据区内容被写入VMDK盘内。
8、重复1~4发现,在关机状态下创建快照,只是简单生成了1M大小文件。在开机后,快照文件变为23M,说明创建快照文件索引应该是在虚拟机开启状态下才会进行。
9、使用恢复软件提取VMDK文件发现仍然无法提取成功(提示Unable to open file),改用北亚虚拟化软件by_vmfs提取程序提出VMDK文件。
10、开始分析:
(1)根据头部信息,分别提取 high_idx 和 low_idx 、全局位图区、全局索引区、数据区
(2)快照文件预分配除数据区之外的所有区域
(3)低地址区域索引最大只能索引相当于原VMDK文件大小的数据区。
11、根据文档中给出的索引规则和实际情况,证明了快照文件恢复无法依赖父盘数据,最多能遍历父盘数据块和索引得知哪些块发生了变化。原因如下:
高位区跳转低位区必须依赖父盘块号;
低位区指针跳回高位区亦不可行(单向指针);
根据高位区域指针跳转父盘块号不可行,父盘块号标明了高位区域的指针位置(单向指针)
12、如图,根据文档中的数据推导算法,第一步必须知道父盘块号,才能找到它在快照文件中的块对应位置。快照文件被删除后,唯一能直接找到的只有快照头。
根据父盘块号和高位区域的索引,可以得到低位区域的所有编号(也就是低位索引的相对位置)。根据特征,可以通过扫描的方式找到全局位图区、低位索引区、全局索引区。由于1G块数较少,可以遍历拼接(多种内部相对位置关系)。但是数据区无法找到,无法确定父盘中的某一块在更新后写入了什么文件,无法根据文件特征进行数据块排序。根据实验结果来看,写入的数据在文件内是连续的(单进程写入),不过对拼接基本无作用。
虚拟化数据恢复结论:快照文件删除后,依据现有算法无法恢复快照文件内的数据区部分(文档内也只有恢复索引的方案,不过索引恢复可以直接根据其特征进行搜索排序,与地址转换无关)。小于2T快照恢复方案在处理数据区这部分也是一笔带过的,是块号、文件内偏移还是其他方式不得而知。下步方案只能参考VMFSSparse快照恢复程序中关于二级索引跳转数据区时,如何判断哪些数据块是属于本文件/数据区1G块排序方式了。