深入探索文件系统数据结构与 /proc
文件系统
1. 访问文件系统数据结构
在文件系统的管理中,数据结构的组织和访问至关重要。
1.1 三重间接块
di_ib
数组的第三个元素包含三重间接块的地址。这个块用于存储更多双重间接块的地址,一个三重间接块允许寻址超过八万亿个数据块。
1.2 柱面组
在早期的 UNIX 文件系统中,索引节点(i-node)结构紧跟超级块存储在磁盘上,数据块则跟在索引节点之后。这种简单的布局在访问文件时会导致磁头频繁来回移动。快速文件系统(Fast File System)通过将磁盘划分为多个柱面组(cylinder groups)解决了这个问题。
每个柱面组包含一个定义该组记账信息的结构、超级块的冗余副本、一些索引节点结构和数据块。柱面组的记账信息包括该组中哪些索引节点正在使用,哪些磁盘块未使用。柱面组的概念使得文件的数据块尽可能连续布局,从而最小化了从一个块到下一个块的旋转延迟。
柱面组信息存储在 sys/fs/ufs_fs.h
头文件中定义的 struct cg
类型的结构中:
struct cg {
struct cg *cg_link; /* linked list of cyl groups */
long cg_magic; /* magic number