理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫作扇区,每个扇区储存512字节,相当于0.5KB。
操作系统读取磁盘的时候,不会一个一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次读取一个块。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block。
文件数据都存储在块中,很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫作inode,中文译名为索引节点。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
接下来,小编为大家简述一下Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程:
Linux通过inode节点表将文件的逻辑结构和物理结构进行转换。
inode节点是一个64字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。在inode节点表中最重要的内容是磁盘地址表。在磁盘地址表中有13个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应地块。
Linux文件系统通过把inode节点和文件名进行连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的inode节点号,通过该inode节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。
用来记录文件系统对象的一些元信息数据。一个文件占用一个inode , inode数量大小时固定的(ext4与xfs可以设置为256B)。inode中大致有如下信息:
文件属主与属组
文件读写属性(基本rwx权限等)
文件大小(字节数)
文件时间戳(ctime、atime、mtime)
记录文件内容的指向block(文件内容数据的存储位置指针,)
文件特性表示(flag,如SetUID)
连接数(有多少硬链接指向这个inode)
一个文件占用一个inode ,且inode是固定的,小文件过多就可能造成磁盘空间剩余挺多,但是inode耗尽的情况。
ext文件系统可以查询inode总数
查看当前系统inode使用情况
一个大文件,文件内容占用大量存储空间的话,明显一个inode 就不能完全记录这个文件存储位置指针。为此记录区块的区域定义为12个直接、一个间接、一个双间接、一个三间接记录区。这些“间接”就是拿一个区块来作为记录区来使用的“记录区”,这些就是延伸出来的“记录区”
当一个inode 中的12个直接记录区直接指向真实内容block号码。
间接记录区指向block1,block1记录了真实内容的block号码
双间接记录区指向block1,这个block1指向一个block2,block2记录了真实内容的block号码
三间接记录区指向block1,这个block1指向一个block2,block2指向block3,block3记录了真实内容的block号码
inode指向真实block号码简图(可以百度,有更详细的图片)