效率源数据恢复论坛

 找回密码
 免费注册

QQ登录

用新浪微博登录

快捷导航
查看: 1375|回复: 0
打印 上一主题 下一主题

基于XFS文件系统的文件碎片重组恢复方法

[复制链接]

646

主题

809

帖子

3587

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3587
跳转到指定楼层
楼主
发表于 2017-3-9 18:05:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【文章来源:效率源科技(微信号)】微信号:xiaolvyuantech


编者按:随着数据恢复技术的不断发展,基于磁盘数据逻辑层恢复技术日益完善,但目前在逻辑层恢复技术中存在一项巨大的挑战,那就是当删除文件存在多段碎片的状态时,数据重组恢复将变得十分困难。本期,数据恢复四川省重点实验室科研人员将以一种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,其主要包括以下信息:

      1、superblock:描述整个文件系统的信息。

      2、空闲空间管理。

      3、inode的分配和记录管理

      在超级块superblock中记录着AG中的所有元数据信息,其中几个核心的元数据为:

      1、blocksize,文件系统中使用的block的大小,以及整个文件系统用于存放data和metadata的block个数。

      2、sectorsize,指定底层磁盘一个扇区的大小,数据的最小对齐粒度。

      3、AG_blocks/AG_count,文件系统中一个AG包含的block个数,以及整个文件系统AG的个数。

      4、inodesize/inopblock,记录inode的大小以及每个block中包含inode的个数。

      5、logstart/logblocks,如果使用同一块盘存放XFS的journal,这两个值用于表示存放journal的第一个block以及用于存放log的总block个数。

      6、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视频全能提取系统等产品中应用,取得了很好的效果。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

Copyright(C)2015-2016 四川效率源信息安全技术股份有限公司 版权所有|蜀ICP备09015844号|效率源数据恢复论坛  

GMT+8, 2024-11-24 04:25 , Processed in 0.190479 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2014 技术支持: Weixiaoduo.com

快速回复 返回顶部 返回列表