ext4文件系统由文件的inode号定位其inode Table
在ubuntu中(以16.06为例),stat filename 可以查看文件的inode数值,但是如何确定该inode项具体在哪个块组下的inode Table中不是那么容易,接下来通过一步步计算来获取该inode具体在哪个块组下的inode Table的第几项。
1.首先可以通过dumpe2fs查看当前ext4文件系统的结构信息,命令为
- dumpe2fs /dev/sdax 其中sdax为linux系统分区
可获取如下类似信息:
- Filesystem volume name: <none>
- Last mounted on: /
- Filesystem UUID: 0fbdfdd4-80ea-4962-84e8-9173c5ef1cb5
- Filesystem magic number: 0xEF53
- Filesystem revision #: 1 (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: user_xattr acl
- Filesystem state: clean
- Errors behavior: Continue
- Filesystem OS type: Linux
- Inode count: 6037504
- Block count: 24146432
- Reserved block count: 1207321
- Free blocks: 20876199
- Free inodes: 5787665
- First block: 0
- Block size: 4096
- Fragment size: 4096
- Reserved GDT blocks: 1018
- Blocks per group: 32768
- Fragments per group: 32768
- Inodes per group: 8192
- Inode blocks per group: 512
- Flex block group size: 16
- Filesystem created: Sun Jan 8 01:10:30 2017
- Last mount time: Sat Feb 18 11:26:16 2017
- Last write time: Sat Feb 18 19:26:08 2017
- Mount count: 150
- Maximum mount count: -1
- Last checked: Sun Jan 8 01:10:30 2017
- Check interval: 0 (<none>)
- Lifetime writes: 31 GB
- Reserved blocks uid: 0 (user root)
- Reserved blocks gid: 0 (group root)
- First inode: 11
- Inode size: 256
- Required extra isize: 28
- Desired extra isize: 28
- Journal inode: 8
- First orphan inode: 2250909
- Default directory hash: half_md4
- Directory Hash Seed: 4c440967-7d09-4b9b-b3be-74a8d8bc47ca
- Journal backup: inode blocks
- Journal features: journal_incompat_revoke
- Journal size: 128M
- Journal length: 32768
- Journal sequence: 0x0001f82e
- Journal start: 1
根据这些信息,和文件的inode号,基本就可以定位该文件的inode信息具体在哪个块组中以及该块组的inode Table的第几项。
例如
- root@heaven:~# stat test
- File: 'test'
- Size: 5 Blocks: 8 IO Block: 4096 regular file
- Device: 805h/2053d Inode: 2228474 Links: 1
- Access: (0664/-rw-rw-r--) Uid: ( 1000/ heaven) Gid: ( 1000/ heaven)
- Access: 2017-02-18 16:22:31.496609901 +0800
- Modify: 2017-02-18 16:22:07.728197004 +0800
- Change: 2017-02-
可知test文件的inode 号为2228474.
- (2228474-1)/8192(一个块组的inode数)=272,即该inode 落在第272块组内
- (2228474-1)%8192=249,即为该inode在某个inode Table的第249项
- 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的倍数,所以块组的布局如下:
- 8912896至8912911为16个block Bitmap
- 8912912至8912927为16个inode Bitmap
- 8912928至8912928+511第272个块组的inode Table
所以从8912928开始偏移oxf900处即为test文件inode全部信息存放处。通过dd命令截取从8912928开始的512块,命令如下:
- dd if=/dev/sda5 ibs=4096 skip=8912928 count=512 of=inode_table
从0000f900开始数,偏移第60字节处为0xc7f5 5300,即为test文件数据块指针,由于ext4采用小端存储,所以实际应该是0x0053f5cf,通过debugfs命令可以验证,如下:
- Triple Indirect Block [0]
至此,已经完成从一个文件的inode 追踪到起anode Table 的全过程。
Original Link: http://blog.csdn.net/yiqiaoxihui/article/details/55683328
ext4文件系统由文件的inode号定位其inode Table的更多相关文章
- linux操作系统故障处理-ext4文件系统超级块损坏修复
linux操作系统故障处理-ext4文件系统超级块损坏修复 背景 前天外面出差大数据测试环境平台有7台服务器挂了,同事重启好了五台服务器,但是还有两台服务器启动不起来,第二天回来后我和同事再次去机 ...
- linux文件系统创建文件的过程
创建一个文件最主要的步骤就是: 1.为文件创建一个文件目录项. 2.为文件创建一个inode结构并分配inode号,将inode编号与文件名映射关系保存在1中分配的文件目录项中. 3.将1中创建的文件 ...
- 在CentOS6或RHEL6恢复上ext4文件系统误删除的文件
首先说明: [root@CentOS6 ~]# rm -rf / //这条命令不可以执行 [root@CentOS6 ~]# rm -rf /* //这条命令可以执行,别去试 ext4文件系统上误删除 ...
- 使用hexdump工具追踪EXT4文件系统中的一个文件
昨天追踪EXT4文件系统的过程中出了点问题,就是找不到文件,于是试了一下追踪FAT32文件系统的,成功之后有了点信心,今天继续嗑EXT4文件系统,终于找到啦,记录一下. 操作系统:linux(cent ...
- 文件的inode号操作
linux给每个文件生成了一个唯一的inode编号,命令行下操作文件需要输入文件名,如果遇到文件名特别难输入(或者包含特殊符号)的情况,可以用inode号操作文件. 可以用这个命令查看inode号: ...
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...
- ambarella H2 添加文件到ext4文件系统
方法1: ambarella/rootfs目录下有skeleton(骨架)目录,此目录下就是文件系统的各个目录, [root@jz4775dev]# ls skeleton/ bin debug de ...
- 分区里的inode号是0号和1号的block
分区里的inode号是0号和1号的block 我相信大家在使用Linux的时候都遇到过误删文件系统数据的情况,不管是自己误删还是帮人家恢复误删 现在用的比较多的恢复工具大概是ext3grep .ext ...
- MySQL ·InnoDB 文件系统之文件物理结构
从上层的角度来看,InnoDB层的文件,除了redo日志外,基本上具有相当统一的结构,都是固定block大小,普遍使用的btree结构来管理数据.只是针对不同的block的应用场景会分配不同的页类型. ...
随机推荐
- sort()的部分用法
#include <iostream> #include <cstdio> #include <algorithm>//sort要包含的头文件 #include & ...
- Javaweb——四则运算---18.11.01
---恢复内容开始--- test.jsp <%@ page language="java" contentType="text/html; charset=utf ...
- Xshell 清除历史记录方法
使用电脑久了,就会清理电脑,将一些历史记录清除,使得电脑可以运行的更快,Xshell也是同样的道理.本集小编就教大家如何清除xshell的历史记录. 如何清除历史记录: 1.打开xshell,然后点击 ...
- JavaScript---设计模式简介
概念 设计模式(Design pattern)是一套被反复使用.思想成熟.经过分类和无数次实战设计经验的总结的.使用设计模式是为了让系统代码可重用.可扩展.可解耦.更容易被人理解且能保证代码的可靠性. ...
- Hibernate-ORM:14.Hibernate中的命名查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...
- DSP28335的XINTF操作SRAM实验
1. 本次使用三兄弟的XDS28335开发板,研究一下XINTF操作SRAM的代码.哈弗结构,奇怪,DSP28335是哈弗结构,那么数据和程序空间应该独立的,为啥书上说采用统一的寻址方式?估计只是读写 ...
- 关于 SSH Server 的整体设定
# . 关于 SSH Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式 Port # SSH 预设使用 这个 port,您也可以使用多的 port ! # 亦即重复使用 po ...
- ArcGIS Server远程处理服务器(环境设置)
当使用ArcGIS Server做远程处理服务器执行影像处理操作时,提示ERROR 999999通用错误代码,如下: Start Time: Mon Jul 03 13:49:06 2017Distr ...
- Hackerrank - [Algo] Matrix Rotation
https://www.hackerrank.com/challenges/matrix-rotation-algo 又是一道耗了两小时以上的题,做完了才想起来,这不就是几年前在POJ上做过的一个同类 ...
- PHP二维数组按某个键值排序
$data=Array( [0] => Array ( [id] => 2 [user_id] => 14 ...