我正在利用访问时间来分析一些构build过程,但是它并不按我想要的方式工作:访问时间在我第一次读取文件时更新,然后长时间保持不变,或者直到下次重启。 例如:
$ ll -u some_file -rw-r--r-- 1 root root 1.3M 2010-04-07 10:03 some_file $ grep abcdef some_file $ ll -u some_file -rw-r--r-- 1 root root 1.3M 2010-04-07 11:24 some_file # The access time is updated # waiting a few minutes... $ grep abcdef some_file $ ll -u some_file -rw-r--r-- 1 root root 1.3M 2010-04-07 11:24 some_file # The access time has not been updated :(
我想这个文件是由Linux在空闲内存中缓冲的,唯一的这个副本是由于速度原因而被访问的。 解决办法是丢弃内存中的缓冲区。 search一些论坛后,我发现:
sync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches
但它不工作,似乎它只同步写入缓冲区,而不是读取缓冲区。 可能是由于我的发行版(Fedora 9)上的一些自定义的内核configuration?
或者我在这里失去了一些东西? 有没有办法实现这个访问时间刷新?
另外请注意,我不想在我的整个文件树上模拟一些写操作。 因为我正在使用一些基于makefile的构build系统,这将导致整个项目被重新构build。
我正在使用标准的ext3文件系统,没有特殊的选项。
/dev/sda1 on / type ext3 (rw)
我试图用strictatime (不能识别)和atime (没有区别,我想这是默认值)重新安装它。
你正在使用noatime或relatime安装选项? 你可以看看你是否使用mount命令:
[kbrandt@kbrandt-opadmin: ~] mount /dev/sda1 on / type ext3 (rw,relatime,errors=remount-ro)
如果是这样,重新挂载文件系统没有这些选项(或者更好的情况下是编辑选项从/etc/fstab和只是重新启动)。 这些选项是独立于文件系统的。 这些选项的描述在man mount “FILESYSTEM INDEPENDENT MOUNT OPTIONS”下,但基本上它们阻止或限制了更新以提高性能。
我不确定这是否是您的问题的解决scheme,但由于您取决于访问时间,我build议您这样做。
另外,你可能想在这里或在stackoverflow上分析你的特定的构build过程,以确保一个时间是正确的道路。
更新:
stat -c "%x" filename显示相同的东西? (忽略我最近的更新,没有注意到-u选项…),但也许有什么事情与你的别名,所以我会检查与统计确保。
此外,你说/没有noatime,但你是在根系统上做这些testing,而不是另一个文件系统,如nfs挂载或什么?
touch -a -t 199812130530是否设法改变访问时间?
好的,这种行为实际上是由于特定的Fedora 9内核,为了优化原因而禁用标准访问时间更新(为每次读取写入磁盘非常耗时)。
选项DEFAULT_RELATIME (在我的情况下是内核2.6.27.25)已经设置,如果最近一次刷新发生的时间less于一天,就禁止访问时间刷新。
内核编译选项文件给出了内核启动选项norelatime禁用此function…但它不工作!
为了成功修改这个行为,我实际上做了:
echo 60 > /proc/sys/fs/relatime_interval
这将这个间隔减less到1分钟。
感谢您的帮助,使我的解决scheme。