【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

服务器数据恢复环境:

Linux系统,Ext4文件系统;

划分为2个分区:1个交换分区和1个文件系统分区。

在分析实际案例之前,我们先了解一下Ext4的相关知识。

Ext4文件系统的全部空间被划分为若干个块组,每个块组内的结构大致相同。

每个块组都对应一个块组描述符,这些块组描述符都放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,描述了块位图、i-节点位图及i-节点表的地址等信息。

超级块(Superblock)是用来存储文件系统的配置参数(如块大小、总块数、i-节点数)和动态信息(当前空闲块数和i-节点数)。Ext4文件系统的超级块(Superblock)开始于1024字节处,即2号扇区。

i节点描述文件的时间信息、大小、块指针等信息。

块组描述符和超级块在块中的位置:当块大小为2个扇区时,0号块是引导程序或者保留块,超级块起始于1号块。当块大小为4个扇区时,引导程序或者保留块位于0号块的前两个扇区,超级块位于0号块的后两个扇区。当块大小为8个扇区时,引导程序或者保留块位于0号块的0-1号扇区,超级块位于0号块的2-3号扇区。

Ext4文件系统的整体结构及第一个块组的具体结构如下图所示:

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

服务器故障&分析:

某公司Ext4文件系统umount失败,管理员执行fsck检查一致性,结果Ext4文件mount不上(有时也表现为目录变成了文件),报错信息:mount: wrong fs type, bad option,bad superblock。

因为日志和数据不一致而导致正常文件系统数据被覆盖的情况在Ext3、Ext4文件系统中发生的频率较高。由于journal日志文件保留着缓冲数据,数据恢复时可以通过joumal日志文件找到相关信息并重建源文件。

安装Linux系统的硬盘第一个扇区是MBR扇区,通过观察MBR分区表得知本案例中Linux系统分为两个分区:交换分区和文件系统分区。北亚数据恢复工程师决定通过joumal日志文件找回丢失的数据。

经过数据恢复工程师的检测分析,本案例Ext4文件系统相关信息如下:

1、块大小为固定的4KB,即8个扇区。

2、超级块(Superblock)起始位置在1024字节处,即2号扇区,大小为2个扇区。

3、块组描述表从第一个块开始,即从4096字节处开始。

服务器数据恢复过程:

1、首先用数据恢复工具将Ext4文件系统打开,发现0-23扇区的数据(包括超级块和块组描述符)被日志记录所覆盖。Ext3、Ext4文件系统的日志页以C0 3B 39 98开头。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

超级块中可以找到关于块大小的信息。从journal日志中把超级块的备份查找出来,然后再通过数据恢复工具进行超级块信息的查找,其标志是“53ef”。超级块0x18-0x1B处描述块大小,本案例块大小为4KB。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

通过超级块查看块大小。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

通过数据恢复软件的模板编辑器也可以显示块大小。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

2、重建(恢复)超级块;由于原文件系统超级块损坏,所以恢复文件时要把这部分超级块信息粘贴回去,即放在2号扇区开始或1024字节处。超级块备份的某些部分的数值可能与实际的超级块数值不一致,这种情况下需要通过数据恢复工具的模板管理器进行修改。本案例对超级块所在的第0个块组做了修改。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

3、重建(恢复)块组描述表;由于部分块组描述表被破坏,所以需要先在journal日志文件里找到所有块组描述表并把它们粘贴回去。本案例中journal日志文件里的块组描述符表存储在超级块的后面,要找块组描述表可以先找超级块,找到后将块组描述符表内容粘贴到4096字节处。

4、重建(恢复)目录;当要恢复某个文件夹里的文件时,比如kyproc文件夹里的数据,这些文件夹在WinHex里是不能打开的状态,这意味着这个目录已经损坏(下图1)。打开其节点信息,发现正常数据被日志填充(下图2)。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

找到上一级目录var文件夹,右击点“open”,打开后能看到var文件夹里的所有文件的目录信息。找到要恢复的kyproc目录的信息:12 32 EE 00是其i-节点号,10 00表示其目录项长度,06表示其文件名称长度,02表示其文件类型为目录。如下图所示。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

在var文件夹的目录块下查找kyproc目录的位置,如下图所示,标红的位置是找到的结果。此位置显示所在块号为62399108。

【服务器数据恢复】Linux环境下Ext4文件系统执行fsck后文件挂载报错的数据恢复案例

根据所在块号可以定位kyproc目录相应节点的位置。由于人工补节点比较繁琐,可以从journal日志文件里面找到其节点信息,把相应的信息粘贴回去。

通过上述方法可以重建(恢复)目录。恢复目录里的文件也是通过同样的方法从journal日志文件里找到相应的文件的节点信息,找到后粘贴回原来的位置,达到重建(恢复)文件的目的。

发表评论

相关文章