当前位置:首页 > 百科知识 > 电子工程 > 正文

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文件系统。

简介:  

  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文件系统在创建时,磁盘的盘片被分成若干个柱面组,每个柱面组由一个或多个联系的磁盘柱面组成,在文件系统的前部会有一个叫做“柱面组概要”的结构对整个文件系统中的每个柱面组信息进行统计,并且在每个柱面组中还有一个“柱面组描述符”用来管理当前柱面组。

  每个柱面组又进一步被分成若干个可寻址的块,以控制和组织柱面组中文件的结构,所以“块”是UFS文件系统中文件分配和存储的基本单位,类似于FAT文件系统和NTFS文件系统中“簇”的概念。

  在UFS文件系统中,“块”有多种类型,每种类型的块都具有特定的功能。UFS文件系统主要具有四种类型的块:引导块、超级块、i-节点、数据块。

  引导块:在引导系统时使用的信息

  超级块:记录文件系统的详细信息

  i-节点:记录文件的各种信息

  数据块:存储每个文件的实际内容

  UFS文件系统中的“块”又被分成更小的单位,叫做“段”。在创建UFS文件系统时,可定义段的大小,默认的段大小一般为1KB。每个块都可以分成若干个段,段大小的上限就是块的大小,下限实际上为磁盘扇区大小,通常为512字节。

  当文件写入文件系统时,首先为文件分配完整的块,然后为不满一个块的剩余部分分配某个块的一个或者多个段。对于比较小的文件,首先分配段进行存储。能够为文件分配块中的段而不是仅分配完整的块,就减少了块中未使用的空间,从而提高了磁盘的利用率。

  在创建文件系统时,选择段的大小需要考虑时间和空间的平衡,小的段大小可节省空间,但是需要更多的时间进行分配,通常,当大多数文件都很大时,要提高存储效率,应为文件系统使用较大的段大小,当大多数文件都比较小时,应为文件系统使用较小的段大小。

  综上所述,UFS文件系统由若干个“柱面组”构成,每个柱面组包含一定数量的“块”,每个块又由若干个“段”组成。“段”是UFS文件系统的最小存储单元。每个柱面组、块、段在文件系统中都有自身的编号,它们的起始编号都是0.

  另外,“超级块”是UFS文件系统中非常重要的一个结构,其重要性类似于FAT文件系统和NTFS文件系统中的DBR,所以UFS在每个柱面组中都对超级块做了备份,但备份的位置却各不相同,在每个柱面组中都会发生一定的偏转,这是因为在原来的硬盘中每个磁道具有相同的扇区数,这个就导致每个柱面组的第一个扇区都位于同一个盘面上。为了减小因无力故障而产生的数据损坏,将超级块的备份在每个柱面组中错位存放就可以使它们不再存储于同一个盘面,从而降低了风险。而现在的新式硬盘每个柱面的扇区数并不相等,所以也就不存在这样的隐患,实际上UFS2已经不再考虑数据错位存放的问题。

  UFS文件系统的引导块:

  引导块是UFS文件系统中的第一个块,也就是0号块。它的结构因操作系统的不同而稍有区别,但一般都是由磁盘标签和引导程序组成。

  只有当UFS文件系统中包含操作系统内核时,引导块中才会有引导程序。如果UFS文件系统中不保护操作系统内核,引导块中则没有引导程序,只有磁盘标签。

  UFS文件系统的超级块:

  UFS文件系统超级块的重要性类似于FAT文件系统和NTFS文件系统中的DBR,但比DBR的结构复杂很多,超级块中记录着许多参数[1]  ,主要包括:

  文件系统的大小和状态

  文件系统名称和卷名称

  文件系统块的大小及段大小

  上次更新的日期和时间

  柱面组的大小

  柱面组中的数据块数

  柱面组概要的地址

  文件系统状态

  最后一个挂载点的路径名

  由于超级块包含文件系统的关键数据,因此在创建文件系统时建立了多个超级块,在每个柱面组内都有一个超级块的备份。

  UFS文件系统的i-节点

  UFS文件系统的i-节点用来存储与文件相关的除文件名以外的所有信息,包括指向文件的硬链接数、文件大小、文件的时间信息、文件属主的用户ID、文件所属的组ID、文件内容存放地址的块指针等重要信息,这些重要信息也被称为元数据[1]  。

  UFS文件系统的每个柱面组中都有一个自己的i-节点表。i-节点表由很多i-节点组成,每个文件或者目录使用一个i-节点。UFS1的i-节点在文件系统创建时即被初始化,而UFS2的i-节点则在需要时才被初始化,所以当文件系统中的数据块不够使用时,UFS2能够使用i-节点表中的空闲空间存放数据。

  在每个柱面组的组描述符中都有一个i-节点位图,用来管理i-节点表中的i-节点使用和分配情况。如果要确定一个i-节点属于哪个柱面组,可以用当前i-节点号对每个柱面组的i-节点数做取整运算得到,而每个柱面组的i-节点数在超级块和柱面组描述符中都有记录。

UFS 日志记录:

  UFS 日志记录会将组成一个完整 UFS 操作的多个元数据更改打包成一个事务。事务集记录在盘上日志中,然后会应用于实际文件系统的元数据。

  重新引导时,系统会废弃未完成的事务,但是会对已完成的操作应用事务。文件系统将保持一致,因为仅应用了已完成的事务。即使在系统崩溃时,也仍会保持此一致性。系统崩溃可能会中断系统调用,并导致 UFS 文件系统出现不一致。

  UFS 日志记录功能有两个好处:

  如果文件系统已经通过事务日志达到一致,则在系统崩溃或异常关机后可能不必运行 fsck 命令。从 Solaris 9 12/02 发行版开始,UFS 日志记录的性能已经提高甚至超过了无日志记录功能的文件系统的性能级别。这一改进之所以能够实现是由于启用日志记录功能的文件系统可以将对相同数据的多重更新转换为单一更新。因此,减少了磁盘操作所需的开销。

  UFS 事务日志具有以下特征:

  从文件系统上的空闲块分配而来

  对于每 1 GB 的文件系统,其大小约为 1 MB,最大为 64 MB

  填满时会不断刷新

  取消挂载文件系统或使用任何 lockfs 命令之后也会刷新。

  所有 UFS 文件系统均缺省启用 UFS 日志记录。

  如果需要禁用 UFS 日志记录,请在 /etc/vfstab 文件中或手动挂载文件系统时,向文件系统的项添加 nologging 选项。

  如果需要启用 UFS 日志记录,请在 /etc/vfstab 文件中或手动挂载文件系统时,在 mount 命令中指定-o logging选项。可以在包括根 (/) 文件系统的任何 UFS 文件系统上启用日志记录。另外,fsdb 命令还包含支持 UFS 日志记录的新调试命令。

  在一些操作系统中,启用了日志记录的文件系统称为日记记录文件系统。


内容来自百科网