为什么mount的atime选项总是不按预期更新文件的atime?

我需要检测对某些文件的读访问权,因此我需要文件系统以通常的方式更新文件的atime属性。

默认安装选项

在默认状态下,虽然我没有使用noatime选项,但文件系统没有按预期更新atime

 $ cat /etc/fstab | grep '/home ' # /home was on /dev/sda7 during installation UUID=d7e67903-f24d-45a7-be90-6a134c9c1ae9 /home ext4 defaults 0 2 $ mount | grep '/home ' /dev/sda7 on /home type ext4 (rw) $ cat /etc/mtab | grep '/home ' /dev/sda7 /home ext4 rw 0 0 

文件的atime有时仅更新。 后来我意识到文件系统安装了新的relatime选项。

 $ cat /proc/mounts | grep '/home ' /dev/sda7 /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0 

显而易见的解决方案不起作用

所以看起来relatime选项是Ubuntu 12.04的默认选项。 解决方案似乎很简单 – 明确说明非默认atime选项:

 $ sudo mount -o remount,atime /home 

我很惊讶实际的mount选项看起来完全一样,没有atime选项。

 $ mount | grep '/home ' /dev/sda7 on /home type ext4 (rw) $ cat /etc/mtab | grep '/home ' /dev/sda7 /home ext4 rw 0 0 $ cat /proc/mounts | grep '/home ' /dev/sda7 /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0 

实际上, 系统的行为与没有atime选项的行为完全相同

问题

到底是怎么回事? 为什么我不能简单地使用atime选项? 我该怎么做才能获得正常的atimefunction?

事实上,Linux中有四个与 atime相关的mount选项:

  • noatimeatime属性(文件和目录)仅在写访问期间更新。
  • nodiratime – 目录的atime仅在写访问期间更新,可以与relatime结合使用。
  • relatime / atimeatime似乎现在是relatime别名。 此选项仅在前一个atime早于mtimectime或之前的atime超过24小时时才会更新atime属性。
  • strictatime – 以前称为atime ,因此是默认选项。 它会导致atime属性随每次文件访问而更新。 (访问文件数据,而不仅仅是元数据/属性)
  • lazytime – Linux 4.10添加了一个新选项:仅在文件inode的内存版本中更新时间(atime,mtime,ctime)。 磁盘上的数据是懒惰更新的(有关详细信息,请参阅man 8 mount )。

从Linux内核2.6.30开始,默认选项是relatime 。 如果要使用原始atimefunction,则必须使用strictatime选项。 在提出的案例中,它将是:

 sudo mount -o remount,strictatime /home 

来源

  • stat()atime问题解决方案
  • /etc/fstab – 所有文件系统的常用选项
  • 很久以前
Interesting Posts