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 访问官网。