一例Ext4文件系统fsck后损坏的修复过程
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日志文件里找到相应的文件的节点信息,找到后粘贴回原来的位置,达到重建(恢复)文件的目的。
转载于:https://www.cnblogs.com/sanyuanempire/p/6168726.html
一例Ext4文件系统fsck后损坏的修复过程相关推荐
- Ext4文件系统fsck后损坏的修复过程-linux数据恢复
在数据恢复案例开始之前有几个概念需要了解 块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组内的结构都是大致相同的. 块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系 ...
- linux ext4文件系统超级块损坏修复
前言 误操作 dd if=/var/www/html/admin.php of=/dev/sdb 之后系统报磁盘空间不足,意识到出事了 解决 debugfs -w /dev/sdb 返回,/dev/s ...
- mysql ext3 ext4_给你一个惊喜:EXT3/EXT4文件系统数据删除后的数据恢复
所谓的日志型文件系统,就是文件系统中做了什么操作,操作系统就把它记录下来,比如创建一个新文件,操作系统会在日志文件中记录下来, 删除一个文件,操作系统也会在日志文件中记录下来,记录的信息包括文件名称. ...
- linux系统fsck.ext4,linux – 如何在fsck之后恢复损坏的ext4文件系统?
我在软件raid5上有一个ext4文件系统.当我开始耗尽空间时,文件系统运行"好了"好几年了.我在6x2T硬盘上有9T的音量.我开始通过执行mdadm失败,删除,添加,重建,重复过 ...
- android ext4 损坏,EXT4文件系统损坏导致的实例无法启动的排查与修复
现象 某现网局点进行POC时,发现某DN core掉,且一直无法启动. core文件堆栈和dn的pg_log日志中的堆栈信息一致. 堆栈中显示 checkpoint 时进行 buffer 落盘时导致c ...
- Linux文件系统中错误的是,linux – ext4文件系统损坏 – 可能是硬件错误?
我打开电脑约半小时后,我在dmesg中收到这些错误: [ 1355.677957] EXT4-fs error (device sda2): htree_dirblock_to_tree: inode ...
- Ext4文件系统修复
Ext4文件系统修复 目录 一. super block........................................................................ ...
- Ext4文件系统架构分析(一)
本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外.整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等 ...
- ext4 文件系统新特性
Ext4的名称来源于4th extended filesystem,它是广泛应用于Linux的Ext3文件系统的后继.同Ext3类似,Ext4也是日志文件系统.而与Ext3仅仅是将日志功能加入到Ext ...
- linux重新识别逻辑卷,linux – 从已删除的LVM逻辑卷恢复ext4文件系统的任何方法?...
前几天,当我在Vmware下的 Linux客户端上扩展磁盘时,我有一个适当的大脑放屁时刻.我将Vmware磁盘文件扩展到所需的大小然后我做了我通常在没有LVM的Linux客户端上做的事情:我删除了LV ...
最新文章
- 打印swift 变量的类型
- uniapp自定义顶部导航组件
- Java实现单链表的逆转置
- MySQL之常用函数
- Android之奔溃提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap
- Linux 脚本文件中开头的#!/bin/bash和#!/bin/sh是什么意思
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述
- LwIP之动态内存堆
- 鼠标方式自动弹出内容html,html 在一个超链接上面,鼠标移动上去时,也显示一串文字,如何实现...
- MapReduce之如何给运行在YARN上的MapReduce作业配置内存
- 关于@media不生效的问题和meta总结
- Java 基础 匿名对象
- Interpreting Attributions and Interactions of Adversarial Attacks论文解读
- Linux忘记密码修改密码
- 照片放大不清晰怎么处理
- 参数化三维管网建模系统MagicPipe3D
- 人工智能AI学习教程
- 耦合矩阵 matlab,耦合矩阵变换(化简)的问题
- winstor磁盘阵列数据恢复
- Excel 中固定行标题和列标题
热门文章
- Android深入四大组件(一)应用程序启动过程
- python模块之httplib(在py3中功能进一步强大,请详看文档)
- 使用struts2 做客户端校验时抛出freemarker模版错误异常的处理
- Oracle数据反向恢复
- iText 实践的目录(the content of iText in Action)
- android 出现在默认应用程序,如何将我的应用程序设置为默认的SMS应用程序?
- 微型计算机系统视频适配器为,计算机硬件基础1-微型计算机系统组成(含教材6,8,9章内容).ppt...
- python扩展库简介_NumPy简介-Python扩展程序库 -- NumPy-编程文章分享
- docker安装gamit_ubuntun10.10中安装gamit 10.40
- Nginx源码分析 - 基础数据结构篇 - 内存池 ngx_palloc.c(02)