启用noatime可显著提升小文件读取性能,因其跳过每次读取时更新atime的元数据写入操作,将读操作转为纯只读,避免海量小文件场景下(如日志、缓存目录)因频繁atime更新导致的I/O压力陡增,实测ls -l等操作可提速3–5倍。

启用 noatime 能显著降低海量小文件场景下的磁盘 I/O 开销,核心在于避免每次读取都更新访问时间(atime),从而省去大量不必要的元数据写入操作。这对日志目录、缓存目录、Web 临时文件等高频读取但无需 atime 的场景特别有效。
为什么 noatime 对小文件读取提速明显
Linux 默认在每次 open() 或 read() 文件时,将当前时间写入 inode 的 atime 字段——哪怕只是 cat config.json 或 ls -l 查看属性,都会触发一次磁盘写。当一个目录下有数万个小文件,ls -l 就要执行数万次 atime 更新,I/O 延迟和队列压力陡增。而 noatime 直接跳过这步,让所有读操作变成纯只读,不产生写请求。
注意:noatime 不影响 mtime(修改时间)和 ctime(状态变更时间),写入或 chmod 等操作仍正常更新。
正确启用 noatime 的两种方式
-
临时挂载(立即生效,重启失效):
运行sudo mount -o remount,noatime /path/to/mountpoint,例如sudo mount -o remount,noatime /var/log -
永久生效(推荐):
编辑/etc/fstab,在对应挂载项的 options 字段加入noatime,如:/dev/sdb1 /data ext4 defaults,noatime 0 2
保存后执行sudo mount -o remount /data即可应用,下次启动也自动生效。
搭配使用效果更佳的选项
-
加
nodiratime:目录也有 atime,频繁ls或find会反复更新父目录 atime。noatime已隐含该行为,但显式写出更清晰;某些旧内核需单独指定。 -
避免用
relatime替代:虽然它比默认宽松(仅在 atime 早于 mtime/ctime 时才更新),但仍可能触发写入;对小文件密集读场景,noatime是更彻底的选择。 - 禁用 access time 不等于禁用所有时间记录:wtime(写入时间)始终更新,不影响监控或备份逻辑。
验证是否生效及实际收益
运行 mount | grep "noatime",确认目标挂载点已包含 noatime 标志。
对比测试:在一个含 5 万个空文件的目录中执行 time ls -l > /dev/null,开启 noatime 后通常可提速 3–5 倍,iostat -x 1 中的 w/s(每秒写次数)和 await(平均等待)会明显下降。


















