为什么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
选项? 我该怎么做才能获得正常的atime
function?
事实上,Linux中有四个与 atime
相关的mount
选项:
-
noatime
–atime
属性(文件和目录)仅在写访问期间更新。 -
nodiratime
– 目录的atime
仅在写访问期间更新,可以与relatime结合使用。 -
relatime
/atime
–atime
似乎现在是relatime
别名。 此选项仅在前一个atime
早于mtime
或ctime
或之前的atime
超过24小时时才会更新atime
属性。 -
strictatime
– 以前称为atime
,因此是默认选项。 它会导致atime
属性随每次文件访问而更新。 (访问文件数据,而不仅仅是元数据/属性) -
lazytime
– Linux 4.10添加了一个新选项:仅在文件inode的内存版本中更新时间(atime,mtime,ctime)。 磁盘上的数据是懒惰更新的(有关详细信息,请参阅man 8 mount
)。
从Linux内核2.6.30开始,默认选项是relatime
。 如果要使用原始atime
function,则必须使用strictatime
选项。 在提出的案例中,它将是:
sudo mount -o remount,strictatime /home
来源
-
stat()
–atime
问题解决方案 -
/etc/fstab
– 所有文件系统的常用选项 - 很久以前