inode(index node):索引节点

作用:用于存贮文件和目录基本信息

理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。


inode存贮方法:inode table索引节点表,存储若干文件的元数据

inode number每个文件都有一个唯一的编号,唯一界限在同一个分区

inode table 表中:数据字段记录文件的数据内容,记录文件的子目录和子目录节点号

inode节点大小:

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
 由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

操作系统如何读取文件:

文件名只是便于人查找文件,实际上操作系统内部不使用文件名,而真正使用的是inode的节点,通过文件名,在inode节点表中找到文件相应的节点,在通过节点找到文件的元数据,最后根据元数据来找到文件实际存储的数据。


inode节点包括文件的元信息包括:

  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置


查看inode信息方法:

stat 文件

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。没增加一个文件inode used就会增加1,inodes 是总共可以创建多少个文件


查看每个文件的节点号ls -i ,ll=ls -l


inode 节点表如何存贮数据

指向数据块的指针类型:直接指针数量1-12个 

                                      一个数据块最多4k,所以直接指针最多能指向的数据只有48K,大于48K的数据要使用间接指针

                                       间接直接:将指针限制向一个指针块(1024个块)共计能存1024*4k=4M 大于48k  小于4M用

此指针

                                       三重间接指针:从间接指针以此退最多存4G文件


inode节点实际应用

在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。