忽略 O_NOATIME 安全吗?

忽略 O_NOATIME 安全吗?

我正在设计一个要在 FUSE 中实现的文件系统。我对允许的内容和最佳实践有疑问。有两种情况:

  • open(..., O_NOATIME).无论如何,用户进程都会调用文件系统更新。这安全吗?
  • open(...)没有文件系统的用户进程调用O_NOATIME.忘记更新 atime。这安全吗?

假设只有当其他重要属性也发生改变时,新的 atime 才会写入磁盘。因此,有时可能会进行更新,有时则不会。

文件系统没有用于改变行为的挂载参数。上述行为将是默认和强制性的。

答案1

man 2 open

O_NOATIME (since Linux 2.6.8)
       Do  not update the file last access time (st_atime in the inode)
       when the file is read(2).  This flag  is  intended  for  use  by
       indexing  or  backup  programs,  where its use can significantly
       reduce the amount of disk activity.  This flag may not be effec‐
       tive  on  all filesystems.  One example is NFS, where the server
       maintains the access time.

因此,该标志并不能保证它会被尊重,并且明确指出它仅对减少磁盘活动才真正重要。

听起来,无论如何,对于场景 1 而言,您都可以进行更新。

至于场景 2,您仍然应该没问题。文件系统可以挂载一个noatime标志来阻止更新 atime。因此用户代码不能假设它一定会更新。

相关内容