系统管理指南:设备和文件系统

第 23 章 UFS 文件系统(参考)

以下是本章中参考信息的列表。

UFS 文件系统的柱面组结构

创建 UFS 文件系统时,磁盘片被分成若干个柱面组。柱面组由一个或多个连续的磁盘柱面组成。柱面组又进一步分成若干个可寻址的块,以控制和组织柱面组中文件的结构。在文件系统中,每种类型的块都具有特定的功能。UFS 文件系统具有以下四种类型的块。

块类型  

所存储信息的类型 

引导块 

在引导系统时使用的信息 

超级块 

有关文件系统的详细信息 

Inode 

有关文件的所有信息 

存储块或数据块 

每个文件的数据 

以下各节提供有关这些块的组织和功能的其他信息。

引导块

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

超级块

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

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

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

Inode

inode 包含有关文件的所有信息,但文件的名称(保存在目录中)除外。一个 inode 为 128 字节。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 命令指定的缺省文件系统参数之前,需要了解这些参数。本节介绍这些参数:

有关自定义这些参数的命令选项的说明,请参见 newfs(1M)mkfs_ufs(1M)

逻辑块大小

逻辑块大小是 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(1M)

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。此限制是预定义的,不能进行更改。