虚拟化文件系统VMFS有损数据恢复方法实现及原理

2019-03-07 05:22张宇
电脑知识与技术 2019年36期

摘要:该文介绍了一种利用VMFS固有系统信息完成数据丢失或损坏的情况下的数据提取方法。首先阐述VMFS的文件系统结构、各管理组件特性、功能和数据寻址原理,然后介绍各类常见数据丢失情况所导致的底层数据变化方式,最后给出应对于各种数据丢失场景下的恢复方案。

关键词:VMFS;ESXi;数据恢复技术

中图分类号:TP3 文献标识码:A

文章编号:1009-3044(2019)36-0059-02

自1946年世界上首台电子计算机问世至今已有60年之久,在此期间硬件发展速度遵循甚至超出摩尔定律的预期。如此快速的发展让计算机在高精尖领域大放光彩,但是在对性价比要求较高的民用领域,高性能物理硬件性能过剩和老旧硬件性能不足等问题逐年彰显。

在20世纪六七十年代IBM发明了操作系统虚拟机技术,此技术利用大型机高性能硬件的快速反应速度,在单台服务器上安装多个操作系统并发提供给不同用户使用,虚拟化操作系统雏形初现。但这种技术只适用于大型机,应用范围很小,无法满足中小型企业的需求。直到1999年,VMware公司在x86平台上推出商业虚拟化软件ESXi,虚拟化技术才开始普及到计算机领域内的各行各业,此虚拟化平台所使用的文件系统正是VMrs。由于其应用范围的不断扩展,在使用过程中由于不可抗力和人为因素导致的数据丢失案例也呈现出上升趋势。根据故障发生频率,本文着重讨论误删除和格式化这两种情况下的数据恢复方案。

1 VMFS卷結构及各组件功能

VMFS在历史上共出现了三个版本,分别为VMFS3、VMFS5和VMFS6,当前市面上常见版本为VMFS5。在VMFS5文件系统内,存储结构按照其在卷内出现顺序大致可分为三个区域:保留区、元文件区以及用户数据区。保留区一般用0填充不使用,元文件区主要存储管理VMrs卷的各元文件,包括vh.sf、.fdc.sf、.sbc.sf、pbc.sf、.fbb.sf、.pb2.sf。用户数据区会以数据块为单位记录用户写入的绝大部分数据(有部分小文件的数据会存在元文件内)。

除.vh.sf外,其余元文件都是由文件头和AREA组成。文件头内记录本元文件内子块的大小、头部大小以及AREA个数、每个AREA内的entr个数等信息,可用于解释本元文件。AREA内部又被划分为两部分:entr和子块组。entr个数与子块组个数相同,在entr内会记录对应子块组内子块的使用情况,某个子块被文件系统使用时会在entr内标记为已使用;子块被释放时,entr内的使用标记改为未使用,但不会清理该子块内数据。

1.1.vh.sf

.vh.sf主要用于记录本逻辑卷(Logic Volume)的版本号、全局唯一标识码、逻辑卷名称以及当前VMFS卷内所使用的默认数据块单位大小等。此元文件只在VMFS初始化过程中被写入信息,在文件系统运行过程中不再使用。

1.2.fdc.sf

.fdc.sf用于记录本逻辑卷内所有文件的节点(node)信息,一般在VMFS初始化过程中确定其存储位置,以下简称为fdc。本元文件内会记录各个目录、用户文件和系统源文件的属性信息,这些信息包含节点编号、硬链接数、节点类型(目录/文件/元文件)、文件大小、创建时间、最后修改时间、最后访问时间以及顶层指针,顶层指针含义稍后会在文件系统工作原理部分阐述。此外,VMFS卷为节省空间会将小于1024字节的小文件直接存储在节点内。

1.3.sbc.sf

.sbc.sf'用于记录本逻辑卷内所有目录的目录项(不包含根目录,根目录有其固定存储位置)以及大于1024字节小于8192字节的文件数据,以下简称为sbe。某个目录下的文件或子目录的目录项会以140字节为单位紧凑存储于该目录的目录区,目录项内会标明下层文件或目录的节点id、文件类型和文件名。

1.4.pbc.sf

.pbc.sf用于记录次级指针,以下简称为pbc。当pbc某个文件的节点内无法存储所有指针的情况下会产生指针树,并将树的顶点存储于节点内,同时将树的枝十节点和叶节点存储于pbc内。最终寻址时需要从pbc内提取该文件的所有叶节点,才能完整获取该文件的所有数据。Pbe子块大小一般为4096字节,可存储1024条数据指针,且每个子块内指针全部指向同一个文件。

1.5.fbb.sf

.fbb.sf用于记录当前VMFS卷内的数据块使用情况。此文件内用位图的方式标记当前卷内各个数据块是否已被分配以达到快速分配数据块的目的。

1.6.pb2.sf

.pb2.sf在VMFS5内未使用,预留待扩展。

2 VMFS卷数据寻址原理

VMFS在卷内查找一个文件时首先在固定位置找到根目录,读取根目录下各目录项信息,根据目录项内记录的节点编号跳转到fdc查找节点并判断文件类型。如果是目录跳转到sbe元文件内读取该目录的目录区以获得该目录下各文件的目录项,根据目录项内记录的节点编号继续判断节点类型;如果是文件则判断文件大小,并按照不同存储位置读取出数据(文件存储规则见图1)。深度为3的指针树最大可存储256TB的单个文件,已满足当前操作系统绝大多数使用情况。

3常见故障对底层元数据影响

3.1文件误删除对底层元数据影响

在研究过程中采用对比分析法对VMFS卷内文件删除前后元文件内部变化情况进行对比,多次测试结论均相同。当文件被删除时,该文件的节点内硬链接数被置0。此外,文件小于1KB时,节点内文件数据被0覆盖;文件大于1KB时,所有节点内的指针均被删除覆盖;文件大于256MB时,次级指针和叶级指针所在元文件的子块被标记为未用状态,但子块内数据不清零;文件大于256GB时,除叶级节点指针外上层指针全部清零,此时该文件留存于系统中的信息仅包含直接指向数据块的数据指针。

3.2 VMFS卷误格式化对底层元数据影响

在研究过程中采用对比分析法对VMFS卷格式化前后元文件内部变化情况进行对比,多次测试结论均相同。除重置各元文件所产生的开销外各元文件基本无变化,根目录下前9个目录项(对应于各元文件的目录项)被重置。无数据写入时根目录下第10个目录项之后的所有目录项均可按照正常VMFS卷工作原理查找提取文件,在格式化后的卷内写入文件时会覆盖根目录下目录项。

4数据恢复方案

4.1文件误删除恢复方案

文件误删除恢复方案根据文件大小可分为多种:文件小于1KB时,由于文件数据被清零,此类情况无法恢复;文件小于8KB大于1KB时,文件数据存储于sbe元文件内,可通过查找sbc内被标记为未用状态的子块和文件特征值来寻找对应数据块(文件特征值是指某些固定类型文件头部会有MAGIC_NUM-BER标志);文件大于8KB小于256MB时由于节点内指针被清零,文件非明文或特定格式文件时无高效恢复方案。

重点为恢复大于256MB文件,一般特指虚拟磁盘。常见的虚拟化架构为ESXi服务器创建VMFS卷后在卷内创建虚拟机供用户使用。创建的虚拟机会在VMFS卷的根目录下创建与虚拟机名称完全相同的文件夹,并将虚拟机各组件文件存放在此目录下。在常规物理计算机内记录数据的设备为硬盘,而承载虚拟机内数据的是被称为虚拟磁盘的大型文件,后缀名VM-DK。当虚拟机被删除时,该虚拟机对应的文件夹下所有文件会全部被删除。由于记录虚拟机内数据的文件是VMDK,只要将此文件恢复即可。

VMDK文件结构与普通物理磁盘的分区结构完全相同,头部有MBR或GPT分区标识。由于文件删除清空了上层指针,只能依赖叶级指针块完成该文件的碎片拼接。叶级指针块大小为4KB,会连续记录1024条数据指针,每条指针又指向IMB数据块,因此删除VMDK可看作将文件切分为以1GB为单位的数据块。分析pbc元文件,将标记为未用(即已被释放)的子块取出。由于每个子块都可包含1024条指针,取出所有指针对应数据块即可获取到1GB碎片。且VMFS文件系统数据分配是以1MB为单位进行对齐,指向每个大于256MB文件的文件头部的直接指针一定是子块内的第一条(见图2),读取所有1GB碎片头部信息判断是否为磁盘头部。

找到VMDK头部数据块后可根据磁盘大小来判别是否是需要恢复的磁盘文件。当磁盘采用GPT分区格式时,计算GPr头与GPT头备份之间的扇区数可得到该VMDK的大小;采用MBR分区格式时,计算各分区容量总和可得。确定需要恢复时,根据VMDK分区内文件系统类型及其内部结构获取各目录和文件在分区内的偏移量以及在VMDK文件内的偏移量。假设将VMDK文件从头部起始切分为若十个IGB碎片,计算各目录或文件在IGB碎片内的偏移。遍历所有文件和目录与IGB碎片,利用各文件或目录特征值及其在碎片内的偏移完成匹配工作。未找到的数据块可能为文件系统未用空间,直接用IGB大小的0进行填充即可。

以上方式适用于文件系统入口位于磁盘头部的所有文件系统。对于某些特殊的文件系统有更多匹配标志的,可增加恢复成功率,例如NTFS的文件记录号等文件唯一性标识。

4.2 VMFS誤格式化恢复方案

误格式化一般指同参数格式化,即VMFS格式化为VMFS,分区大小不变,分区起始位置不变,此类情况下由于元文件信息重置无法正向解析整个文件系统。由于VMFS元文件在格式化时一般会预留足够大小的空间,格式化不会变更文件大小以及分配位置,但会清空entr内子块使用标志位。获取根目录下除元文件外其余目录或文件信息,并按照对应的指针直接跳转到对应子块进行解析即可获取由于格式化原因导致丢失的文件数据。

对应于VMFS文件系统被格式化为其他文件系统而言,由于VMFS元文件分配位置不处于分区头部,一般不会被覆盖。查找VMFS卷特殊标识确定分区起始,按照正向解析流程完成解析即可获取丢失文件。

5总结

VMFS在正常运行中应及时注意空间使用情况,操作时更是需要仔细,尽量避免由于人为因素导致数据被删除的情况发生。如果发生数据丢失情况,应立即关闭ESXi服务器或卸载数据存储,以免后续写入数据覆盖被删除文件。数据脱离生产环境后应及时进行数据备份,以免恢复过程中对数据造成二次破坏,及时开展恢复流程即可。

参考文献:

[1]管建超.基于VMware VMFS的研究及备份实现[J].ELEC-TRIC POWER IT,2011,9(7).

[2]顾景民,时阳.V Mware服务器虚拟化中的热备与恢复技术[J].科技视界,2016(4).

[3]宋发平.V Mware服务器虚拟化在建设新一代企业数据中心中的运用研究[J].电子制作,2017(9).

【通联编辑:张薇】

收稿日期:2019-09-25

基金项目:国家重点研发计划重点项目:物证检验质量保证与量值溯源关键技术研究(2018YFC0807305)

作者简介:张宇(1978-),男,山西人,本科,从事有损大容量存储数据重组分析技术研究与系统开发研究。