Linux 文件系统中的 i 节点:原理、地址项详解及文件索引示例
i 节点 (inode) 是文件系统中的一个数据结构,用于存储文件的元数据信息,如文件大小、创建时间、修改时间、权限等。i 节点还包含了指向文件数据块的指针,可以通过 i 节点来访问文件数据块。
在 Linux 中,i 节点的物理地址字段中有 12 个地址项,每个地址项占用 4B,共占用 48B。这 12 个地址项分别代表以下含义:
-
直接块 (Direct blocks):前 12 个数据块直接存储在 i 节点中,每个数据块大小为 4KB,因此最多可以存储 12 个数据块,即 48KB 的文件数据。
-
一次间接块 (Indirect blocks):第 13 个数据块存储的是一个指针块,该指针块中存储了指向其他数据块的指针,每个指针指向一个数据块,因此一个指针块可以索引 1024 个数据块,即 4MB 的文件数据。
-
二次间接块 (Double indirect blocks):第 14 个数据块存储的是一个指针块,该指针块中存储了指向其他指针块的指针,每个指针指向一个指针块,每个指针块又可以索引 1024 个数据块,因此一个二次间接块可以索引 1024*1024 个数据块,即 4GB 的文件数据。
-
三次间接块 (Triple indirect blocks):第 15 个数据块存储的是一个指针块,该指针块中存储了指向其他二次间接块的指针,每个指针指向一个二次间接块,每个二次间接块又可以索引 10241024 个数据块,因此一个三次间接块可以索引 10241024*1024 个数据块,即 4TB 的文件数据。
因此,一个 1100 个数据块的文件可以通过 i 节点索引这些数据块的方式如下图所示:
[插入图片,展示 i 节点如何索引 1100 个数据块的文件]
其中,前 12 个数据块直接存储在 i 节点中的地址项中,第 13 个数据块存储的指针块中的每个指针分别指向 14-1025 个数据块,第 14 个数据块存储的指针块中的每个指针分别指向 1026-1048577 个数据块,第 15 个数据块存储的指针块中的每个指针分别指向 1048578-1073741825 个数据块。因此,1100 个数据块的文件可以被索引到。
原文地址: https://www.cveoy.top/t/topic/oRsC 著作权归作者所有。请勿转载和采集!