在ubuntu中(以16.06为例),stat filename 可以查看文件的inode数值,但是如何确定该inode项具体在哪个块组下的inode Table中不是那么容易,接下来通过一步步计算来获取该inode具体在哪个块组下的inode Table的第几项。

1.首先可以通过dumpe2fs查看当前ext4文件系统的结构信息,命令为

  1. dumpe2fs /dev/sdax             其中sdax为linux系统分区

可获取如下类似信息:

  1. Filesystem volume name:   <none>
  2. Last mounted on:          /
  3. Filesystem UUID:          0fbdfdd4-80ea-4962-84e8-9173c5ef1cb5
  4. Filesystem magic number:  0xEF53
  5. Filesystem revision #:    1 (dynamic)
  6. 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
  7. Filesystem flags:         signed_directory_hash
  8. Default mount options:    user_xattr acl
  9. Filesystem state:         clean
  10. Errors behavior:          Continue
  11. Filesystem OS type:       Linux
  12. Inode count:              6037504
  13. Block count:              24146432
  14. Reserved block count:     1207321
  15. Free blocks:              20876199
  16. Free inodes:              5787665
  17. First block:              0
  18. Block size:               4096
  19. Fragment size:            4096
  20. Reserved GDT blocks:      1018
  21. Blocks per group:         32768
  22. Fragments per group:      32768
  23. Inodes per group:         8192
  24. Inode blocks per group:   512
  25. Flex block group size:    16
  26. Filesystem created:       Sun Jan  8 01:10:30 2017
  27. Last mount time:          Sat Feb 18 11:26:16 2017
  28. Last write time:          Sat Feb 18 19:26:08 2017
  29. Mount count:              150
  30. Maximum mount count:      -1
  31. Last checked:             Sun Jan  8 01:10:30 2017
  32. Check interval:           0 (<none>)
  33. Lifetime writes:          31 GB
  34. Reserved blocks uid:      0 (user root)
  35. Reserved blocks gid:      0 (group root)
  36. First inode:              11
  37. Inode size:           256
  38. Required extra isize:     28
  39. Desired extra isize:      28
  40. Journal inode:            8
  41. First orphan inode:       2250909
  42. Default directory hash:   half_md4
  43. Directory Hash Seed:      4c440967-7d09-4b9b-b3be-74a8d8bc47ca
  44. Journal backup:           inode blocks
  45. Journal features:         journal_incompat_revoke
  46. Journal size:             128M
  47. Journal length:           32768
  48. Journal sequence:         0x0001f82e
  49. Journal start:            1

根据这些信息,和文件的inode号,基本就可以定位该文件的inode信息具体在哪个块组中以及该块组的inode Table的第几项。

例如

  1. root@heaven:~# stat test
  2. File: 'test'
  3. Size: 5           Blocks: 8          IO Block: 4096   regular file
  4. Device: 805h/2053d  Inode: 2228474     Links: 1
  5. Access: (0664/-rw-rw-r--)  Uid: ( 1000/  heaven)   Gid: ( 1000/  heaven)
  6. Access: 2017-02-18 16:22:31.496609901 +0800
  7. Modify: 2017-02-18 16:22:07.728197004 +0800
  8. Change: 2017-02-

可知test文件的inode 号为2228474.

  1. (2228474-1)/8192(一个块组的inode数)=272,即该inode 落在第272块组内
  2. (2228474-1)%8192=249,即为该inode在某个inode Table的第249项
  3. 272×32768(一个块组共有32768块)=8912896,得该文件inode落在第272块组的起始块为8912896

8912896只是第272块组的起始块,要想进一步定位该块组的inode Table具体偏移位置,还需了解对于ext4文件系统来说一个标准的块组的布局顺序。这可以通过dumpe2fs命令查看。

由于我的ubuntu 下的ext4文件系统的块组的block Bitmap、inode Bitmap以及inode Table是每16个块组为单位放在16个块组的首块组中,比如0-15块组的所有block Bitmap、inode Bitmap以及inode Table均放在第0块组内,16-31块组的block Bitmap、inode Bitmap以及inode Table均放在第16块组内。我们知道block Bitmap和inode Bitmap占一个block,而inode Table 占固定大小的blocks(我的为512blocks)。而272刚好是16的倍数,所以块组的布局如下:

  1. 8912896至8912911为16个block Bitmap
  2. 8912912至8912927为16个inode Bitmap
  3. 8912928至8912928+511第272个块组的inode Table

所以从8912928开始偏移oxf900处即为test文件inode全部信息存放处。通过dd命令截取从8912928开始的512块,命令如下:

  1. dd if=/dev/sda5 ibs=4096 skip=8912928 count=512 of=inode_table

从0000f900开始数,偏移第60字节处为0xc7f5 5300,即为test文件数据块指针,由于ext4采用小端存储,所以实际应该是0x0053f5cf,通过debugfs命令可以验证,如下:

  1. Triple Indirect Block    [0]

至此,已经完成从一个文件的inode 追踪到起anode Table 的全过程。

Original Link: http://blog.csdn.net/yiqiaoxihui/article/details/55683328

ext4文件系统由文件的inode号定位其inode Table的更多相关文章

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

    linux操作系统故障处理-ext4文件系统超级块损坏修复   背景 前天外面出差大数据测试环境平台有7台服务器挂了,同事重启好了五台服务器,但是还有两台服务器启动不起来,第二天回来后我和同事再次去机 ...

  2. linux文件系统创建文件的过程

    创建一个文件最主要的步骤就是: 1.为文件创建一个文件目录项. 2.为文件创建一个inode结构并分配inode号,将inode编号与文件名映射关系保存在1中分配的文件目录项中. 3.将1中创建的文件 ...

  3. 在CentOS6或RHEL6恢复上ext4文件系统误删除的文件

    首先说明: [root@CentOS6 ~]# rm -rf / //这条命令不可以执行 [root@CentOS6 ~]# rm -rf /* //这条命令可以执行,别去试 ext4文件系统上误删除 ...

  4. 使用hexdump工具追踪EXT4文件系统中的一个文件

    昨天追踪EXT4文件系统的过程中出了点问题,就是找不到文件,于是试了一下追踪FAT32文件系统的,成功之后有了点信心,今天继续嗑EXT4文件系统,终于找到啦,记录一下. 操作系统:linux(cent ...

  5. 文件的inode号操作

    linux给每个文件生成了一个唯一的inode编号,命令行下操作文件需要输入文件名,如果遇到文件名特别难输入(或者包含特殊符号)的情况,可以用inode号操作文件. 可以用这个命令查看inode号: ...

  6. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  7. ambarella H2 添加文件到ext4文件系统

    方法1: ambarella/rootfs目录下有skeleton(骨架)目录,此目录下就是文件系统的各个目录, [root@jz4775dev]# ls skeleton/ bin debug de ...

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

    分区里的inode号是0号和1号的block 我相信大家在使用Linux的时候都遇到过误删文件系统数据的情况,不管是自己误删还是帮人家恢复误删 现在用的比较多的恢复工具大概是ext3grep .ext ...

  9. MySQL ·InnoDB 文件系统之文件物理结构

    从上层的角度来看,InnoDB层的文件,除了redo日志外,基本上具有相当统一的结构,都是固定block大小,普遍使用的btree结构来管理数据.只是针对不同的block的应用场景会分配不同的页类型. ...

随机推荐

  1. ASCII码、HEX、字符、BCD 等等 基础知识思考

    每每遇到这些问题就要想个半天,想不明白还不舒服,今天特别把所想整理下避免以后再次进入思想漩涡!!! 计算机存储和传输都是以字节为单位        1 bit     = 1  二进制数据       ...

  2. Entity Framework + WCF 远程调用出错

            在使用Entity Framework中使用WCF,在程序中调用服务一直报错,我一直以为是WCF的哪个地方的配置有问题,找来找去,一直没有解决.         最后在网上找到一篇文章 ...

  3. 在Linux中安装和配置OpenVPN Server的最简便方法!

    本文介绍了如何在基于RPM和DEB的系统中安装和配置OpenVPN服务器.我们在本文中将使用一个名为openvpn-install的脚本,它使整个OpenVPN服务器的安装和配置过程实现了自动化.该脚 ...

  4. javac、jar使用实录

    因项目管理部署需要,记录一下过程,以免下次忘记了,再次使用又需要重头再来,只记录正确的操作方式,可能会提到某些错误 建立项目所在目录F:\www 案例一 其下建立项目的java源文件的包目录结构.ja ...

  5. 【js笔记】数组那些事[0]

    js中数组是一个特殊的对象,索引是它的属性,整数索引在内部被转化为字符串类型. 1 数组的创建 new关键字方法:var arr=new Array() var arr=new Array(10); ...

  6. Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif

    if-then语句 if-then语句格式如下 if comman then command fi bash shell中的if语句可鞥会和我们接触的其他if语句的工作方式不同,bash shell的 ...

  7. java---解析XML文件,通过反射动态将XML内容封装到一个类中

    本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...

  8. APP功能性测试-3

    定义:兼容测试就是指软件在特定的硬件平台,不同的应用软件之间,不同的操作系统平台上,不同的网络等环境中是否能够正常的运行的测试  (会不会产生不兼容) 兼容性测试的作用 进一步提高产品质量 和其他软件 ...

  9. 第一篇 Charles的配置及相关使用

    // Charles Proxy License // 适用于Charles任意版本的注册码,谁还会想要使用破解版呢. // Charles 4.2目前是最新版,可用.   Registered Na ...

  10. Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)

    断网了2天  今天补上     聚合操作: 对文档的信息进行整理统计的操作 返回:统计后的文档集合 db.collection.aggregate() 功能:聚合函数,完成聚合操作 参数:聚合条件,配 ...