UFS是UNIX文件系统的简称,属于FFS的演化版本。UFS几乎是大部分UNIX类操作系统默认的基于磁盘的文件系统,包括Solaris、Free BSD、Open BSD等,甚至Apple的OS X也能支持UFS文件系统。
UFS 是 UNIX 文件系统的简称,它来源于 4.3Tahoe 发行版中提供的 BSD Fat Fast File System(FFS)系统,属于 FFS 的演化版本。UFS 几乎是大部分 UNIX 类操作系统默认的基于磁盘的文件系统,包括 Solaris、Free BSD、Open BSD、Net BSD、HP-UX 等,甚至 Apple 的 OS X 也能支持 UFS 文件系统。
在最初的 FFS 文件系统的设计中,为了使文件系统在遭到毁灭性打击,如硬盘发生整个磁道、整个盘面或者整个柱面损坏时能够得以恢复,在文件系统初始化时,会将文件系统的重要数据结构复制到整个磁盘的多个位置,以便在发生硬件损坏时能够读取,而 UFS 文件系统也继承了这些优良的特性。
另外,为了提高运行效率,UFS 文件系统与磁盘的结构也有着完美的结合,UFS 将整个磁盘的所有逻辑柱面平均分配为若干个组,每组称为一个“柱面”。在 UFS 内部就用柱面组队文件系统进行分段组织和管理,每个柱面组中都有文件系统关键数据结构的备份,所有文件在各个柱面组中相对独立地存储而又有机地结合在一起。这就使磁盘中的磁头在访问文件系统中的数据时有效地减小了摆动,提高了访问效率。
UFS 文件系统在创建时,磁盘的盘片被分成若干个柱面组,每个柱面组由一个或多个联系的磁盘柱面组成,在文件系统的前部会有一个叫做“柱面组概要”的结构对整个文件系统中的每个柱面组信息进行统计,并且在每个柱面组中还有一个“柱面组描述符”用来管理当前柱面组。
每个柱面组又进一步被分成若干个可寻址的块,以控制和组织柱面组中文件的结构,所以“块”是 UFS 文件系统中文件分配和存储的基本单位,类似于 FAT 文件系统和 NTFS 文件系统中“簇”的概念。
在 UFS 文件系统中,“块”有多种类型,每种类型的块都具有特定的功能。UFS 文件系统主要具有四种类型的块:引导块、超级块、i-节点、数据块。
引导块:在引导系统时使用的信息
超级块:记录文件系统的详细信息
i-节点:记录文件的各种信息
数据块:存储每个文件的实际内容
UFS 文件系统中的“块”又被分成更小的单位,叫做“段”。在创建 UFS 文件系统时,可定义段的大小,默认的段大小一般为 1KB。每个块都可以分成若干个段,段大小的上限就是块的大小,下限实际上为磁盘扇区大小,通常为 512 字节。
当文件写入文件系统时,首先为文件分配完整的块,然后为不满一个块的剩余部分分配某个块的一个或者多个段。对于比较小的文件,首先分配段进行存储。能够为文件分配块中的段而不是仅分配完整的块,就减少了块中未使用的空间,从而提高了磁盘的利用率。
在创建文件系统时,选择段的大小需要考虑时间和空间的平衡,小的段大小可节省空间,但是需要更多的时间进行分配,通常,当大多数文件都很大时,要提高存储效率,应为文件系统使用较大的段大小,当大多数文件都比较小时,应为文件系统使用较小的段大小。
综上所述,UFS 文件系统由若干个“柱面组”构成,每个柱面组包含一定数量的“块”,每个块又由若干个“段”组成。“段”是 UFS 文件系统的最小存储单元。每个柱面组、块、段在文件系统中都有自身的编号,它们的起始编号都是 0.
另外,“超级块”是 UFS 文件系统中非常重要的一个结构,其重要性类似于 FAT 文件系统和 NTFS 文件系统中的 DBR,所以 UFS 在每个柱面组中都对超级块做了备份,但备份的位置却各不相同,在每个柱面组中都会发生一定的偏转,这是因为在原来的硬盘中每个磁道具有相同的扇区数,这个就导致每个柱面组的第一个扇区都位于同一个盘面上。为了减小因无力故障而产生的数据损坏,将超级块的备份在每个柱面组中错位存放就可以使它们不再存储于同一个盘面,从而降低了风险。而现在的新式硬盘每个柱面的扇区数并不相等,所以也就不存在这样的隐患,实际上 UFS2 已经不再考虑数据错位存放的问题。