Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 7 章 文件系统

阅读本章对支持使用红帽企业版 Linux 的文件系统有一个大致了解,并了解如何优化其性能。

7.1. 为文件系统调整注意事项

在所有文件系统有一些通用的注意事项:文件系统中选择的格式化和挂载选项,程序可使用的提高其在所在系统中性能的动作。

7.1.1. 格式化选项

文件系统块大小

可在执行 mkfs 时选择块大小。不同的系统其有效范围各有不同:上限为主机系统的最大页大小,下限取决于所使用的文件系统。默认块大小适用于大多数情况。

如果您希望创建大量小于默认块大小的块,您可以设定较小的块大小以尽量减少磁盘空间浪费。注:但设定较小的块大小可能会限制该文件系统中的最大块,并可以造成额外运行费用,特别是对那些比所选块大小更大的块。
文件系统几何学

如果您的系统使用带状存储,比如 RAID5,您可以通过在执行 mkfs 时将数据和元数据与基础存储几何对其提高其性能。对于软件 RAID(LVM 或者 MD)以及有些企业级存储,可查询并自动设置这些信息,但在很多情况下必须由管理员在命令行中使用 mkfs 手动设定。

有关创建和维护这些文件系统的信息请参考《存储管理指南》
外部日志

需要大量使用元数据的负载意味着日志文件系统(比如 ext4 和 XFS)的 log 部分会非常频繁地更新。要尽量减少文件系统查询日志的时间,您可以将日志放在专用存储中。注:如果将日志放在速度比主文件系统慢外部存储中可抵消所有可能的与使用外部存储有关的优势。

警告

确定您的外部日志是可靠的。丢失任何外部日志文件都可能造成文件系统死机。
外部日志在运行 mkfs 时创建,并要在挂载时指定日志设备。有关详情请参考 mke2fs(8)mkfs.xfs(8)mount(8) man page。

7.1.2. 挂载选项

Barriers

写入 barrier 是保证在永久存储中正确写入并排列文件系统元数据的内核机制,即使在存储设备会经常断电的情况也不例外。启用了写入 barrier 的文件系统还可以保证在断电时保存使用 fsync() 进行的所有数据传输。红帽企业版 Linux 默认在所有支持此功能的硬件上启用 barrier。

但启用写入 barrier 可显著延缓一些程序的速度,特别是使用很多 fsync() 的程序,或者延缓创建和删除大量小文件的速度。对于没有不稳定写入缓存的存储,或者罕见的文件系统不一致的情况以及断电后出现可以承受的数据丢失,可使用 nobarrier 挂载选项禁用 barrier。有关详情请参考《存储管理指南》
访问时间(noatime)

以前在读取文件时,对那个文件的访问时间(atime)必须在内节点元数据中更新,这样就造成额外的 I/O 写入操作。如果不需要准确的 atime 元数据,则请使用 noatime 选项挂载该文件系统以便消除这些元数据更新。但在大多数情况下,鉴于红帽企业版 Linux 6内核的默认相对 atime(或者 relatime)行为,atime 不是一个大的消耗。relatime 行为只在原有 atime 比修改时间(mtime)或者状态更改时间(ctime)旧时更新 atime)。

注意

启用 noatime 选项还可以启用 nodiratime 行为。但不需要同时设置 noatimenodiratime
增加的预读支持

预读可通过预先附加数据并将其载入页面缓存以便提前在内存中而不是磁盘中可用,籍此提高文件访问速度。有些负载,比如那些涉及连续 I/O 大量流操作的负载可得益于高的预读值。

tuned 工具以及使用 LVM 条带功能可提高预读值,但对有些负载还是不够的。另外,红帽企业版 Linux 不总是可以根据它可以探测到的您的文件系统设定恰当的预读值。例如:如果一个强大的存储阵列在红帽企业版 Linux 中只作为单一强大 LUN 出现,则操作系统会将其视为强大的 LUN 阵列,并因此默认不会充分利用该存储可以使用的预读优势。
请使用 blockdev 命令查看并编辑预读值。要查看某个块设备的当前预读值,请运行:
# blockdev -getra device
要修改那个块设备的预读值,请运行以下命令。N 代表 512 字节扇区中的数值。
# blockdev -setra N device
注:使用 blockdev 命令选择的值重启后不会保留。我们建议创建一个运行等级 init.d 脚本在引导时设定这个值。

7.1.3. 文件系统维护

放弃不使用的块

批丢弃和在线丢弃操作是根据文件系统的功能,可丢弃那些文件系统没有使用的块。这些操作在固态硬盘和精简配置存储中很有帮助。

批忽略操作由用户明确使用 fstrim命令运行。这个命令忽略文件系统中所有与该用户标准匹配到未使用块。在还没企业版 Linux 6.2 以及之后 OS 到 XFS 和 ext4 文件系统中支持这两种操作类型,条件是文件系统到基础块设备支持物理忽略操作。只要 /sys/block/device/queue/discard_max_bytes 不为零就支持物理忽略操作。
在线忽略操作是在挂载时使用 -o discard 选项指定(可以是在 /etc/fstab 中或者使用 mount 命令),并实时运行而无需任何用户互动。在线忽略操作只忽略那些从已使用转换到可用状态的块。红帽企业版 Linux 6.2 以及之后到版本中的 ext4 文件系统以及还没企业版 Linux 6.4 以及之后版本中的 XFS 文件系统支持在线忽略操作。
红帽建议使用批忽略操作除非系统负载不可使用此类批忽略,或者需要使用在线忽略操作保持其性能。

7.1.4. 应用程序注意事项

预分配

ext4、XFS 和 GFS2 文件系统支持使用 fallocate(2) glibc 调用有效预分配空间。在由于写入模式造成到大量碎片的文件中可导致读取性能极差。预写入可将磁盘空间标记为已分配给某个文件而无需在那个空间中写入任何数据。最将实际数据写入预写入到块中钱,读取操作将返回 0。