linux命令实践-关于inode

简介:
  上节我们提到了inode,实际上inode是文件系统里的一个概念,所以讲inode还是要从文件系统说起。
   Linux支持的文件系统差不多有十几种,为了更好的管理这些结构不同的文件系统,它采用了虚拟文件系统(VFS)。IBM网站上有一篇《linux文件系统剖析》的文章,它对linux文件系统的体系结构做了一番详细的分析,相当不错,有兴趣的话自己可以去看一下。这篇文章里讲到,VFS实际上是底层文件系统的接口,提供了一个抽象的功能,使得各种不同的文件系统能够共存,inode就是VFS里的一个概念。 
  VFS采用了一组数据结构来描述文件系统,这些数据有超级块、inode、dentry和数据块。
  Linux在操作文件系统中的文件时,首先先读取超级块信息,找到文件名对应的inode,然后根据inode找到磁盘中的文件,进而根据inode中的信息来完成文件的各种操作。也就是说,linux通过inode来寻找磁盘中的文件,而不是通过文件名来寻找的。这就是linux操作文件时的一个大致过程,当然具体情况要比这复杂。
  这个过程里,超级块是linux管理文件系统的重要手段,linux用它来描述和维护文件系统。超级块包含有分区文件系统的重要信息,其中就包括inode编号、总inode数和空闲inode数等。超级块每分区只有一个,位于根上。
  超级块包含文件系统的重要信息,而inode则包含文件系统中的文件的重要信息。那么inode里都包含文件的哪些重要信息呢?我们在下面将要谈到。 Linux为每个文件都分配一个唯一的inode,即使这个文件是空白文件,或者是一个不存在的文件,比如我们在《df》一文中提到的/proc目录下的文件。这些文件并不占用数据块,但它们也有与之对应的inode。 
  dentry是用来干什么的呢?它实现了文件名和inode编号的映射。当然dentry还有其它的功能。
  而数据块就是存放实际数据的地方喽。
  我们可以看到,inode编号是存放在超级块里的,并不存放在inode里,就像文件名不存放在文件里一样;当然,文件名也没有存放在inode里。实际上,linux里文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即dentry)中,文件属性存放在inode中,文件内容存放在数据块中。
  现在,你是不是对这个过程有了大致的了解但是仔细想起来又觉得一头雾水呢?是的,因为这里涉及到的许多重要的细节都没有提到,毕竟我们这里不是讲VFS的,所以就没有详细的讲述。若是感兴趣的话,可以自己搜索一下这方面的文章。下面我们就来谈一下inode。
  网上有文章里提到inode有两种,分别是内存中的inode和文件系统中的inode。我们要根据上下文语境来理解它到底指的是哪一种inode,一般是指内存中的inode。比如用命令ls –li得出的inode指的内存中的inode,而df –i得出的inode指的就是文件系统中的inode。
  一个文件对应的inode包含这个文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息,还有就是对文件在数据块中存放位置的指向。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。inode结构中的静态信息取自物理设备上的文件系统,由文件系统指定的函数填写,它只存在于内存中,可以通过inode缓存访问。虽然每个文件都有相应的inode结点,但是只有在需要的时候系统才会在内存中为其建立相应的inode数据结构,建立的inode结构将形成一个链表,我们可以通过遍历这个链表去得到我们需要的文件结点。
  在分割扇区时,系统会先做出一堆inode以供以后使用,由于每一个文件对应着一个inode,因此inode 的数量关系着系统中可以建立的档案及目录总数。有时候,这些inode或许会不够用,那么即使磁盘容量远未达到使用极限,你也不可能在文件系统中创建文件,此时文件系统就需要增加inode。所以当你发现你磁盘还有很多剩余空间却不能创建文件时,你就要检查inode使用情况了。一般情况下你不必为这个问题担心,系统自动创建的inode能满足大多数应用。这里说的inode是存放在超级块里的inode,也就是有些文章里所讲的文件系统中的inode。
  刚才我们说,大多数情况下我们不必担心inode的数量问题,但是作为一个知识点,我们应该掌握如何恰当地调整inode的数量及大小。
  总的来说,我们应该注意两种情况:一种是文件很小但数量很多,这种情况容易导致磁盘空间还有剩余但inode数量不够用;另外一种是文件很大但数量不多,这种情况容易导致磁盘空间用完但inode还有剩余,这实际上也浪费了磁盘空间,毕竟inode是要占用磁盘空间的,一般情况下,每个inode占用1024 byte,即128k<的磁盘空间。我们可以根据实际需要调整inode的数量,或增加,或减少。
  我们不但可以调整分区中inode的数量,也可以调整inode的大小。刚才讲到,每个inode一般占用1024 byte即128 K的磁盘空间,这并不是绝对的,1024 byte只是大家普遍认为的最佳大小。Inode size不是越大越好,也不是越小越好,这两种情况都会导致磁盘利用率下降。
  到这里就结束了,对inode的由来,inode的作用,inode与磁盘空间的关系,我们有了一个大致的理解,至于如何调整inode的数量及大小,这里不谈。

本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/192812
相关文章
|
11天前
|
Web App开发 Linux 网络安全
工作中常用到的Linux命令
工作中常用到的Linux命令
|
8天前
|
NoSQL Linux Shell
常用的 Linux 命令
常用的 Linux 命令
30 9
|
1天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
9 0
|
2天前
|
域名解析 网络协议 Linux
Linux 中的 Nslookup 命令怎么使用?
【4月更文挑战第12天】
22 6
Linux 中的 Nslookup 命令怎么使用?
|
3天前
|
运维 网络协议 Unix
18.系统知识-Linux常用命令
18.系统知识-Linux常用命令
|
4天前
|
网络协议 Ubuntu Linux
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
|
4天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
48 0
|
6天前
|
Linux 数据安全/隐私保护
Linux基础与服务器架构综合小实践
【4月更文挑战第9天】Linux基础与服务器架构综合小实践
1192 6
|
7天前
|
缓存 运维 监控
Linux系统监控利器:探索常用命令及数据保存技巧
Linux系统监控利器:探索常用命令及数据保存技巧
24 4
Linux系统监控利器:探索常用命令及数据保存技巧
|
10天前
|
Linux 索引
linux 文件查找 和文件管理常用命令
linux 文件查找 和文件管理常用命令
19 0