深入探索文件系统数据结构与 /proc 文件系统
1. 文件系统数据结构基础
在文件系统中,数据的存储和组织方式至关重要。以 UNIX 文件系统为例,最初的布局是 i - node 结构紧跟超级块存储在磁盘上,随后是数据块。但这种简单布局在访问文件时会导致磁头频繁来回移动,增加了访问时间。
为了解决这个问题,快速文件系统引入了柱面组(Cylinder Groups)的概念。它将磁盘划分为多个柱面组,每个柱面组包含用于记录该组信息的结构、超级块的冗余副本、一些 i - node 结构以及数据块。柱面组的记账信息包括组内哪些 i - node 正在使用,哪些磁盘块未被使用。这种方式使得文件的数据块尽可能连续存储,减少了块与块之间的旋转延迟。
柱面组信息存储在sys/fs/ufs_fs.h头文件中定义的struct cg类型结构里,具体如下:
struct cg { struct cg *cg_link; /* linked list of cyl groups */ long cg_magic; /* magic number */ time_t cg_time; /* time last written */ long cg_cgx; /* we are the cgx'th