Linux下刷新文件訪問時間/丟棄磁碟讀記憶體
我正在利用訪問時間來分析一些建構過程,但它並沒有按照我想要的方式工作:訪問時間在我第一次讀取文件時更新,然後它會長時間保持不變,或者直到下次重啟。例如:
$ 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
(沒有區別,我猜這是預設值)重新安裝它。
好的,這種行為實際上是由於特定的 Fedora 9 核心出於優化原因禁用了標準訪問時間更新(每次讀取寫入磁碟非常耗時)。
設置了該選項
DEFAULT_RELATIME
(在我的情況下為核心 2.6.27.25),如果最後一次刷新發生在不到一天前,則禁用訪問時間刷新。核心編譯選項文件提供了
norelatime
禁用此功能的核心引導選項……但它不起作用!為了成功修改這種行為,我實際上做了:
echo 60 > /proc/sys/fs/relatime_interval
這將這個間隔減少到 1 分鐘。
感謝您幫助我找到這個解決方案。
您使用的是 noatime 還是 relatime 掛載選項?您可以查看您是否使用以下
mount
命令:[kbrandt@kbrandt-opadmin: ~] mount /dev/sda1 on / type ext3 (rw,relatime,errors=remount-ro)
如果是這樣,請在沒有這些選項的情況下重新安裝文件系統(或者在這種情況下可能更好的是編輯選項
/etc/fstab
並重新啟動)。這些選項與文件系統無關。這些選項的描述在“FILESYSTEM INDEPENDENT MOUNT OPTIONS”中man mount
,但基本上它們阻止或限制atime被更新以提高性能。我不確定這是否是您問題的解決方案,但由於您取決於訪問時間,我建議您無論如何都這樣做。
順便說一句,您可能想在此處或在 stackoverflow 上詢問有關分析您的特定建構過程的問題,以確保 atime 是正確的選擇。
更新:
是否
stat -c "%x" filename
顯示相同的內容?(忽略我上次的更新,沒有註意到該-u
選項…),但也許您的ll
別名有問題,所以我會檢查 stat 以確保。另外,您說 / 沒有 noatime,但是您是在根系統上而不是在另一個文件系統上進行這些測試,例如 nfs 掛載或其他什麼?
是否
touch -a -t 199812130530
設法更改訪問時間?