CentOS 7.9 的 /data 想减少元数据写入,手工执行 mount -o remount,noatime /data 没有任何报错,findmnt -no OPTIONS /data 里仍然只有 rw,relatime。

一开始怀疑是「remount 只对当前挂载点有效,子目录是单独挂上去的没受影响」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。后挂载的选项里显式写了 relatime,它排在 noatime 后面把前面覆盖掉了。少数情况下是fstab 里用的是 defaults,defaults 自带 relatime,重启后恢复原样。

少数情况下是systemd 的 mount unit 在开机时按 fstab 重新生成了挂载参数。

第一件事是看当前生效的挂载选项

findmnt -no TARGET,OPTIONS /data

再往下用 remount 把 relatime 明确去掉

mount -o remount,noatime,nodiratime /data

接着改 fstab 时把 relatime 一起清掉

sed -i 's#defaults,relatime#defaults,noatime#' /etc/fstab

末了让 systemd 重新加载挂载单元

systemctl daemon-reload && findmnt -no OPTIONS /data

中途换过一次思路,把范围缩到最小的那一层,反而快了。

改完先别撤,确认这几项。findmnt 里 /data 的选项只带 noatime 和 nodiratime,stat 一个文件后 atime 不再变化,df 正常。

提醒一点。选项是按顺序覆盖的,后写的赢;改 fstab 之后一定要 daemon-reload,否则下次开机会用旧的 unit 把参数盖回去。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189