[推荐] Ext4文件系统fsck后损坏的修复过程

[复制链接]
  • TA的每日心情
    开心
    2015-4-15 14:15
  • 签到天数: 1 天

    [LV.1]布衣百姓

    22

    主题

    7

    回帖

    668

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    668
    发表于 2014-12-20 12:11:12 | 显示全部楼层 |阅读模式
    1.故障发生背景
    Ext4文件系统没有umount下来,之后做了fsck操作检查一致性,结果导致Ext4文件mount不上(有时也会表现为导致目录变成了文件)。
    报错提示信息:mount: wrong fs type, bad option, bad superblock
    2.故障原理分析
    某故障时,日志和数据不一致造成的正常文件系统数据被覆盖的现象。这种故障在Ext3、Ext4文件系统常有发生,好在.journal日志文件留有缓冲,恢复时可以从.journal日志文件里找到相应信息,并粘贴回相应位置,达到重建原文件的目的。
    3.案例重要信息
    Linux系统的硬盘的第一个扇区是MBR扇区,从MBR分区表能看出来,本案例一共有两个分区。第一个分区是交换分区,共7.8G,第二个分区是Ext4文件系统,共292G。总的大小为300G。
    Ext3、Ext4文件系统有日志功能,本案例考虑从.journal日志文件中找到丢失数据。
    1.      块大小为固定的4KB,即8个扇区。
    2.      超级块(Superblock)起始位置在1024字节处,即2号扇区,大小为2个扇区。
    3.      块组描述表从第一个块开始,即从4096字节处开始。
    4.案例重要概念
    超级块(Superblock):用于存储文件系统的配置参数(如块大小、总块数、i-节点数)和动态信息(当前空闲块数和i-节点数)。Ext4文件系统的超级块(Superblock)开始于1024字节处,即2号扇区。
    块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组内的结构都是大致相同的。
    块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,其主要描述块位图、i-节点位图及i-节点表的地址等信息。
    i节点:描述文件的时间信息、大小、块指针等信息。
    块组描述符和超级块在块中的位置:当块大小为2个扇区时,0号块是引导程序或者保留块,超级块起始于1号块。当块大小为4个扇区时,引导程序或者保留块位于0号块的前两个扇区,超级块位于0号块的后两个扇区。当块大小为8个扇区时,引导程序或者保留块位于0号块的0-1号扇区,超级块位于0号块的2-3号扇区。
    Ext4文件系统的整体结构及第一个块组的具体结构如图1所示。

    5.解决步骤
    步骤总结:
    1.通过.journal日志文件里的超级块备份找到超级块,确定块大小。
    2.通过.journal日志文件里的超级块备份找到超级块,重建超级块信息。
    3.通过.journal日志文件找到目录节点,重建(恢复)目录。
    4.通过.journal日志文件找到目录节点找到要恢复的文件的节点信息,重建(恢复)文件。
    首先用winhex打开Ext4文件系统,可以看到0-23扇区的数据(包括超级块和块组描述符)被日志记录覆盖。Ext3、Ext4文件系统的日志页以C0 3B 39 98开头。如图2所示。

    图2
    确定块大小
    超级块中有关于块大小的信息。从.journal日志中查找超级块的备份。用WinHex查找得到.journal日志中超级块的信息,其标志是“53ef”。查找超级块方式如图3所示。查看块大小方法如图4和图5所示。超级块0x18-0x1B处描述块大小,确定本案例块大小为4KB。

    图3
        通过超级块查看块大小如图4所示。

    图4
        或者WinHex模板编辑器也可以显示块大小如图5所示。

    图5
    2.      重建(恢复)超级块
    由于原文件系统超级块损坏,所以恢复文件时,要把这部分超级块信息粘贴回去,即放在2号扇区开始,或1024字节处。
    做完以上操作,超级块备份某些地方与实际的超级块数值可能不一致,需要通过WinHex的模板管理器修改一下。本案例对超级块所在的块组作了修改,它在第0个块组里。如图6所示。

    图6
    3.      重建(恢复)块组描述表
    由于部分块组描述表被破坏,所以在.journal日志文件里找到所有的块组描述表,并把它们粘贴回去。
    .journal日志文件里,如图1所示,块组描述符表存储在超级块的后面。所以要找块组描述表时,可以先找到超级块。找到后将块组描述符表内容粘贴到4096字节处。
    4.      重建(恢复)目录
    当我们要恢复某个文件夹里的文件时,比如我们需要恢复kyproc文件夹里的数据。我们发现这些文件夹在WinHex里是不能打开的状态。如图7所示。很明显这个目录损坏了,打开其节点信息,发现正常数据被日志填充,如图8所示。

    图7

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

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

    图10
    根据所在块号,就可以定位kyproc目录相应节点的位置。由于人工补节点比较繁琐,我们可以打开.journal日志文件,从里面找到其节点信息,把相应的信息粘贴回去。
    上述方法可以重建(恢复)目录,恢复目录里的文件也是通过同样的方法从.journal日志文件里找到相应的文件的节点信息,找到后粘贴回原来的位置,达到重建(恢复)文件的目的。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    本帖评分记录金子 收起 理由
    zhczf + 5 很给力!
  • TA的每日心情
    开心
    2014-12-23 15:44
  • 签到天数: 1 天

    [LV.1]布衣百姓

    0

    主题

    86

    回帖

    101

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    101
    发表于 2015-1-26 14:10:27 | 显示全部楼层
    学习了,顶一个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-19 23:26
  • 签到天数: 25 天

    [LV.4]七品知县

    0

    主题

    30

    回帖

    204

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    204
    发表于 2015-1-30 10:17:33 来自手机 | 显示全部楼层
    好文一定要支持!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-25 16:31
  • 签到天数: 378 天

    [LV.9]二品侍郎

    2

    主题

    460

    回帖

    2147

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    2147
    发表于 2015-2-21 07:20:16 | 显示全部楼层
    学习学习,支持楼主!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-25 16:31
  • 签到天数: 378 天

    [LV.9]二品侍郎

    2

    主题

    460

    回帖

    2147

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    2147
    发表于 2015-7-23 16:09:01 | 显示全部楼层
    很好的文章,支持一下!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-9 13:29
  • 签到天数: 55 天

    [LV.5]六品通判

    0

    主题

    90

    回帖

    199

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    199
    发表于 2019-5-14 20:59:46 | 显示全部楼层
    学习了,顶一个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2020-12-23 19:57
  • 签到天数: 57 天

    [LV.5]六品通判

    10

    主题

    188

    回帖

    451

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    451
    发表于 2019-9-10 19:19:34 | 显示全部楼层
    学习了,谢谢楼主
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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