文件系统简单理解与实操(ext4)

一、理论部分

首先建议读一下这篇简单有趣的文章:《这破玩意儿叫文件系统

总结起来就是下面两张图:

   

除此之外,ext4文件系统还有group表即GDT(块组描述符表)

最终的文件系统模型是:

====================================================================

所以要找到/var/log/messages的过程是:

  1. 找到根文件系统的块组描述符表所在的blocks,读取GDT(已在内存中)找到inode table的block号
  2. 在inode table的block中定位到根"/"的inode,找出"/"指向的data block。
  3. 在"/"的datablock中记录了var目录名和指向var目录文件inode的指针,并找到该inode记录,inode记录中存储了指向var的block指针,所以也就找到了var目录文件的data block。
  4. 在var的data block中记录了log目录名和其inode指针,通过该指针定位到该inode所在的块组及所在的inode table,并根据该inode记录找到log的data block。
  5. 在log目录文件的data block中记录了messages文件名和对应的inode指针,通过该指针定位到该inode所在的块组及所在的inode table,并根据该inode记录找到messages的data block。
  6. 最后读取messages对应的datablock。

简言之:找到GDT-->找到"/"的inode-->找到/的数据块读取var的inode-->找到var的数据块读取log的inode-->找到log的数据块读取messages的inode-->找到messages的数据块并读取它们。

二、实践

准备:虚拟机增加一块盘sdb;有一个5G分区sdb1,文件系统为ext4,挂载在/media。/media下有个文件:/media/log

实验:通过inode查询log,就相当于cat /media/log 背后的操作,便于理解上面查看/var/log/messages那段话

首先要获取文件系统的基本信息:dump2fs  /dev/sdb1

  block size=4k  一个块的大小是4k

  inode size=256B  一个inode的大小是256B,所以一个块有4K/256B=16个inode

  group0的 Inode table at 673-1184 (+673)  即块号(673-1184)存放的是inode和数据块

根的inode是从2号inode开始的(inode1被用作统计坏块了: Inode 1 is used to keep track of any bad blocks on the disk)

[root@shenlin ~]# stat /media  (这里/media就是sdb1的根)
File: ‘/media’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 811h/2065d Inode: 2 Links: 4
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

每个块的地址是从(0x0000~0x1000)

综上inode2在第673号block,偏移量offset=(inode-1)*256B=256B换算成16进制就是0x0100;即inode2的范围是(0x0100~0x0200)

使用:dd if=/dev/sdb1 bs=4096 skip=673|hexdump -C -n 4096  显示第673号块的二进制数据

根据inode的定义(参见inode结构体),该inode指向的块是00 00 22 a1 (从右往左)换算成十进制是8865号块

 dd if=/dev/sdb1 bs=4096 skip=8865 |hexdump -C -n 4096

 根据inode的定义,找到log的inode号为0c转换成十进制为:12

inode12的地址偏移量是(12-1)*256B=2816 转换成十六进制是0xb00,即inode12在第673号block,地址范围是(0xb00~0xc00)

inode12指向的数据块地址为00008281,转换为十进制33409

至此,我们成功通过inode找到了log文件!

参考链接:

https://blog.csdn.net/Chasing_Chasing/article/details/82260641

https://www.cnblogs.com/sstjustdoit/p/10135281.html

https://www.sohu.com/a/229842067_467784

https://zhidao.baidu.com/question/1116212835792844459.html

原文地址:https://www.cnblogs.com/qiantang/p/15117163.html