文件系统与文件
在文件系统中,一个文件大体上可以由目录项、inode和数据块组成:
- inode: 索引节点,存放数据块的指针
- 目录项:包含文件名和inode节点号
- 数据块:包含具体的文件内容
还有一个关注点是超级块,它会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
inode
inode,全称是index node,中文含义就是索引节点,它用来记录文件的元数据,比如 inode 编号、文件大小、访问权限、修改日期以及文件数据块的地址索引等,通过数据块的索引就可以找到具体的数据块。
在ext3文件系统中inode有15个索引,其中前12个索引直接记录数据块的地址,第13个索引记录索引地址。也就是说,索引块指向的硬盘数据块并不直接记录文件数据,而是记录文件数据块的索引表,依次的,第 14 个索引记录二级索引地址,第 15 个索引记录三级索引地址,下面是示意图:
还有一点需要注意,索引节点和文件一一对应(inode与文件一一对应),它跟文件内容一样,需要持久化到磁盘,是占磁盘空间的。
如果一个文件比较大,inode的块号不足以标识所有的数据块,就会使用间接块。文件系统会在硬盘上分配一个数据块,不存储文件数据,专门用来存储块号。就是上图的索引表?。
目录项
在Linux系统中,目录(directory)也是一种文件,打开目录,也就是打开目录文件,目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。下面是示意图
文件系统组件的体系结构
接下来,我们来梳理一下体系结构,从应用层到VFS,再到磁盘的一个结构图,从这个架构图中我们可以对文件系统有一个更加清晰的认识,如下图所示:
以上来自:https://pjmike.github.io/2019/12/23/%E8%81%8A%E8%81%8A%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E9%82%A3%E4%BA%9B%E4%BA%8B/
参考:
https://www.51cto.com/article/667640.html
标签:文件,数据,文件系统,索引,磁盘,inode,目录 From: https://www.cnblogs.com/rebrobot/p/17168080.html