Ext4 文件系统性能优化教程

Ext4 是 Linux 系统上最成熟稳定的文件系统,搬瓦工 VPS 默认安装的 Ubuntu 和 Debian 均采用 Ext4。虽然 Ext4 开箱即用的性能已经不错,但通过合理调整挂载参数、日志模式和预留空间,还可以进一步提升读写性能。本文将详细介绍各项优化方法。

一、查看当前文件系统信息

# 查看文件系统类型和挂载选项
mount | grep ext4

# 查看文件系统详细信息
tune2fs -l /dev/vda1

# 查看磁盘空间使用情况
df -Th

# 查看 inode 使用情况
df -i

二、挂载选项优化

Ext4 的挂载选项对性能有直接影响。编辑 /etc/fstab 可以永久生效:

2.1 noatime 与 relatime

# 查看当前挂载选项
mount | grep "on / "

# 编辑 fstab 添加 noatime 选项
# 找到根分区行,将 defaults 改为 defaults,noatime
nano /etc/fstab

# 示例修改后的行:
# UUID=xxxx / ext4 defaults,noatime 0 1

# 不重启生效(重新挂载根分区)
mount -o remount,noatime /

noatime 禁止更新文件访问时间戳,对于 Web 服务器和数据库可以减少大量不必要的写操作。如果某些应用依赖访问时间,可以使用 relatime,它只在访问时间早于修改时间时才更新。

2.2 其他关键挂载选项

# 推荐的高性能挂载选项
# noatime      - 不更新访问时间
# nodiratime   - 不更新目录访问时间
# commit=60    - 日志提交间隔设为 60 秒(默认 5 秒)
# barrier=0    - 关闭写屏障(有数据丢失风险,适合有 UPS 的环境)
# data=writeback - 元数据日志模式(见下节)

# fstab 示例
# UUID=xxxx / ext4 defaults,noatime,nodiratime,commit=60 0 1

2.3 discard(TRIM 支持)

# 检查磁盘是否支持 TRIM
lsblk --discard

# 如果 DISC-GRAN 和 DISC-MAX 非零,说明支持 TRIM
# 推荐使用定时 TRIM 而不是持续 TRIM
# 启用定时 TRIM 服务
systemctl enable fstrim.timer
systemctl start fstrim.timer

# 手动执行 TRIM
fstrim -v /

建议不要在 fstab 中使用 discard 挂载选项(持续 TRIM),而是使用 fstrim.timer 定时执行,这样对性能影响更小。

三、日志模式选择

Ext4 支持三种日志模式,对性能和数据安全性的影响不同:

  • journal:数据和元数据都写入日志,最安全但性能最低。
  • ordered(默认):只有元数据写入日志,数据在元数据之前刷入磁盘。
  • writeback:只有元数据写入日志,数据不保证顺序,性能最高但崩溃时可能出现旧数据。
# 查看当前日志模式
cat /proc/mounts | grep "on / "

# 切换到 writeback 模式(需要重新挂载)
mount -o remount,data=writeback /

# 永久设置(编辑 fstab)
# UUID=xxxx / ext4 defaults,noatime,data=writeback 0 1

对于搬瓦工 VPS,如果运行的应用有自己的数据保护机制(如数据库的 WAL 日志),可以考虑使用 writeback 模式提升性能。

四、tune2fs 参数调整

4.1 减少预留空间

# 查看当前预留空间比例(默认 5%)
tune2fs -l /dev/vda1 | grep "Reserved block count"

# 将预留空间从 5% 降至 1%(非系统分区可以设为 0)
tune2fs -m 1 /dev/vda1

# 查看修改后的结果
tune2fs -l /dev/vda1 | grep -i reserved

Ext4 默认预留 5% 的空间给 root 用户,对于搬瓦工小容量方案来说这个比例过高。将其降低到 1% 可以释放可观的磁盘空间。

4.2 调整日志大小

# 查看当前日志大小
tune2fs -l /dev/vda1 | grep "Journal size"

# 日志大小在创建文件系统时确定,之后需要重新创建
# 通常默认大小即可满足需求

4.3 启用 dir_index 和 extent

# 查看已启用的特性
tune2fs -l /dev/vda1 | grep "Filesystem features"

# dir_index 和 extent 通常默认已启用
# 如果没有启用 dir_index
tune2fs -O dir_index /dev/vda1
e2fsck -D /dev/vda1

五、磁盘写入策略优化

# 查看当前磁盘写缓存状态
hdparm -W /dev/vda

# 启用磁盘写缓存(提升性能,但断电可能丢数据)
hdparm -W1 /dev/vda

# 调整内核脏页参数(配合文件系统优化)
sysctl -w vm.dirty_ratio=40
sysctl -w vm.dirty_background_ratio=10
sysctl -w vm.dirty_expire_centisecs=3000

更多内核参数调优请参考 Linux 内核调优完整参数指南

六、碎片整理

# 查看文件碎片情况
e4defrag -c /

# 对指定目录执行碎片整理
e4defrag /var/lib/mysql/

# 对整个文件系统执行碎片整理(耗时较长)
e4defrag /

Ext4 的延迟分配机制大大减少了碎片产生,SSD 上碎片对性能的影响也很小。通常不需要频繁执行碎片整理。

七、监控与维护

# 查看文件系统健康状态
tune2fs -l /dev/vda1 | grep -E "Mount count|Maximum mount|Check interval"

# 查看磁盘 I/O 统计
iostat -x 1 5

# 监控实时 I/O 活动
iotop -oP

# 查看文件系统错误日志
dmesg | grep -i ext4

# 定期检查文件系统(需要卸载或只读挂载)
# 注意:根分区只能在启动时检查
e2fsck -f /dev/vda1

八、完整优化方案

以下是适合搬瓦工 VPS 的 Ext4 综合优化方案:

# 1. 减少预留空间到 1%
tune2fs -m 1 /dev/vda1

# 2. 编辑 fstab 优化挂载选项
cp /etc/fstab /etc/fstab.bak
sed -i 's/defaults/defaults,noatime,nodiratime/' /etc/fstab

# 3. 立即生效
mount -o remount /

# 4. 启用定时 TRIM
systemctl enable fstrim.timer --now

# 5. 配合内核参数优化
cat >> /etc/sysctl.d/99-fs-tuning.conf <<EOF
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.vfs_cache_pressure = 50
EOF
sysctl -p /etc/sysctl.d/99-fs-tuning.conf

# 6. 验证优化结果
mount | grep "on / "
cat /proc/sys/vm/dirty_ratio

总结

Ext4 文件系统优化的核心是减少不必要的写操作和合理配置日志模式。noatime 挂载选项和减少预留空间是最简单有效的优化措施。如果需要更高级的文件系统特性,可以参考 Btrfs 使用指南ZFS 安装配置教程。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。