当前位置: 首页 > article >正文

服务器数据恢复——Ext4文件系统使用fsck后mount不上的数据恢复案例

关于Ext4文件系统的几个概念:
块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组结构基本上相同。
块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,主要描述块位图、i-节点位图及i-节点表的地址等信息。
超级块(Superblock):用于存储文件系统的配置参数(块大小、总块数、i-节点数等)和动态信息(当前空闲块数和i-节点数)。Ext4文件系统的超级块始于1024字节处,即2号扇区。
i节点:描述文件的时间、大小、块指针等信息。
块组描述符和超级块在块中的位置:当块大小为2个扇区时,0号块是引导程序或者保留块,超级块起始于1号块。当块大小为4个扇区时,引导程序或者保留块位于0号块的前两个扇区,超级块位于0号块的后两个扇区。当块大小为8个扇区时,引导程序或者保留块位于0号块的0-1号扇区,超级块位于0号块的2-3号扇区。
Ext4文件系统结构和第一个块组的结构:

Ext4文件系统故障初检和分析:
服务器上Ext4文件系统umount失败,工作人员使用fsck命令检查文件系统的一致性,结果导致Ext4文件系统mount不上(有时表现为目录变为文件)。报错提示信息:“mount: wrong fs type,bad option,bad superblock”。
日志和数据不一致导致文件系统数据被覆盖的情况在Ext3和Ext4文件系统中出现频繁,不过.journal日志文件留有缓冲数据,可以通过joumal日志文件找到相应信息并重建源文件。
安装Linux操作系统的硬盘的第一个扇区是MBR扇区,通过查看MBR分区表得知本案例环境中有2个分区:交换分区+Ext4文件系统分区。数据恢复工程师计划通过分析joumal日志文件来恢复丢失的数据。
本案例Ext4文件系统的相关信息:
1、块大小为4KB,即8个扇区。
2、超级块(Superblock)起始位置在1024字节处,即2号扇区,大小为2个扇区。
3、块组描述表从第一个块开始,即从4096字节处开始。

Ext4文件系统数据恢复过程:
1、用软件将Ext4文件系统打开,可以看到0-23扇区的数据(包括超级块和块组描述符)被日志记录覆盖。Ext3、Ext4文件系统的日志页以C0 3B 39 98开头。

2、超级块中包含关于块大小的信息。从.journal日志中将超级块的备份查找出来,然后通过查找超级块信息,其标志是“53ef”。
查找超级块:

通过超级块查看块大小。

软件模板编辑器也可以显示块大小。

超级块0x18-0x1B处描述块大小,确定本案例块大小为4KB。
3、重建(恢复)超级块;由于原文件系统超级块损坏,所以在恢复数据时要把这部分超级块信息粘贴回去,即放在2号扇区开始,或1024字节处。上述操作完成后,超级块备份某些地方与实际超级块数值可能不一致,需要通过数据恢复工具的模板管理器修改。本案例对超级块所在的块组作了修改,它在第0个块组里。

4、重建(恢复)块组描述表;由于部分块组描述表被破坏,所以在.journal日志文件里找到所有的块组描述表,并把它们粘贴回去。.journal日志文件里,块组描述符表存储在超级块的后面,所以找块组描述表之前可以先找到超级块。找到块组描述表后将块组描述符表内容粘贴到4096字节处。
5、重建(恢复)目录;恢复某个文件夹里的文件时,例如恢复kyproc文件夹里的数据,发现这些文件夹通过工具无法打开。

很明显这个目录损坏了,打开其节点信息后发现正常数据被日志填充。

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

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

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


http://www.kler.cn/a/394856.html

相关文章:

  • 安全合规遇 AI 强援:深度驱动行业发展新引擎 | 倍孜网络CEO聂子尧出席ICT深度观察报告会!
  • 基础12 友元相关
  • SLES网络
  • 网络安全之接入控制
  • 使用ForceBindIP绑定应用到指定IP
  • 层序遍历练习
  • 【网络安全渗透测试零基础入门】之Vulnhub靶场PWNOS: 2.0 多种渗透方法,收藏这一篇就够了!
  • Rust 所有权机制
  • MacBook 下载vscode不能被解压及打开的解决方案
  • Oracle19C AWR报告分析之Instance Efficiency Percentages (Target 100%)
  • A tour of Go - Web Crawler
  • tomcat配合geoserver安装及使用
  • 【Elasticsearch】Elasticsearch集成Spring Boot
  • 7天用Go从零实现分布式缓存GeeCache(学习)(5)
  • 巧妙注入的奥秘:在 Spring 中优雅地使用 List 和 Map
  • 【SpringBoot】20 同步调用、异步调用、异步回调
  • 【学习】【HTML】块级元素,行内元素,行内块级元素
  • macos 搭建自己的git pages
  • awk是一种在 Linux 和 Unix 系统中非常强大且常用的文本处理工具
  • Linux( 权限+特殊权限 图片+大白话)
  • macOS系统下使用SQLark连接达梦数据库
  • flutter插件:录制系统播放的声音
  • Docker compose部署portainer
  • 【Python进阶】Python中的数据库交互:ORM技术与SQLAlchemy
  • 国产系统给在线的Word文件创建表格
  • unity3d————接口基础知识点