Filesystems
訪問時間異常
根據
mount
手冊頁,僅當先前的訪問時間早於目前的修改或更改時間時,才更新訪問時間。
但是,如果我這樣做(帶有
relatime
選項(*)的 ext4):> date +%T.%N ; dd if=/dev/random of=random.dat bs=1 count=4096 ; date +%T.%N ; stat random.dat 18:52:00.616084761 4096+0 records in 4096+0 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.0319383 s, 128 kB/s 18:52:00.651183318 File: random.dat Size: 4096 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 28313073 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ me) Gid: ( 1000/ me) Access: 2022-09-26 18:52:00.616297607 +0200 Modify: 2022-09-26 18:52:00.648297639 +0200 Change: 2022-09-26 18:52:00.648297639 +0200 Birth: -
訪問時間似乎停留在創建時間上,如果我重新執行它(所以現在
random.dat
存在,並且它與更新的 inode 相同)我得到:> date +%T.%N ; dd if=/dev/random of=random.dat bs=1 count=4096 ; date +%T.%N ; stat random.dat 18:52:43.014712313 4096+0 records in 4096+0 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.0633748 s, 64.6 kB/s 18:52:43.081174320 File: random.dat Size: 4096 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 28313073 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ me) Gid: ( 1000/ me) Access: 2022-09-26 18:52:00.616297607 +0200 Modify: 2022-09-26 18:52:43.076338407 +0200 Change: 2022-09-26 18:52:43.076338407 +0200 Birth: -
…儘管完全重寫了文件內容,但訪問時間根本沒有改變。
我錯過了什麼/誤解了什麼?訪問時間不應該與修改和更改一起更新嗎?
(*)
/dev/mapper/vgkubuntu-root on / type ext4 (rw,relatime,errors=remount-ro)
(**)
dd if=/dev/random
用於展示目的(緩慢輸出)
由於您沒有訪問數據塊(僅寫入它們),因此 atime 不會更新。如果您閱讀 random.dat 則 atime 將得到更新(只要滿足 relatime 標準)。
file_accessed()
你可以看到這個在核心中尋找呼叫:https://github.com/torvalds/linux/blob/master/fs/ext4/file.c
file_accessed 將調案常式來更新 inode 中的 atime,並且僅在讀取函式(和 mmap)中呼叫。