一例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

  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日志文件里找到相应的文件的节点信息,找到后粘贴回原来的位置,达到重建(恢复)文件的目的。

时间: 2024-08-30 09:56:14

一例Ext4文件系统fsck后损坏的修复过程的相关文章

linux操作系统故障处理-ext4文件系统超级块损坏修复

背景 前天外面出差大数据测试环境平台有7台服务器挂了,同事重启好了五台服务器,但是还有两台服务器启动不起来,第二天回来后我和同事再次去机房检查,发现两台服务器都显示superblock的报错,经过一番处理后两台服务器都正常进系统了,现决定重现superblock故障并将此类问题故障处理思路写下来方便后面新同事参考. 硬盘的结构 硬盘的物理结构侧视图和俯视图,这两张图传递出来的比较重要的信息如下: 磁盘划分为磁头(Head),柱面(Cylinder),扇区(Sector) 磁头:每个磁片正反两面各

linux加密文件系统 fsck 无法修复一例

装完FEDORA为了实现双显卡装了个 大黄蜂实现双显卡切换的工具.装完后故障出现了.每次启动自动进入应急模式.看了下日志由于磁盘的DM-2中一个节点导致的问题,这个问题发生在“根”挂节点中. 有趣的事情发生了,我的根挂节点中使用了加密的EXT4文件系统. 我使用fedora的安装盘进入recuse模式修复,使用自动挂后,无法fsck,因为fsck不能修复已经挂在的盘,而且umount不起作用,一直提示device busy.这种方式修复失败. 再次尝试不挂在任何盘直接fsck,很失望,fsck竟

Ext4文件系统架构分析(一)

本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外.整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等.感兴趣的看官敬请留意和指导! 1. Ext4文件系统布局综述 一个Ext4文件系统被分成一系列块组.为减少磁盘碎片产生的性能瓶颈,块分配器尽量保持每个文件的数据块都在同一个块组中,从而减少寻道时间.以4KB的数据块为例,一个块组可以包含32768个数据块,也就是128MB. 1.1 磁盘布局 Ex

Ext4文件系统的特性

与Ext3文件系统兼容:原有的Ext3数据结构仍然照样保留,Ext4作用于新数据,整个系统因此也就获得了Ext4所支持的更大的容量 更大额文件系统和更大的文件:Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4分别支持1EB的文件系统,16TB的文件(1EB=1024PB,1PB=1024TB). 无限数量的子目录.Ext3支持32000个子目录,Ext4不限制 Extents:Ext3采用间接块映射,当操作大文件时,效率极其低下.比如一个100M的文件.在Ext3中要建立256

Ext4文件系统的特性和功能简介

Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已.Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能: /. 与 Ext3 兼容. 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统.原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 E

EXT4文件系统禁用日志功能

ext4提供有很多特性,当然有一些是前一代文件系统ext3本身就具有的,比如日志功能,但有时候我们却并不需要这些特性,则我们可以禁用它们.ext4文件系统的日志功能就是在牺牲一定性能的情况下增强稳定性的一种手段,但在一些情况,比如Web Server上存在的大量小文件所在的文件系统就是一个典型示例,此时可以禁用ext4的日志功能. 关闭EXT4日志功能: [[email protected] ext4]# tune2fs -O ^has_journal /dev/sdd1 tune2fs 1.4

刨根问底:ext3/ext4文件系统最大空间及单个文件大小演算法则

从ext3和ext4文件系统来窥探空间和文件大小的演算法则 学习操作系统就不得不研究磁盘以及磁盘文件系统,磁盘是底层物理设备,而文件系统则是管理磁盘的上层工具,文件系统规划了磁盘存放数据的格式,确定了一个操作系统能够支持多大的磁盘空间,每个分区能够支持多大的数据空间,以及每个文件所能支持的大小.通常对系统管理员而言,最需要的知道的就是最大磁盘空间,最大分区空间以及最大文件的大小.本论题只讨论这三种大小到底是怎么算出来的,而不是死记硬背.知道了原理,以后不管遇到什么文件系统,都会有章可循,至少知道

Ext4文件系统架构分析(二)

接着上一篇博文,继续分析Ext4磁盘布局中的元数据. 1.7 超级块 超级块记录整个文件系统的大量信息,如数据块个数.inode个数.支持的特性.管理信息,等待. 如果设置sparse_super特性标志,超级块和块组描述符表的冗余备份仅存放在编号为0或3.5.7的幂次方的块组中.如果未设置sparse_super特性标志,冗余备份存在与所有的块组中.以下是2.6.32.18内核中对Ext4超级块的描述: 3.0的内核中,Ext4的超级块加入了以下相关元数据:快照.文件系统错误处理相关.挂载选项

ext4文件系统制作 - make_ext4fs 参数介绍【转】

本文转载自:http://blog.csdn.net/u011784994/article/details/53816976 make_ext4fs用于Android平台上制作ext4文件系统的镜像.用法举例: make_ext4fs -l 512M -s -a system system.ext4img system 之后再使用simg2img制作镜像. 有一个问题是,使用这样制作的镜像,system分区文件的权限都是预定的,即使先修改system目录文件权限后在制作镜像,烧入设备后,其权限仍