注意

本文仅理论探讨,真实数据恢复,敬请先参考:

《Linux ext4 rm 误删,用extundelete恢复失败/报错,无数血泪教训!!!附:ext4误删后的正确处理步骤》

Linux ext4 rm 误删,用extundelete恢复失败/报错,无数血泪教训!!!附:ext4误删后的正确处理步骤_DATAUNIT.CN的博客-CSDN博客_extundelete恢复出错


基本概念

1扇区(sector)=512字节(byte)

1数据块(block)=8扇区=4KB(mkfs时指定,默认4KB,可设置为1KB - 64KB)

Ext4字段使用little-endian顺序写入磁盘;但journal日志使用big-endian顺序写入磁盘。


ext4文件系统结构

  • 块设备被划分为多个group
  • Super block在Group 0中, backup super block存放在其它group的头部


SuperBlock

superblock记录文件系统的各种信息,例如block总数,inode总数,支持的功能,维护信息等。如果sparse_super置位,则superblock和组描述符的副本仅保留在Group编号为0或3、5、7……的Group中。如果未设置该标志,superblock在所有组中均有副本。

Magic signature=0x53EF,位于偏移0x38,即56字节处。UUID位于偏移0x68:


块组描述段

即Block Group Descriptor,描述本group的inode信息、datablock信息

当block=1kb时,BGD起始于block2

当block>1kb时,BGD起始于block1

本案例中为block=1kb,则BGD起始了block2

Inodetable位于BGD偏移0x8处,:


inode table

Inode字段定义:

如果文件<=12个block,inode中可以直接存储其所有block指针。

如果文件的block数据在13个block 至【 ($block_size / 4) ^ 3 + ($block_size / 4) ^ 2 + ($block_size / 4) + 12】个block之间,则需要借助多级索引来存储所有数据块。本案例block=1kb,三线索引inode可存储16777216+65536+268=16843020byte,大概16MB文件。

inode中有15个指针数组,其中12个是直接索引,后面三个分别是一级索引、二级索引和三级索引。如下图示:

如果文件大于16MB,则需要inode开启扩展属性i_extra_isize,使用Extent Tree,本文不再展开。

Group0的inode table处数值为0x0124,即block292,即 292*2=584扇区:


datablock

如上图,文件Inode为14

  1. 定位Group:(14-1)/2032=0,位于Group0。(注:此例中,每Group包含2032个inode)
  2. 定位Group-inode:(14-1)% 2032=13,位于第13个inode

Group0 inode table起始于block 292,

而inode14位于(14-1)*128=1664 byte = 0x680 byte .

Inode偏移60byte=0x3C byte处,记录了文件的数据块索引,下图为0x000029b7:

第0x000029b7=10679个数据块,位于:10679*1024byte/512byte=21358扇区,下图显示为文件的真实内容:


Ext4引入 “Extents”概念,可参考《Linux ext4文件系统原理(二)-大文件Extent结构解析及数据恢复实例-rm误删恢复》


技术支持

温馨提示:如重要数据丢失,还请在行动前咨询专业工程师建议,以免数据遭到二次破坏。

直接技术支持:shop396558956.taobao.com

官方网站:http://www.dataunit.cn/

Linux ext4 rm 数据恢复原理(一)-文件系统结构及文件解析相关推荐

  1. linux shell rm 删除子目录下 所有.o后缀文件

    原理:通过管道命令来操作,先find出主目录 下想删除的文件,然后通过"xargs"这个构造参数列表并运行命令. 实例1:删除当前目录 包括当前目录的子目录下  所有 后缀是 o ...

  2. linux+网络根文件系统,认识Linux根文件系统结构

    INTRO 认识Linux根文件系统结构,尽管Linux的根文件系统在形式表现上是一体的(所有数据目录均为根目录下的子目录),但实际它们是多个不同的[逻辑主体](为了实现不同的逻辑 功能)组合在一起的 ...

  3. Linux根文件系统结构再认识

    Linux根文件系统结构再认识 刘建文(http://blog.csdn.net/keminlau ) INTRO 尽管Linux的根文件系统在形式表现上是一体的(所有数据目录均为根目录下的子目录), ...

  4. ext4数据恢复实战及文件系统结构详解

    ext4数据恢复实战及文件系统结构详解 一.前言 二.ext4数据恢复实战 三.ext4文件系统结构详解 四.ext4分区结构 五.ext4目录结构 六.目录项的删除特性 七.ext4文件结构 八.最 ...

  5. 13.Linux文件系统结构

    1.硬盘结构 文件系统结构,理解文件系统,要从文件储存说起. 硬盘结构: 硬盘相关专业术语: 硬盘的内部是金属盘片,将圆形的盘片划分成若干个扇形区域,这就是扇区.若干个扇区就组成整个盘片.为什么要分扇 ...

  6. linux学习零基础教学课程:Linux文件系统结构

    全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容:   13.1  硬盘结构   13.2  文件系统结构   13.2  硬链接和软链接   13.4 ...

  7. linux文件系统、文件系统结构、虚拟文件系统

    参考:linux文件系统及其目录结构.虚拟文件系统 作者:丶PURSUING 发布时间: 2021-02-15 09:33:29 网址:https://blog.csdn.net/weixin_447 ...

  8. 文件操作命令 cp、mv、rm 底层原理

    https://blog.csdn.net/lqt641/article/details/60607165 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  9. Linux的文件系统结构

    1.硬盘结构 磁盘的内部并不是真空的,只是空气很干净:利于散热 文件系统结构,理解文件系统,就得从文件存储说起 磁盘的专业术语 磁盘的内部是金属片,将原型的盘片分成若干个扇形区域, 若干个扇区就组成一 ...

  10. linux系统结构,文件寻址,文件管理编辑,正则表达式

    一.linux系统结构 linux是一个倒树结构,linux中所有的东西都是文件,这些文件都在系统顶级目录"/" /就是根目录 /目录以下为二级目录这些目录都是系统装机时系统自动建 ...

最新文章

  1. 实易智能DNS单台设备QPS高达28万
  2. linux gzip 命令简介
  3. Spring精华问答 | 什么是Spring Cloud?
  4. 输入两个数、用python求他们的和_从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数C语言编程题:从键盘上输入两个...
  5. python123平台作业答案循环结构棋盘放米_python练习集100题(1-20)
  6. 支持Android的Qt5预览
  7. 【js】pagination分页(支持首页,末页,跳转)
  8. html如何居中svg,垂直居中SVG标签
  9. 20172301 2017-2018-2 《程序设计与数据结构》第六周学习总结
  10. 收集网易员工对《阿凡达》的爆笑影评
  11. 双S曲线轨迹(详细推导)
  12. Local declaration of '' hides instance variable
  13. PCI-E基础知识学习
  14. 如何判断一个多边形的环是逆时针还是顺时针
  15. jquery获取ip地址
  16. Kevin Kelly:边缘式创新的颠覆力量
  17. 2 个python美化表格数据输出结果的工具,摸鱼简直心安理得~
  18. Sublime Text 3 最新注册码大全
  19. 怎么写安卓手机脚本_利用xposed虚拟真实手机环境,建立引流脚本矩阵
  20. 2022煤矿采煤机(掘进机)操作考试练习题及在线模拟考试

热门文章

  1. 阿里云配置 https
  2. java delayqueue_详解java中DelayQueue的使用
  3. 国内地图服务对比分析
  4. 通用点阵字库生成工具
  5. 文本溢出处理,出现省略号,单行文本溢出处理,多行文本溢出处理
  6. 传送带计数器c语言程序,脉搏计数器的程序(用C语言编写程序)
  7. 微信小程序标签样式的优先级
  8. 2017云栖大会Tech Insight亮点大剧透
  9. 照片尺寸大小是多少厘米
  10. Python中具有不确定个数参数的函数