我需要检测对某些文件的读访问,所以我需要文件系统以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
Run Code Online (Sandbox Code Playgroud)
在atime
上一个文件只是偶尔更新。后来我意识到文件系统是用新relatime
选项挂载的。
$ cat /proc/mounts | grep '/home '
/dev/sda7 /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
因此,该relatime
选项似乎是 Ubuntu 12.04 上的默认选项。解决方案似乎很简单 - 明确说明非默认atime
选项:
$ sudo mount -o remount,atime /home
Run Code Online (Sandbox Code Playgroud)
我很惊讶实际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
Run Code Online (Sandbox Code Playgroud)
事实上,系统的行为与没有atime
选项时完全相同。
到底是怎么回事?为什么我不能简单地使用该atime
选项?我该怎么做才能获得正常的atime
功能?
事实上,Linux 中有四个与五个atime
相关的选项mount
:
noatime
-atime
属性(文件和目录的)仅在写访问期间更新。nodiratime
- atime
of 目录仅在写访问期间更新,可以与 relatime 结合使用。relatime
/ atime
-atime
现在似乎是relatime
. atime
仅当上一个atime
早于mtime
或ctime
,或者上一个atime
超过 24 小时时,此选项才会使属性更新。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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2836 次 |
最近记录: |