文件系统的分配和布局策略直接影响到文件系统访问的性能。为此,现代的文件系统都采用各种优化手段。
3.1 块的再分配
为了让设计简单,而且对最差情况下产生的文件系统碎片进行限制,传统的文件系统将磁盘分成大小相等的磁盘块。由于磁盘扇区的大小一般为512,块的大小一般也为512的整数倍字节。在传统的文件系统中,整个磁盘块只能分配给单独的一个文件。但是由于文件大小并不总是文件系统块大小的整数倍,所以这种设计使得最后的那个磁盘块(称为尾部)只被部分利用,这就产生了内部碎片。块的再分配(block suballocation)就是将尾部块再次分块,使得它可以被用来存储其它文件的片段。
一些块的再分配方案能够实现字节级的分配,但是大多数方案只是将磁盘块分成更小的磁盘块(通常分成2的整数次幂个)。
3.2 尾部打包
一些文件系统为了利用上面描述的那些未使用的空间,将若干不同的文件的尾部打包放在单一的共享尾块中。这种方法称为尾部打包(tail packing)。虽然这种方法似乎会明显地增加文件系统的碎片,但是可以通过现代操作系统的预读特性来减轻这个副作用,因为对于小文件,几个存储在不同块的文件尾部可能非常靠近,因而可以同时读入,这样就不会引入额外的寻道时间。这种文件系统一般会使用启发式来决定在给定情形下否是值得进行尾部打包,碎片整理软件也许需要引入更多启发式。
在大部分文件都小于块大小的一半的情形下,例如一文件夹的源代码小文件或者小点阵图,相比于不使用尾部打包的文件系统,使用尾部打包的文件系统能够获得双重的效率。这种情况下,引入尾部打包不仅能够节省磁盘空间&#