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

1.确定块大小

超级块中有关于块大小的信息。从.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日志文件里找到相应的文件的节点信息,找到后粘贴回原来的位置,达到重建(恢复)文件的目的。

linux系统fsck.ext4,Ext4文件系统fsck后损坏修复过程一例相关推荐

  1. 嵌入式linux系统中常用的文件系统

    原文:https://blog.csdn.net/li_wen01/article/details/80090624 嵌入式linux系统中常用的文件系统: 闪存主要有NOR和NAND两种技术:因为F ...

  2. linux下efs加密技术,在Linux系统中的加密文件系统应用(EFS)

    在Linux系统中的加密文件系统应用(EFS) 开源系统在企业中尤其是在服务器的构建和数据存储中得到了普遍的应用和推广,其安全问题得到了大家的关注.基于这些考虑,开源系统在数据安全方面提供了许多优秀和 ...

  3. linux系统可支持多种文件系统类型,Linux文件系统类型简介及支持的文件系统汇总--Linux入门到精通系列...

    不同的操作系统需要使用不同类型的文件系统,为了与其他操作系统兼容,以相互交换数据,通常操作系统都能支持多种类型的文件系统,比如Windows 2000 Server,系统默认或推荐采用的文件系统是NT ...

  4. Linux系统如何支持NTFS文件系统?

    由于Linux系统默认是不支持NTFS文件系统的,因此,我们基本不能在Linux系统中挂载NTFS文件系统类型的硬盘或移动硬盘. 为此,最主要的问题是如何使Linux系统支持NTFS文件系统. 一般情 ...

  5. 解决Linux系统在设置alias命令重启后失效的问题

    解决Linux系统在设置alias命令重启后失效的问题 参考文章: (1)解决Linux系统在设置alias命令重启后失效的问题 (2)https://www.cnblogs.com/zhoading ...

  6. 关于Linux系统中的ext4文件系统制作命令的学习与理解,make_ext4fs 参数介绍。

    使用的工具是make_ext4fs   例子:make_ext4fs -s -l 3141572800 -a root -L linux system.img system 在网上查看了些质料对该命令 ...

  7. Linux系统(一)文件系统、压缩、打包操作总结

    序言 当前的形势,.Net已经开源,.Net Core 正在跨平台,可见微软巨人在努力,在改变,在进步,在走向春天.从前被微软供作上帝的.Net从业者,如果不打开心扉面向开源,改变自己,那么很可能在不 ...

  8. Linux系统下如何实现文件系统配额

    1.配额又称为限额,针对的是分区,不是用户也不是文件,更不是整个硬盘: 2.内核版本必须是2.4以上才支持:查看内核是否支持配额. 3.root是不受配额限制的,只有普通用户才受限制: 4.配额中的术 ...

  9. Linux系统工程师--(4)网络文件系统

    Linux系统工程师 实验所用系统为Redhat-rhel8.2. 目录 Linux系统工程师 Linux系统工程师--网络文件系统 一.samba服务简介 二.samba基本信息 三.samba的安 ...

  10. linux initrd模式,在Linux系统上开启Initrd文件系统的方法

    initial RAM disk Linux初始RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程.initrd文件中包含了各种可执行程序和驱动程序,它们可 ...

最新文章

  1. AOP的两种实现方式
  2. Apollo进阶课程㉗丨Apollo控制技术详解——控制理论
  3. JS 原型对象(prototype)
  4. 脚注交叉引用序号不一样_利用Word的尾注来做参考文献的注释编号--解决编号加方括号,交叉引用,去除尾注上访横线等问题...
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的宠物寻回系统
  6. python格式输出占四列左对齐_python – 打印字符串左对齐,固定宽度和后缀
  7. CSS3中3D综合应用及分析
  8. 5条线程轮流打印1~100
  9. 中职生c语言搜题软件,适合法考学生用的搜题软件,这几款帮你搞定!
  10. ESP8266使用入门教程
  11. layui 模板使用
  12. 镜像加速器——使用加速器可以提升获取Docker官方镜像的速度
  13. 局域网聊天软件源代码(包括语音聊天)
  14. 如何使用vue开发公众号网页
  15. 南卡Lite Pro蓝牙耳机体验
  16. 仿QQ-----开发工具vs2005 相关下载
  17. python--真气网监测站点数据的抓取
  18. Skype的服务器架构
  19. 上海无纺布制造商【盈兹】申请纳斯达克IPO上市,募资1100万美元
  20. 浅析android 四大布局

热门文章

  1. codeblocks12.11汉化方法(汉化包的使用)
  2. 用计算机发传真,用电脑怎么发传真
  3. 饥荒联机版服务器启动慢_饥荒联机版大型攻略——简介与目录
  4. ffmpeg学习笔记(2)-YUV420算法原理
  5. JsessionId简介与过滤
  6. 【Android】_MediaServer_仿网易云音乐播放器1(指针和唱片)
  7. 有哪些令人骄傲的国产软件或应用?这5款你一定不知道!
  8. React 18 超全升级指南
  9. vbs教程《变量使用》
  10. STM32F107的时钟设置