centos 7 默认启用 relatime 而非禁用 atime,relatime 仅在 atime 早于 mtime/ctime 或超 24 小时未更新时才刷新 atime,兼顾性能与兼容性;noatime 才彻底禁用,需通过 /etc/fstab 或 mount -o remount 配置。

CentOS 7 默认禁用 atime 更新,但不是靠 touch 控制
系统级的文件访问时间(atime)更新行为由挂载选项决定,touch 命令只能修改单个文件的时间戳,无法改变内核对整个文件系统的 atime 更新策略。真正起作用的是 /etc/fstab 中的挂载参数。
常见错误是以为改了 touch -a 或调了 sysctl 就能全局开关 atime,其实完全不相关——touch 只是“写入”,而 atime 是否自动更新,取决于 mount 时是否带 noatime、relatime 或默认的 strictatime。
-
noatime:彻底禁用 atime 更新(推荐用于性能敏感场景,如数据库、Web 服务) -
relatime(CentOS 7 默认):仅当 atime 早于 mtime/ctime 时才更新,兼顾兼容性与性能 -
strictatime:每次 read 都强制更新 atime(极少用,开销大)
查看当前根文件系统挂载参数:
mount | grep " / "
输出中若含 relatime,说明已是 CentOS 7 默认行为;若含 noatime,则 atime 不会自动更新,此时即使执行 cat file,stat file 显示的 atime 也不会变。
如何临时切换 atime 行为(无需重启)
用 mount -o remount 可在线调整,但仅对当前会话有效,重启后恢复 /etc/fstab 设置。
- 临时启用 strictatime(慎用):
sudo mount -o remount,strictatime / - 临时启用 relatime(安全回退):
sudo mount -o remount,relatime / - 临时禁用 atime:
sudo mount -o remount,noatime /
执行后立即生效,可验证:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
stat /etc/passwd | grep Access
再 cat /etc/passwd,对比前后 Access 时间是否变化。
永久修改需编辑 /etc/fstab
直接改 /etc/fstab 中对应分区的挂载选项字段(第4列),例如:
/dev/vda1 / ext4 defaults,noatime 1 1
注意:defaults 已隐含 relatime,加 noatime 会覆盖它;若写成 defaults,relatime 则冗余,但无害。
- 修改前务必备份:
sudo cp /etc/fstab /etc/fstab.bak - 改完运行
sudo mount -a测试语法是否正确(无输出即成功) - 不要在 root 分区 remount 失败时强行 reboot,可能进不了系统
为什么 touch -a 看似“失效”?
当文件系统挂载为 noatime 时,touch -a file 仍能成功——因为这是显式写入,绕过了内核的自动 atime 更新逻辑。但普通读操作(cat、less)不会触发 atime 变更。
- 验证方式:
touch -a file && stat file—— Access 时间一定变 - 而
cat file && stat file—— Access 时间不变(noatime 下) - 这点容易混淆:不是
touch失效,是“自动更新”被挂载选项关掉了
真正要调的不是 touch 参数,而是挂载选项;touch 只负责手动干预,不参与策略控制。










