近日工作室处理一起ESXi虚拟平台后端存储被误操作,创建了其它文件系统并格式化,导致VMFS分区丢失的数据恢复案例。在帮助客户恢复数据后,工作室对恢复过程进行了复盘,并分享VMFS数据恢复的核心技术原理。
随着虚拟机成为云行业的支柱,VMware和VMFS也越来越受欢迎。 但是VMFS的文档和支持恢复软件有点少。根据工作室总结,虚拟平台数据恢复有以下3个深度:
- VMFS分区恢复
- VMFS虚拟机恢复
- VMDK内部文件恢复
VMFS分区定位
首先我们了解一下分区表的类型。分区表有两种基本格式:MBR和GTP。MBR最多容纳四个分区,最大支持2TB分区。 因为目前超过2TB的磁盘成为常态,特别在ESXi虚拟平台上,分区基本都超过2TB,所以通常会使用 GUID分区表(GPT),GPT最大支持18EB空间,并支持扩展固件接口(EFI)。
本案例是GPT分区格式。为了修复分区,必须要先确定VMFS卷的起始位置和结束位置。
VMFS分区结构中,定义“魔术数字”0xC001D00D标记VMFS_VOLINFO,再向前回退2048扇区,即为VMFS分区的起始位置。
这里我们需要一个十六进制编辑器,以便对十六进制或ASCII字符串进行全磁盘搜索。我们使用的是X-Ray公司的WinHex。
但是VMFS采用了little endian模式存储数据结构,因此“魔术数字”在磁盘上存储为0x0DD001C0。
本案例分区已经被覆盖,因此无法在主分区表中找到魔术数字。以下为正确GPT分区示例图:
VMFS分区重建
所以我们需要更深入了解GPT分区的结构。GPT分区结构如下:
LBA0:
在GPT分区表的最开头,出于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR叫做保护性MBR(Protective MBR)。
LBA1:
分区表头(LBA 1)定义了硬盘的可用空间以及组成分区表的项的大小和数量。以下为GPT分区表头的格式,注意为little endian:
起始字节 |
偏移量 |
内容 |
0 |
8 |
签名("EFI PART") |
8 |
4 |
修订 |
12 |
4 |
分区表头的大小 |
16 |
4 |
分区表头(92个字节)的CRC32校验,在计算时,先把这个字段写作0处理,然后计算出所有分区表项的CRC32校验后再计算这个CRC32 |
20 |
4 |
保留,必须是 0 |
24 |
8 |
当前LBA(这个分区表头的位置) |
32 |
8 |
备份LBA(另一个分区表头的位置) |
40 |
8 |
第一个可用于分区的LBA(主分区表的最后一个LBA + 1) |
48 |
8 |
最后一个可用于分区的LBA(备份分区表的第一个LBA - 1) |
56 |
16 |
硬盘GUID(在类UNIX系统中也叫UUID) |
72 |
8 |
分区表项的起始LBA(在主分区表中是2) |
80 |
4 |
分区表项的数量(windows是128,没有这么多也先占着空间) |
84 |
4 |
一个分区表项的大小(通常是128) |
88 |
4 |
分区表项的CRC32校验(计算的是所有分区表项的检验和即128*128字节) |
92 |
420 |
保留,剩余字节必须是0(420字节针对512字节的LBA硬盘) |
LBA 2–33
此位置存放分区表项。一个分区表项的前16字节是分区类型GUID,VMFS的分区类型为:0x2AE031AA0F40DB119590000C2911D1B8。接下来的16字节是该分区唯一的GUID(即分区的UUID)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。以下为GPT分区表项的格式:
起始字节 |
偏移量 |
内容 |
0 |
16 |
分区类型GUID |
16 |
16 |
分区GUID |
32 |
8 |
起始LBA(小端格式) |
40 |
8 |
末尾LBA |
48 |
8 |
属性标签 |
52 |
72 |
分区名 |
主分区表损坏时,可以用Backup 分区表恢复,我们通过魔术数字,找到备份分区表位于23437498367扇区;
一般情况我们不建设对目标磁盘有读写操作,但是为了快速恢复数据,我们在备份了磁盘首部扇区后,参照备份分区表,直接修改磁盘扇区,手动重建了VMFS分区表。
恢复VMFS虚拟主机
通过以上步骤,我们已经恢复了VMFS分区,但虚拟机文件仍然无法显示,原因是磁盘头部损坏时,也会破坏MFT,导致VMFS内的虚拟机丢失,此时我们需要有VMFS扫描功能恢复软件扫描丢失文件。
这里采用了DiskInternals VMFS Recovery恢复软件,他可以连接到虚拟平台,对虚拟平台后端的存储直接扫描并恢复数据,效率高,使用也很方便。
Step1:选择Connect ESX Storage
Step2:输入ESX(i)的IP和用户名、密码(ESX需要开户SSH访问权限)
Step3:选择需要扫描的存储
Step4:双击Hard Disk Drivers下的VMFS分区,选择扫描方式。DiskInternals VMFS Recovery支持Fast recovery(快速扫描,适用于虚拟机/文件误删除,速度较快),和VMFS Full recovery(深度扫描,适用于文件系统被破坏严重,速度较慢),本案例采用了VMFS Full recovery
Step5:恢复完成后,即可进入VMFS文件系统,恢复目标文件
在恢复数据机之前,可以通过log文件预览是否有乱码,确认数据是否受损:
DiskInternals VMFS Recovery是专业软件,在官网或淘宝有授权码。