共计 2715 个字符,预计需要花费 7 分钟才能阅读完成。
今天丸趣 TV 小编给大家分享一下 linux 中 i 节点指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
在 linux 中,i 节点时一个 64 字节长的表;i 节点中含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等,在 i 节点中最重要的一项是磁盘地址表。
本教程操作环境:linux7.3 系统、Dell G3 电脑。
linux 中 i 节点
i 节点是一个 64 字节长的表,含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等。
linux 文件系统是 Linux 系统的心脏部分,提供了层次结构的目录和文件。文件系统将磁盘空间划分为每 1024 个字节一组,称为块 (也有用 512 字节为一块的,如:SCOXENIX)。编号从 0 到整个磁盘的最大块数。
全部块可划分为四个部分,块 0 称为引导块,文件系统不用该块; 块 1 称为专用块,专用块含有许多信息,其中有磁盘大小和全部块的其他两部分的大小。从块 2 开始是 i 节点表,i 节点表中含有 i 节点,表的块数是可变的,后面将做讨论。i 节点表之后是空闲存储块(数据存储块),可用于存放文件内容。
文件的逻辑结构和物理结构是十分不同的,逻辑结构是用户敲入 cat 命令后所看到的文件,用户可得到表示文件内容的字符流。物理结构是文件实际上如何存放在磁盘上的存储格式。用户认为自己的文件是边疆的字符流,但实际上文件可能并不是以边疆的方式存放在磁盘上的,长于一块的文件通常将分散地存放在盘上。然而当用户存取文件时,linux 文件系统将以正确的顺序取出各块,给用户提供文件的逻辑结构。
当然,在 linux 系统的某处一定会有一个表,告诉文件系统如何将物理结构转换为逻辑结构。这就涉及到 i 节点了。
i 节点是一个 64 字节长的表,含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等。在 i 节点中最重要的一项是磁盘地址表。
该表中有 13 个块号。前 10 个块号是文件前 10 块的存放地址。这 10 个块号能给出一个至多 10 块长的文件的逻辑结构,文件将以块号在磁盘地址表中出现的顺序依次取得相应的块。当文件长于 10 块时又怎样呢? 磁盘地址表中的第 11 项给出一个块号,这个块号指出的块中含有 256 个块号,至此,这种方法满足了至多长于 266 块的文件(272384 字节)。如果文件大于 266 块,磁盘地址表的第 12 项给出一个块号,这个块号指出的块中含有 256 个块号,这 256 个块号的每一个块号又指出一块,块中含 256 个块号,这些块号才用于取文件的内容。磁盘地址中和第 13 项索引寻址方式与第 12 项类似,只是多一级间接索引。
这样,在 linux 系统中,文件的最大长度是 16842762 块,即 17246988288 字节,有幸是 Linux 系统对文件的最大长度(一般为 1 到 2M 字节)加了更实际的限制,使用户不会无意中建立一个用完整个磁盘区所有块的文件。
inode
提到 inode,我们不得不先介绍硬盘的整体结构。硬盘中包含多个硬盘盘片,硬盘盘片为圆形,每个硬盘盘片都有一个可以读写的磁头 (Head),将这个磁头固定,使硬盘盘片旋转一周,所走轨迹就是磁道 (Track)。硬盘内所有盘片的相同磁道号的集合成为磁柱 (Cylinder)。每一磁道被划分成许多区域,每个区域叫一个扇区 (Sector)。扇区是硬盘的最小存储物理量,一个扇区的存储容量大约是 512 字节 (约 0.5K)。
知道了硬盘的大体结构之后,再来谈谈怎么进行硬盘分区。进行硬盘分割的最小单位是磁柱,分割完之后自然就是格式化 (format)。在 Linux 中进行格式化必须考虑 Block 与 inode,Block 还好理解,它是磁盘可以记录的最小单位,是由数个扇区组成,所以大小通常为 n *512Bytes,例如 4K。
那么 inode 是什么呢 Block 是记录文件内容的区域,inode 则是记录该文件的属性及其放置在哪个 Block 之内的信息。所以,每个文件都会占用一个 inode。当 Linux 系统要查找某个文件时,它会先搜索 inode table 找到这个文件的属性及数据存放地点,然后再查找数据存放的 Block 进而将数据取出。inode 数量在一开始已被设定好,其设定方式通常是 硬盘大小 / 一个容量,这个容量比 Block 大一些较佳,例如刚才将 Block 设为 4K,那么这个容量可以设为 8K 左右。所以,一块 1GB 的硬盘如果以 8K 大小划分它的 inode 数,则会有 131072 个 inode。一个 inode 的大小为 128Byte,这样,我们就可以清楚地知道,一个分区被格式化为一个文件系统之后,基本上它一定会有 inode table 与数据区域两大块,一个用来记录文件的属性信息与该文件存放的 Block 块,一个用来记录文件的内容。
创建一个文件后,会同时创建一个 inode 和一个 block,inode 存放的是文件的属性信息,但是不包括文件名,并存放所对应数据所在的 block 块的地址的指针;block 存放文件的数据,每个 block 最多存放一个文件,而当一个 block 存放不下的情况下,会占用下一个 block。
linux 里文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即 dentry)中,文件属性存放在 inode 中,一般情况下,每个 inode 占用 128Bity 磁盘空间,文件内容存放在数据块中。
block 块可以用 mkfs.ext3 - b 来制定快的大小,每个 block 块最多可存放一个文件,所以一般 block 块的大小设置要根据我们服务器的应用了设置,如果这个服务器较多用来存放一些多的小文件,那就可以把 block 块的大小设置的小一些,不至于浪费空间,而当存放的都是大数据时就需要把 block 设置的大些,这样可以减少对磁盘 block 的读取次数,也可以减少 inode 的记录负担。
block 越大,inode 越少,适合存储大文件的文件系统;block 越小,inode 越多,适合存储文件多而小的文件系统。
系统运行时,inode 和 block 会在修改后内存与磁盘做一个同步,我们用 ls -li 列出来的内容这是内存中的暂存,所以有时候系统非正常的关机会导致 block 和 inode 的不同步问题。
以上就是“linux 中 i 节点指的是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。