我正在利用访问时间来分析一些构建过程,但它并没有按照我想要的方式工作:访问时间在我第一次读取文件时更新,然后它会长时间保持不变,或者直到下次重启。例如:
$ 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在空闲内存中缓冲的,出于速度原因,只有这个副本在随后的时间里被访问。一种解决方案是丢弃内存中的缓冲区。在搜索了一些论坛后,我发现:
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
但它不起作用,它似乎只同步写入缓冲区,而不是读取缓冲区。可能是由于我的发行版(fedora 9)上的一些自定义内核配置?
或者我在这里遗漏了什么?有没有办法实现这种访问时间刷新?
另请注意,我不想在整个文件树上模拟一些写入。因为我正在使用一些基于 makefile 的构建系统,这将导致整个项目再次被构建。
编辑:
我使用的是标准 ext3 文件系统,没有特殊选项。
/dev/sda1 on / type ext3 (rw)
我尝试使用strictatime
(未识别)和atime
(没有区别,我猜这是默认值)重新安装它。