分区里的inode号是0号和1号的block

我相信大家在使用Linux的时候都遇到过误删文件系统数据的情况,不管是自己误删还是帮人家恢复误删

现在用的比较多的恢复工具大概是ext3grep 、extundelete 这两个

当然本文不是要说这两个工具的使用方法,而是介绍每个分区里的inode号为0或1号的block到底是什么

在使用ext3grep 、extundelete 的时候,基本上都会有这样一个步骤

在Linux下可以通过“ls-id”命令来查看某分区目录的inode值,可以输入:

[root@localhost /]#ls –id /
/
[root@steven ~]# ls -id /boot
/boot

可以看到,无论是哪个分区,它的inode值都是2,而不是0,也不是1

并且当你用find命令来搜索一下0或1号inode的时候也是什么也找不到

 find /  -inum
find: `/proc//task//fd/': No such file or directory
find: `/proc//task//fdinfo/': No such file or directory
find: `/proc//fd/': No such file or directory
find: `/proc//fdinfo/': No such file or directory

那么inode为0或1的block去哪里了?

boot sector 与 superblock 的关系

block 为 1024 bytes (1K) 时:

如果 block 大小刚好是 1024 的话,那么 boot sector 与 superblock 各会占用掉一个 block , 也表示boot sector 是独立于 superblock 外面的。

[root@www ~]# dumpe2fs /dev/hdc1
dumpe2fs 1.39 (-May-)
Filesystem volume name: /boot
....(中间省略)....
First block: 1
Block size:
....(中间省略).... Group 0: (Blocks 1-8192)
Primary superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -

看到最后一个特殊字体的地方吗? Group0 的 superblock 是由 1  号 block 开始的

上面结果可以发现 0 号 block 是保留下来留给 boot sector 用的

block 大于 1024 bytes (2K, 4K) 时:

如果 block 大于 1024 的话,那么 superblock 将会在 0 号!

[root@www ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (-May-)
....(中间省略)....
Filesystem volume name: /
....(中间省略)....
Block size:
....(中间省略)....

Group
0: (Blocks 0-32767)
Primary superblock at 0, Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks:
Free inodes: -

可以发现 superblock 就在第一个 block (第 0 号) 上,但是 superblock 其实就只有 1024bytes

为了怕浪费更多空间,因此第一个 block 内就含有 boot sector 与 superblock

上面结果显示,因为每个 block 占有 4K ,但是 superblock 其实就只有 1024bytes

因此在第一个 block 内 superblock 仅占有 1024-2047 ( 由 0 号起算的话),而 0-1023 就保留给 boot sector 来使用。

而后面的2048bytes 的空间保留

现在也明白了为什麽df命令这麽快了吧,它是读取每个分区inode为0的superblock里面的信息,

而superblock里面就保存了分区文件系统类型、大小、已使用大小、可用大小

我们可以使用tune2fs命令查看某一分区的块大小等信息

tune2fs -l /dev/sdb1
tune2fs 1.41. (-May-)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 4814e6f2--4ac5-bf2d-33109fc53061
Filesystem magic number: 0xEF53
Filesystem revision #: (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count:
Block count:
Reserved block count:
Free blocks:
Free inodes:
First block: 0

Block size: 4096

Fragment size:
Reserved GDT blocks:
Blocks per group: 32768

Fragments per group:
Inodes per group:
Inode blocks per group:
Flex block group size:
Filesystem created: Thu Jun 2 12:23:23 2016

Last mount time: Thu Jun ::
Last write time: Thu Jun ::
Mount count:
Maximum mount count:
Last checked: Thu Jun ::
Check interval: 15552000 (6
months)
Next check after: Tue Nov ::
Lifetime writes: MB
Reserved blocks uid: (user root)
Reserved blocks gid: (group root)
First inode:
Inode size: 256

Required extra isize:
Desired extra isize:
Journal inode: 8

Default directory hash: half_md4
Directory Hash Seed: fad5ad24-52ef-482c-a54b-367a5bb4f122
Journal backup: inode blocks

通过上面的信息就可以知道superblock是在block 0还是block 1

那么上面的信息又是从哪里读取出来的

答案是:还是superblock

superblock如此重要,所以系统也对superblock做了一些保护措施

文件系统会有一些备用超级块,备用超级块一般创建于块 8193、16384 或 32768

ext类文件系统会把block分成一组一组来管理简称为块组,可以看到Blocks per group这一行,就是每个group都包含了32768个block

每个group都会有一个备用superblock,所以备用超级块一般创建于块 8193、16384 或 32768,根据格式化时的block size而定

tune2fs -l /dev/sda4 |grep group
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Reserved blocks gid: 0 (group root)

注意:非ext类文件系统是不能用tune2fs命令的,而且原理和内部格式跟ext类文件系统不相同!!

tune2fs -l /dev/sdb1
tune2fs 1.41. (-May-)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.

参考资料:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4250473&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

EXT4是Linux kernel 自 2.6.28 开始正式支持的新的文件系统,目前已经广泛应用在新发行的LINUX版本中。移动终端方面的Android默认系统分区也已成为EXT4。随着LINUX系统的不断更新,相信EXT4将很快替代EXT3,成为下一代LINUX上的标准文件系统。
相比EXT3而言,EXT4最大的改动是文件系统的空间分配模式。默认情况下,EXT4不再使用EXT3的block mapping分配方式 ,而改为Extent方式分配。从专业的数据恢复理论看,基于block mapping的EXT3在数据删除后就很难恢复,如果基于Extent,可参考的信息就更少,如何有效的恢复EXT4误删除的数据,是个公认的技术难题。
近日,我公司经过不断地尝试和改进,终于完成了对EXT4数据误删除恢复的技术攻关,形成了一套完整的技术解决方案,并成功开发出了基于EXT4的专业数据恢复系统。
下面为北亚数据恢复中心对EXT4误删除数据的恢复方案简介。
1、关于EXT4的结构特征:
EXT4在总体结构上与EXT3相似,大的分配方向都是基于相同大小的块组,每个块组内分配固定数量的INODE,可能的超级块(或备份),及可能的块组描述表。
EXT4的INODE 结构做了重大改变,为增加新的信息,大小由EXT3的128字节增加到默认的256字节,同时块索引不再使用EXT3的12直接块+1个1次间接块+1个2次间接块+1个3次间接块的索引模式,而改为4个Extent片断流,每个片断流设定片断的起始块号及连续的块数量(有可能直接指向数据区,也有可能指向索引块区)。
2、EXT4删除数据的结构更改:
EXT4删除数据后,会依次释放文件系统bitmap空间位、更新目录结构、释放inode空间位。而INODE空间的释放不像WINDOWS NTFS或FAT一样保留数据的全部或部分索引,一个更彻底的操作是直接清除所有节点中的索引项。
清除了文件的存储索引,意味着即使可以得到文件的名称、日期等元信息,也无法直接知道文件原来存储在什么位置,而基于Extent的存储方式更紧凑,删除之后,很难保证可以很容易还原原先的存储索引。

块组是block group
block group包含备用super block,inode,block group description

INODE 结构做了重大改变,为增加新的信息,大小由EXT3的128字节增加到默认的256字节
Inode size:              256 byte

EXT4删除数据后,会依次释放文件系统bitmap空间位
Block bitmap at 259 (+25, Inode bitmap at 260 (+259)

以上内容针对于ext类文件系统,不对的地方欢迎拍砖

部分参考了鸟哥文章:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_6.php

分区里的inode号是0号和1号的block的更多相关文章

  1. vc6.0如何显示行号以及出现版本不兼容问题

    有时编译时,提示某某行有错,但是要定位到某一行的话,如果在编辑页面能够将行号显示出来,查找也就更方便了,下面我来介绍一下让VC6.0显示行号的方法.   工具/原料   VC6.0.显示行号的插件 方 ...

  2. .NET微信公众号开发-1.0初始微信公众号

    一.前言 微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字.图片.语音.视频的全方位沟通.互动 .形成了一 种主流的线上 ...

  3. Yii2.0实现微信公众号后台开发

    接入微信 Yii2后台配置 1.在app/config/params.php中配置token参数 return [ //微信接入 'wechat' =>[ 'token' => 'your ...

  4. destoon6.0搜索页熊掌号页面改造技巧【原创】

    大家都知道,DT官方是封禁搜索页的,是不让百度蜘蛛抓取的,但是搜索页又是大型网站优化的重点,今天来说说关于DT6.0搜索页熊掌号的改造方法,如果您要改造内容页面可以查看我前几期的分享! 首先要开启百度 ...

  5. 韩顺刚-tcp报文头协议详细分析第一包数据:序号是0,发送数据的长度是0,因为没有收到对端的数据,所以确认号是0, Syn的标志位设置成1,这里没有发送的数据,只发送TCP的20个字节的头部

    TCP报文段首部格式 大部分TCP报文头部都是20个字节,有的数据包要加上选项. 上面一行代表4个字节,源端口和目的端口都是2个字节. TCP协议是面向字节流的协议 TCP是一段一段分块的发送数据的 ...

  6. 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图:   从上图我们可以 ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级) 企业库验证应用程序模块之配置文件模式: ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级) 企业库提供了一个很强大的验证应用程序模 ...

随机推荐

  1. (2)WebAPI的增删改查

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  2. Delphi之通过代码示例学习XML解析、StringReplace的用法

    这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <?xml version="1.0" encoding=&q ...

  3. POCO库——Foundation组件之加解密Crypt

    加解密Crypt:内部提供多种加解密方式.信息摘要提取.随机数产生等,具体的算法内部实现不做研究学习: DigestEngine.h :DigestEngine类作为各种摘要提取的基类,提供必要的接口 ...

  4. 解决poshytip 表单高度大于屏幕高端 显示问题

    Poshy Tip是一款非常友好的信息提示工具,它基于jQuery,当鼠标滑向链接时,会出现一个信息提示条.信息的内容直接可以在HTML里设定也可以是从服务端调用的数据,该插件还提供了很多属性和方法. ...

  5. Power BI for Office 365 概览

    伴随着数据量的日益增长,通过自服务式的商业智能把数据转换成辅助决策支持的工具,越来越成为迫切的需求.在以前,处理这些数据往往只是IT人员范围内的事,但是通过Power BI for Office 36 ...

  6. [Idea] 在idea中使用jetty debug

    1.添加jetty的maven插件 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId> ...

  7. Mac下没有权限启动tomcat的解决办法

    问题描述 在Mac中通过./startup.sh执行启动脚本文件,启动tomcat时报如下错误: -bash: ./startup.sh: Permission denied 解决方法 错误信息说明了 ...

  8. java中包的命令行(cmd)操作详解

    一.什么是包? 为了更好地组织类,防止在一个空间下出现类重名,Java提供了包机制.包是类的容器,用于分隔类名空间(类型于C++中的命名空间).如果没有指定包名,所有的示例都属于一个默认的无名包(又称 ...

  9. 标准io与文件io

    A: 代码重复: 语句块1: while(判断) { 语句块2: 语句块1: } 上面可以改写为: while(1) { 语句块1: if(判断) break: 语句块2: } B: 标准IO和文件I ...

  10. linux中redis的php扩展安装

    PHP中的扩展一般都是在安装环境的时候就已经装好了的.但是有的一些扩展在后期想要加上去的话也是可以的.php支持后期安装扩展. 想要安装扩展就需要先去下载安装扩展所需要的扩展源码包.autoconf. ...