/ 中存储网

什么是UFS文件系统,创建方法及结构介绍

2012-10-16 12:16:30 来源:中存储网

UFS文件系统: 基于BSD快速文件系统的传统UNIX文件系统是Solaris的默认文件系统。默认启用UFS 日志记录功能。在早期的Solaris 版本中,UFS 日志记录功能只能手动启用。 Solaris 10在运行64位Solaris内核的系统上支持多TB UFS文件系统。以前,UFS文件系统在64位系统和32位系统上的大小仅限于约1 TB(Tbyte)。现在,所有UFS文件系统命令和公用程序已更新为支持多TB UFS文件系统。

UFS 是 Solaris OS 中缺省的基于磁盘的文件系统。管理基于磁盘的文件系统时,大多数情况下管理的是 UFS 文件系统。UFS 可提供以下功能:

 

UFS 功能

说明

扩展的基本类型 (extended fundamental type, EFT)

提供 32 位用户 ID (user ID, UID)、组 ID (group ID, GID) 和设备编号。

大文件系统

在最大大小可以为 16 TB 的文件系统中,允许大小约为 1 TB 的文件。可以在具有 EFI 磁盘标号的磁盘上创建多 TB UFS 文件系统。

日志记录

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

多 TB 文件系统

通过多 TB 文件系统,可以创建最大可用空间约为 16 TB 的 UFS 文件系统,其中会减去约 1% 的开销。

状态标志

显示文件系统的状态:clean、stable、active、logging 或 unknown。 这些标志可避免不必要的文件系统检查。 如果文件系统的状态为“clean”、“stable” 或 “logging”,则不运行文件系统检查。

 

Solaris 10典型的文件系统类型为UFS文件系统,但它也允许在/etc/default/fs中定义其他文件类型。在Solaris 10上,UFS文件系统驻留在硬盘上,这些硬盘同时具有原始设备接口和块设备接口,这两个接口分别位于/dev/rdsk目录和/dev/dsk目录中。Solaris 10文件系统所创建的每一个分区都在/dev/dsk和/dev/rdsk中有其自己的对应项。一个UFS文件系统的组成包括如下几部分。
 
引导块(boot block):在文件系统可引导的情况下,引导块中包含有引导数据。
超级块(super block):超级块中包含有关i节点的位置、文件系统大小、块数目,以及状态等信息。
i节点(inode):存储文件系统的文件细节信息。
数据块(data block):实际存储的文件。
 
Solaris操作系统下每个常规文件必须包含一个文件名和与之相关联的inode(信息节点),inode中存储文件的相关信息(如文件的所有者、权限和大小等信息),以及该文件所关联的数据块的指针。因此,inode数量的多少决定着一个UFS文件系统所允许创建的文件数。
一个UFS文件系统在其创建时,所允许最大的indoe数就已经固定,当该文件系统中有大量的(上千万甚至上亿个)小文件存在时,有可能出现inode数量不够用的情况,由于文件需要用inode来存储元数据(MetaData),inode数量超出将导致新文件无法被创建,尽管此时实际的存储空间还远远不到极限,所以在创建此类文件系统的时候需要考虑到这一点。
 
UFS 文件系统的柱面组结构
 
创建 UFS 文件系统时,磁盘片被分成若干个柱面组。柱面组由一个或多个连续的磁盘柱面组成。柱面组又进一步分成若干个可寻址的块,以控制和组织柱面组中文件的结构。在文件系统中,每种类型的块都具有特定的功能。UFS 文件系统具有以下四种类型的块:

块类型  

所存储信息的类型 

引导块 

在引导系统时使用的信息 

超级块 

有关文件系统的详细信息 

Inode 

有关文件的所有信息 

存储块或数据块 

每个文件的数据 

 

引导块

引导块存储在引导系统时使用的对象。如果文件系统不用于引导,则将引导块保留为空。引导块仅出现在第一个柱面组(柱面组 0)中,它是片中的前 8 KB。

超级块

超级块存储有关文件系统的大多数信息,其中包括:

 

  • 文件系统的大小和状态

  • 标号,包括文件系统名称和卷名称

  • 文件系统逻辑块的大小

  • 上次更新的日期和时间

  • 柱面组的大小

  • 柱面组中的数据块数

  • 摘要数据块

  • 文件系统状态

  • 最后一个挂载点的路径名

由于超级块包含关键数据,因此在创建文件系统时建立了多个超级块。

摘要信息块保留在超级块内。不复制摘要信息块,而是将其与主超级块组合在一起(通常在柱面组 0 中)。摘要块记录在使用文件系统时发生的更改。此外,摘要块列出文件系统中的 inode、目录、段和存储块的数目。

Inode

inode 包含有关文件的所有信息,但文件的名称(保存在目录中)除外。一个 inode 为 128 字节。inode 信息保存在柱面信息块中,它包含以下内容:

 

  • 文件类型:

    • 常规

    • 目录

    • 块特殊

    • 字符特殊

    • FIFO,也称为命名管道

    • 符号链接

    • 套接字

    • 其他 inode-属性目录和阴影(用于 ACL)

  • 文件的模式(读-写-执行权限集)

  • 指向文件的硬链接数

  • 文件属主的用户 ID

  • 文件所属的组 ID

  • 文件中的字节数

  • 包含 15 个磁盘块地址的数组

  • 上次访问文件的日期和时间

  • 上次修改文件的日期和时间

  • 更改 inode 的日期和时间包含 15 个磁盘块地址(0 到 14)的数组指向存储文件内容的数据块。前 12 个地址是直接地址。即,它们直接指向文件内容的前 12 个逻辑存储块。如果文件大于 12 个逻辑块,则第 13 个地址指向间接块,该块包含直接块地址而不是文件内容。第 14 个地址指向双重间接块,该块包含间接块的地址。第 15 个地址用于三重间接地址。下图描述从 inode 开始这些地址块之间的关系链。

    图 23–1 UFS 文件系统的地址链

    UFS inode 的地址数组与指向文件存储块的间接和双重间接指针之间的关系图。

     

    数据块

    数据块也称为存储块,它包含为文件系统分配的其余空间。这些数据块的大小是在创建文件系统时确定的。缺省情况下,为数据块分配以下两种大小:8 KB 的逻辑块大小和 1 KB 的段大小 (fragment size)。

    对于常规文件,数据块包含文件的内容。对于目录,数据块包含提供目录中文件的 inode 编号和文件名的项。

    空闲块

    在柱面组图中,当前未用作 inode、间接地址块或存储块的块被标记为空闲。此图还跟踪段以防止段化降低磁盘的性能。

    为使您了解典型的 UFS 文件系统结构,下图说明普通 UFS 文件系统中的一系列柱面组。

    图 23–2 典型的 UFS 文件系统

    包含引导块(仅在柱面组中为 8 KB)、超级块、柱面组图、inode 和存储块的 UFS 柱面组的图形。

     

    自定义 UFS 文件系统参数

    在更改由 newfs 命令指定的缺省文件系统参数之前,需要了解这些参数。本节介绍这些参数:

    逻辑块大小

    逻辑块大小是 UNIX® 内核用来读取或写入文件的块的大小。逻辑块大小通常与物理块大小不同。物理块大小通常为 512 字节,这是磁盘控制器可以读取或写入的最小块的大小。

    缺省情况下,逻辑块大小设置为系统的页面大小。对于 UFS 文件系统,缺省的逻辑块大小为 8192 字节 (8 KB)。UFS 文件系统支持 4096 或 8192 字节(4 或 8 KB)的块大小。建议的逻辑块大小为 8 KB。


    仅适用于 SPARC –

    在 sun-4uTM 平台上,只能指定 8192 字节的块大小。


    要选择最适合您系统的逻辑块大小,应同时考虑所需性能和可用空间。对于大多数 UFS 系统,8 KB 的文件系统可提供最佳的性能,在磁盘性能与主内存和磁盘的空间使用之间实现很好的平衡。

    通常,当大多数文件都非常大时,要提高效率,应为文件系统使用较大的逻辑块大小。当大多数文件都非常小时,应为文件系统使用较小的逻辑块大小。可以对文件系统使用 quot -c filesystem 命令,显示有关按块大小分布文件的完整报告。

    但是,在大多数情况下,在创建文件系统时设置的页面大小很可能是最佳大小。

    段大小

    在创建或扩展文件时,会按完整逻辑块或部分逻辑块(称为)为其分配磁盘空间。当文件需要磁盘空间时,首先分配完整块,然后为剩余部分分配某个块的一个或多个段。对于小文件,首先分配段。

    能够为文件分配块中段而不是仅分配完整块,就减少了块中未使用的孔洞所导致的磁盘空间段化,从而节省了空间。

    在创建 UFS 文件系统时,可定义段大小。缺省的段大小为 1 KB。每个块都可以分成 1 个、2 个、4 个或 8 个段,因此段大小从 8192 字节到 512 字节(仅适用于 4 KB 文件系统)不等。下限实际上为磁盘扇区大小(通常是 512 字节)。

    对于多 TB 文件系统,段大小必须等于文件系统的块大小。


    注 –

    段的上限为逻辑块大小,在这种情况下段根本不是段。如果相对于空间而言,您更关心速度,则此配置对于具有非常大的文件的文件系统可能是最佳的。


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

    最小空闲空间

    最小空闲空间是在创建文件系统时保留的磁盘空间占总磁盘空间的百分比。缺省的保留空间为((64 MB/分区大小)* 100),向下舍入到最接近的整数,且介于 1% 与 10%(包括 1% 和 10%)之间。

    空闲空间是很重要的,因为随着文件系统变满,文件访问的效率会越来越低。只要存在足够的空闲空间,UFS 文件系统就可以有效地运行。当文件系统变满,用尽可用的用户空间时,只有超级用户才能访问保留的空闲空间。

    诸如 df 之类的命令报告用户可用空间的百分比,不包括作为最小空闲空间分配的百分比。当命令报告文件系统中正使用的磁盘空间超过 100% 时,说明一些保留空间已被超级用户使用。

    如果将配额强加于用户,则可供他们使用的空间不包括保留的空闲空间。可以使用 tunefs 命令更改现有文件系统的最小空闲空间值。

    旋转延迟

    此参数已过时。不管指定什么值,该值始终设置为 0。

    优化类型

    优化类型参数设置为空间时间

    • 空间-选择空间优化时,会以最大程度地减小段化的方式分配磁盘块,同时会使磁盘的使用得到优化。

    • 时间-选择时间优化时,将尽可能快速地分配磁盘块,而不太注重其位置。如果存在足够的空闲空间,则分配磁盘块相对容易,而不会导致段化程度过高。缺省值是时间

      可以使用 tunefs 命令为现有文件系统更改优化类型参数的值。

    Inode 数(文件)

    每个 inode 的字节数指定文件系统中的 inode 密度。用文件系统的总大小除以该数,就可以确定要创建的 inode 数。分配 inode 后,不重新创建文件系统,就无法更改该数。

    如果文件系统小于 1 GB,则每 inode 的缺省字节数为 2048 字节 (2 KB)。如果文件系统大于 1 GB,则使用以下公式:

    文件系统大小 

    每 Inode 的字节数 

    小于或等于 1 GB 

    2048 

    小于 2 GB 

    4096 

    小于 3 GB 

    6144 

    3 GB 至 1 TB 

    8192 

    大于 1 TB 或是使用 -T 选项创建的

    1048576 

     

     

    如果使用的文件系统包含许多符号链接,则这些符号链接可以降低平均文件大小。如果文件系统将要包含许多小文件,则可以为此参数指定一个较小的值。但是,请注意具有太多的 inode 比 inode 不足要好得多。如果具有太少的 inode,则可能会在磁盘片还几乎为空时达到最大文件数。

    UFS 文件和文件系统的最大大小

    UFS 文件系统的最大大小约为 16 TB 的可用空间减去约 1% 的开销。稀疏文件可以具有 1 TB 的逻辑大小。但是,由于文件系统开销所致,可以存储在文件中的实际数据量比 1 TB 大约小 1%。

    最大 UFS 子目录数

    UFS 文件系统中每目录的最大子目录数为 32,767。此限制是预定义的,不能进行更改。