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

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

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

默认挂载选项

atime在默认状态下,尽管我没有使用该选项,但文件系统并未按预期更新noatime

$ 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选项?我该怎么做才能获得正常atime功能?

答案1

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

  • noatime-atime属性(文件和目录的属性)仅在写访问期间更新。
  • nodiratime-atime目录仅在写访问期间更新,可以与 relatime 结合使用。
  • relatime/atime-atime似乎现在是 的别名relatime。此选项仅当前一个早于或,或前一个超过 24 小时时,才会atime更新属性。atimemtimectimeatime
  • strictatime- 它以前被称为atime,因此是默认选项。它会导致atime属性在每次访问文件时更新。(访问文件数据,而不仅仅是元数据/属性)
  • lazytime- Linux 4.10 增加了一个新选项:仅更新文件 inode 内存版本上的时间(atime、mtime、ctime)。磁盘上的数据是延迟更新的(请参阅man 8 mount了解详情)。

自 Linux 内核 2.6.30 起,默认选项为relatime。如果您想要获得原始atime功能,则必须使用strictatime选项。在所呈现的例子中,它将是:

sudo mount -o remount,strictatime /home

来源

相关内容