第 7 章 文件系统
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. 挂载选项
写入 barrier 是保证在永久存储中正确写入并排列文件系统元数据的内核机制,即使在存储设备会经常断电的情况也不例外。启用了写入 barrier 的文件系统还可以保证在断电时保存使用 fsync()
进行的所有数据传输。红帽企业版 Linux 默认在所有支持此功能的硬件上启用 barrier。
fsync()
的程序,或者延缓创建和删除大量小文件的速度。对于没有不稳定写入缓存的存储,或者罕见的文件系统不一致的情况以及断电后出现可以承受的数据丢失,可使用 nobarrier
挂载选项禁用 barrier。有关详情请参考《存储管理指南》。
以前在读取文件时,对那个文件的访问时间(atime
)必须在内节点元数据中更新,这样就造成额外的 I/O 写入操作。如果不需要准确的 atime
元数据,则请使用 noatime
选项挂载该文件系统以便消除这些元数据更新。但在大多数情况下,鉴于红帽企业版 Linux 6内核的默认相对 atime(或者 relatime
)行为,atime
不是一个大的消耗。relatime
行为只在原有 atime
比修改时间(mtime
)或者状态更改时间(ctime
)旧时更新 atime
)。
注意
noatime
选项还可以启用 nodiratime
行为。但不需要同时设置 noatime
和 nodiratime
。
预读可通过预先附加数据并将其载入页面缓存以便提前在内存中而不是磁盘中可用,籍此提高文件访问速度。有些负载,比如那些涉及连续 I/O 大量流操作的负载可得益于高的预读值。
blockdev
命令查看并编辑预读值。要查看某个块设备的当前预读值,请运行:
# blockdev -getra device
# 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。