虚拟机数据恢复环境:

架构在一台DELL服务器上的存储使用FreeNAS来做iSCSI;

另外两台DELL服务器做ESXi虚拟化系统(共5台虚拟机);

FreeNAS是UFS2文件系统,整个存储建一个稀疏模式的文件,挂载到ESXi系统。

ESXi虚拟化系统中最重要的3台虚拟机基本情况:

一台windows server系统,内部数据为该公司的门户网站,ASP.net+PHP混合构架,数据库:SqlServer+mysql。

一台为FreeBSD系统,存储Mysql数据库,供其它多台虚拟机使用。

一台为windows server系统,存储此公司新开发的程序代码。


虚拟机故障情况:

一次意外断电后,ESXi系统连接不上存储。经过检查后发现FreeNAS中的UFS2文件系统出现问题。管理员用fsck修复文件系统。修复完成后ESXi系统可以连上存储,但ESXi系统不能识别到原来的数据存储和VMFS文件系统。管理员联系我们数据恢复中心进行数据恢复。


【虚拟机数据恢复】FreeNAS+ESXi数据恢复案例_数据恢复


虚拟机数据恢复过程:

本案例的应用构架层次:FreeNAS(UFS2文件系统–> 一个稀疏模式的文件) –> ESXi(VMFS文件系统层) -> 单台虚拟机的虚拟磁盘 (windows-NTFS文件系统/FreeBSD-UFS2文件系统)。

1、镜像FreeNAS层。整个存储的文件就是一个名称为iscsidata的900+GB的文件。

2、通过UFS2文件系统的二进制结构,定位到iscsidata文件的Inode数据,数据恢复工程师发现此文件被重建过,inode指针指向的数据量很少。FreeNAS层的问题无法解决,就无法进入到下一步的VMFS层分析。

收集UFS2文件系统的重要结构:

块大小:16KB

Segment大小:2KB

柱面组大小:188176KB

UFS2一个数据指针占8字节,一个块可存储2048个数据指针,一个二级指针块可存储:2048*2048*16KB= 64GB数据,一个三级指针块可存储64GB*2048= 128TB数据。如果能找到iscsidata文件的三级指针块就能解决FreeNAS层的问题。iscsidata文件重建过,推断有部分指针块已被覆盖。原始iscsidata文件的inode和新建iscsidata文件的 inode就在一个位置,数据恢复工程师尝试搜索没有发现其它有用的inode,只能编写程序收集有用的指针块:

【虚拟机数据恢复】FreeNAS+ESXi数据恢复案例_虚拟化数据恢复_02


3、由于iscsidata文件是使用稀疏模式,放宽程序的收集条件,收集到大量三级指针块和二级指针块。

4、对所有收集到的三级指针块进行分析,数据恢复工程师发现这些指针块都是无效的,没有发现iscsidata文件使用的三级指针块。数据恢复工程师推断出现这种情况是因为在新建iscsidata文件时被覆盖(新的iscsidata文件在挂载到ESXi后有个VMFS格式化过程,而本案例中的ESXi版本 使用的是GPT分区,GPT分区会在磁盘最后写入冗余的GPT头和分区表信息数据,这样会使用iscsidata文件的三级指针块)。

5、数据恢复工程师分析收集到的二级指针块,对有大量的二级指针块的指向数据进行DUMP,然后再从磁盘中的数据定位到二级指针。通过这种方式获得大量DUMP的数据。

6、分析VMFS层。因为管理员格式化过VMFS,原始UFS2的指针已丢失,VMFS元文件基本上不可用,无重要参考信息。所幸虚拟机都有快照,仍可恢复。通过单台虚拟机层(windows(NTFS)和 FreeBSD(UFS2)系统的文件系统结构)向上定位到VMFS层,再通过VMFS层定位到DUMP出的单个64GB 文件。通过多次组合,最终将这三台重要的虚拟机的虚拟磁盘数据完全恢复出来。

7、将恢复出来的网页数据和数据库数据上传到新构建的系统中,拉起应用,没有发现任何问题。历时4天,数据恢复完成。

【虚拟机数据恢复】FreeNAS+ESXi数据恢复案例_ESXi数据恢复_03