编者按:随着数据恢复技术的不断发展,基于磁盘数据逻辑层恢复技术日益完善,但目前在逻辑层恢复技术中存在一项巨大的挑战,那就是当删除文件存在多段碎片的状态时,数据重组恢复将变得十分困难。本期,数据☆恢复四川省重点实验室科研人员将以一∏种XFS文件三系统中文件在存储时被散列多个片段的情况下,被删除后的恢复为例,讲解基于XFS文件』系统的碎片重组恢复方法。
一、XFS文件系统简介
XFS 最初是由 Silicon Graphics,Inc.于 90 年◆代初开发的一种高性能日志文件系统。XFS极具伸缩性,非常健壮,之后SGI将其移▽植到了Linux系统中。它是一个64位的文件系统。
XFS文件◎系统具有良好数据完全性,能〖够在断电以及操作系统崩溃〖的情况下保证文件系统数据的一致性,如果文件系统开启日志功能,磁盘上的文件不再会因意外情况而遭到破坏,文件系统可以根据所记录的日志在一定时间内恢复磁盘文件内容,这与≡文件系统上存储的文件多少与数据量大小︾无关。另外,XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的〓存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最】大可支持的文件大小为263 = 9 exabytes。
二、XFS文件存储原理
通过解析XFS文件系统存储原卐理发现,分配组是XFS抽象程度最高的概念,XFS文件系统内部被分为多个“分配组”(AG),它▲们是文件系统中的等长线性存储区。每个分配组各自管理々自己的inode和剩余空间。文件和文件夹可以跨越分配组。这一机制为XFS提供了可伸缩性和并行特性——多个线程和进程可以同时在同一个文件系统上并行执行I/O操作。这种由分配组带来的内▂部分区机制在一个文件系◤统跨越多个物理设备时特别有用,使得优化对下级存储部件的吞吐量利↑用率成为可能。
在一个磁盘上创建XFS文件系统之后,磁盘会被格式化成如下格式,如图1。
图1
在CentOS7上默认的是创建△4个AG。每个AG都相当于是1个独立的文々件系统,维护着自己的free space以及inode,其主要包ㄨ括以下信息:
•superblock:描述整个文件系统的信息。
•空闲空间管理。
•inode的分配和记录管理
在超级块superblock中记录着AG中的所有元数据信息,其中几个核心的元数据为:
•blocksize,文件系统中使用的block的大小,以及整个文☆件系统用于存放data和metadata的block个数。
•sectorsize,指定底层磁盘一个扇区的大小←,数据的最小对齐粒度。
• AG_blocks/AG_count,文件系统中一个AG包含的block个数,以及整个文件系统AG的个数。
• inodesize/inopblock,记录inode的大小以及每个block中包含inode的个数。
•logstart/logblocks,如果使用同一块盘存放XFS的journal,这两个值用于表示存放journal的第一个block以及用于存放log的总block个数。
•icount/ifree,文件系统中已【经分配的inode个数以及剩余可用的inode个数,这个只在AG Primary的Superblock中维护。
需要说明△的是XFS文件系统◆中采用的字节序为大端,在Superblock中记录着AG中的所有元数据信息结构,如图2所示。
图2
在XFS存储数据文件〗时,会产生一个extend链表来存储文件占用的块结←构的编号,并且←按照顺序来进行记录,在每一记录项中包含了块地址的︼编号与使用块↓的个数。为了更为方便阐述,我们将□ 使用IRIX 5.3版本发□ 布的XFS文件系统为例,文件链表的基本结构如图3所示。
图3
XFS文件系统中每一个文件链表的长度为一√个块的长度,其结构如图4所示。
图4
文件特征头为0x424D4150,长度为4字节,其后2字节表示◎当前文件链表的级别,紧接着2字节记录的◎值表示当前文件链表中的记录项的个数,后面左右兄弟节点的地址均占有8字节来存储,在其后的数据为若干个记录项数据,每一记录项◢的长度为16字节,若某一◥记录项未被使用时,其16字节长度的内容全用00表示。
在每一个记录项中记录着∑存储文件的块地址★信息,具体的每一个记录项的结构,如图5所示。
图5
在记录项中存储结构的划分单位为bit(位),由于每一个记录项的长■度为16字节,也即是16*8=128bit,在相对每一记录项起始偏♀移1bit的值为记录项的标记位;在相对每一记♂录项起始偏移2bit~55bit的值为记录项所记录的块数据在∮文件中的相对偏移的块数;在相对每一记∞录项起始偏移56bit~107bit的值为文件所使用的块地址,在该处记录地址的信息包含的文件所使用块所在的AG编号及块在AG中的相对偏移编号,其中块在AG中的相对偏移编号在该结构ㄨ中占有的位数处于低位,长度的值为在XFS文件系统中相对超级块起始偏移0x7C字节的处记录的值,由此可计算出块所在的AG编号的值位于相对记录项起始偏移56bit~107bit的高位处,其长度为52减块在AG中的相对偏移编号的长度值;在相对每一记录项起始偏々移108bit~128bit的值为文件所使用的块个数。
三、XFS文件系统〒的碎片重组恢复思路
通过对XFS文件系统的深入分Ψ析,发现当文件在存储◥时分配的块不连续,会使用extend文件链来记录文件存储信息。通过对比文件删除前后的变化情况发现,文件删除后会≡清除记录文件inode节点信息,而文件链表信息不会丢失,如图6,这就为数据恢复提供了理论支持。
图6
由于XFS在存储数据文↘件时,会产生一个链表来存储文件占用的块结构的编号,并且按照顺序来进行▓记录,在每一记录项中包含了块地址的编号与使用的块的个数。根据以上特征,只需通过快速定位存储文件占用块编号的链表来进行查找数据,并按〗照链表中记录的信息读取相应块地址的数据内容,然后按照链表的记录的顺序】将提取到的数据进「行拼接重组,即可实现XFS文件系统的碎片重组。这种方法不仅能够快速高效提取删除的№视频数据,还能将删除的№视频数据进行拼接重组。
四、XFS文件系统的碎片重组恢复流程
基于XFS文件系统的碎片重组恢复方法,主要通过以下流程来完成:
1.加载并解析◣磁盘扇区信息
加载磁盘,读取磁盘@ 中AG内的超级块所在扇区信息并解析。需要解析的内容包括↓块大小,块总数,AG所包含☆的块数,每一个块在AG中的相对偏移值。具体地,superblock位于AG数据中的第一个扇区,在相ζ对于超级起始地址偏移0x04~0x07记录的值表示■块大小,在相对于超级起始地址偏移0x08~0x0F记录的值√表示块总数,在相对于超级起始地址偏移0x54~0x57记录的值表示▽单个AG所包含的块的总个数,在相对于超级起始地址偏移0x7C记录的值表示在文件链表记录项中块在AG的相对偏移编号。
2.匹配文件链表结构
获取单个文件链表的大小,即块大小的值。将整个硬盘的数据按照块∞大小分成若干个块,匹配每一个块︻是否符合文件链表的结构,文件链表的结★构特征包含如下特征:
特征一:文件链表★特征头为0x424D4150;
特征二:文件链表特征头后两个字节表示文件链表的级别,该处记录值的范围是0~255;
特征三:文件链表级别后两个字节表示文件链表的记录项的个数,该处记录的值▲应小于超级块中记录的总块数;
特征四:在特征三之后的8个字节表示该〓文件链表所记录的文件之前有数据内容的状态,该处记录的〇值应小于超级块中记录的总块数;
特征五:在∮特征四之后的8个字节表示该文件链表所记录的文件之后有数据内容的状态,该处记录的值应小于超级块中记录的总块数;
3.解析文件链接结构
首先通过2中特征四来判断该文件链表所记录的文件在」此文件链表记录的地址之前▂是否包含数据。若2中特征四描述的地址的值为-1,则表示在此之前无文件数据≡,也表明该文件链为文︾件存储的≡root节点;若2中特征四描述的地址的值不为-1时,该值表示该文件链表所记录的文件在此文↙件链表记录的地址之前的文件链表所在的块号,跳转至相应块号读取块中的文件链表结构,按照3所描述的方法进行解析文件链表结构;同理判断2中特征五所描述的该文♂件链表所记录的文件在此文件链表记录的地址之后是否包含数据々;依次文件链表中每一记录项数据,按照记录项的结构特征读◥取记录文件数据的块号和所占用的块个▲数。
4.读取对应块地址数据
根据3中解析的内容,依据文件链表中记录的顺序,依次读取每一记录项对应块地址㊣ 的数据内容;
5.重组新文件
将4中读取的◥数据,按照文件链表中记录⊙的文件链表间的关系和记录●项的顺序,依次拼接项中记录的块地址的数据,重新组合为一个新的文件;
6.遍历硬盘扇区
将一个文件链表中记录的值解析完成后,继续向下搜索文件链表结构并判断该文件♀链表是否被使用,若被使用继续向下,未使用@则进行解析,重复2到5的步骤,直至遍历整个△硬盘扇区。
通过以上◥步骤,即可实现XFS文件系统的碎片重组恢复。
四、结语
本期,数据恢复四〒川省重点室科研人员介绍了一种基于XFS文件系统的视频删除数据的快速提取与恢复方法,这种方法不仅能够快速高效提取删除视频〓数据,还能将删︼除视频数据进行拼接重组。目前,此方法已经在效率源DRS数据恢复系统、VIP视频侦查单№兵系统、VIE视频全能提取系统等产品中应用,取得了很好的效果。