老UNIX文件系统,其数据结构在磁盘上类似:
超级块包含有关整个文件系统的信息:卷的大小、有多少inode、指向空闲列表块的头部的指针。磁盘的inode区域包含文件系统的所有inode。最后大部分磁盘都被数据块占用。
问题:性能非常糟糕。原因是:老文件系统将磁盘当做随机存取内存,数据遍布各处,所以带来了昂贵的定位成本。例如,文件的数据块距离inode非常远,所以每当读取inode然后读取文件数据块时,就会有昂贵的寻道。文件系统也会碎片化。
41.2 FFS:磁盘意识是解决方案
快速文件系统:让文件系统的结构和分配策略具有“磁盘意识”。
41.3 组织结构:柱面组
- 更改磁盘上的结构。FFS将磁盘划分为一些分组,称为柱面组。
在同一组中放两个文件,FFS可以确保先后访问两个文件不会导致穿越磁盘的长时间寻道。
FFS需要在每个组中分配文件和目录。每个组看起来像这样:
41.4 策略:如何分配文件和目录
在磁盘上放置文件、目录以及相关元数据的方式:相关的东西放一起。
- 目录的放置:
找到分配数量最少的柱面组和大量自由inode,并将目录数据和inode放在该分组中。
- 文件的放置:
确保将文件的数据块分配到与其inode相同的组中;将位于同一目录中的所有文件,放在他们所在目录的柱面组。
41.6 大文件例外
如果将大文件放入块组并填满了,会妨碍随后相关的文件放入该组,会破坏文件访问的局部性。
对大文件,FFS将一定数量的块分配到第一个块组,将文件的下一个大块放在另一个块组中(可能因为这部分数据的利用率低)。以此类推。