老UNIX文件系统,其数据结构在磁盘上类似:
image.png
超级块包含有关整个文件系统的信息:卷的大小、有多少inode、指向空闲列表块的头部的指针。磁盘的inode区域包含文件系统的所有inode。最后大部分磁盘都被数据块占用。

问题:性能非常糟糕。原因是:老文件系统将磁盘当做随机存取内存,数据遍布各处,所以带来了昂贵的定位成本。例如,文件的数据块距离inode非常远,所以每当读取inode然后读取文件数据块时,就会有昂贵的寻道。文件系统也会碎片化

41.2 FFS:磁盘意识是解决方案

快速文件系统:让文件系统的结构和分配策略具有“磁盘意识”。

41.3 组织结构:柱面组

  • 更改磁盘上的结构。FFS将磁盘划分为一些分组,称为柱面组

image.png
在同一组中放两个文件,FFS可以确保先后访问两个文件不会导致穿越磁盘的长时间寻道。

FFS需要在每个组中分配文件和目录。每个组看起来像这样:
image.png

41.4 策略:如何分配文件和目录

在磁盘上放置文件、目录以及相关元数据的方式:相关的东西放一起

  • 目录的放置:

找到分配数量最少的柱面组和大量自由inode,并将目录数据和inode放在该分组中。

  • 文件的放置:

确保将文件的数据块分配到与其inode相同的组中将位于同一目录中的所有文件,放在他们所在目录的柱面组

41.6 大文件例外

如果将大文件放入块组并填满了,会妨碍随后相关的文件放入该组,会破坏文件访问的局部性。

对大文件,FFS将一定数量的块分配到第一个块组,将文件的下一个大块放在另一个块组中(可能因为这部分数据的利用率低)。以此类推。