MENU

inode?

February 8, 2022 • Read: 276 • 常山阅读设置

inode?

前几天在看Vulhub的文档时,看到了有关inode不足的问题,觉得很有意思,决定一探究竟。

What is inode?

想要了解inode就得知道Linux的Ext32文件系统,所以就先从Ext32文件系统开始。

在Ext32文件系统(与FAT和NTFS相似)中,有三个重要概念,分别是super blockinodeblock

  • super block 记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • inode记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
  • block实际记录文件的内容,若文件太大时,会占用多个block

使用dumpe2fs可以查看分区的super block信息

使用stat命令查看Linux中任意文件的inode信息。同时,我们也可以用df -i来查看当前系统的inode总量和使用情况

在格式化储存介质时,Ext32文件系统会规划好blockinode的数量和大小,除非重新格式化,否则blockinode就再也不变了。

通常情况下,Ext32文件系统为每个block分配4096字节空间,也就是说一个block可以装4KB数据,但是并不是每个文件都不大于4KB,所以大于4KB的文件会被分配更多的block,那么如何管理每个文件分配的block就成了问题,这时候就需要用的inode

inode主要记录文件的属性以及该文件实际数据存放的block号,inode记录的文件数据至少有如下信息:

  • 该文件的访问模式(rwx权限信息)
  • 该文件的所有者与组(owner/group)
  • 该文件的大小
  • 该文件的创建或改变时间(ctime)
  • 最近一次的读取时间(atime)
  • 最近修改的时间(mtime)
  • 定义文件特性的标志
  • 文件数据内容的指向

因为每个文件都需要分配一个inode号,所以很容易造成inode号不足,导致无法创建新的文件,在《鸟哥的Linux私房菜》中鸟哥举了一个例子,详见下图

这也就解答了为什么文章开头的链接中产生的问题,最近一段时间我发现我其实根本都不懂Linux操作系统,我之前写的文章LD_PRELOAD 与绕过 PHP 禁用函数和提权Docker技术原理中所使用的技术几乎都是Linux操作系统的自身特性,因为我不了解Linux操作系统导致我在很多事情、工作和学习中遇到一些问题,所以我突然觉得学习Linux操作系统变得更为重要,这也算是对我2022年的一些期望吧。

虽然我基本上已经理解了inode,但是其实还有很多内容没有写进来,如果还想学习更多有关inode的内容,还是推荐我的参考资料,里面讲的还是很详细的。

推荐阅读

从对我的质疑说起,谈谈Linux下的文件删除

参考资料

  1. 《鸟哥的Linux私房菜 基础学习篇》
  2. https://ruanyifeng.com/blog/2011/12/inode.html

Tips1:经过我的测试,似乎可以通过df -i可以判断当前环境是否为docker环境,希望有大佬能指点一二

Tips2:《鸟哥的Linux私房菜 基础学习篇》PDF下载

此处内容需要评论回复后方可阅读

Archives QR Code Tip
QR Code for this page
Tipping QR Code