Filesystems

訪問時間異常

  • September 26, 2022

根據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)中呼叫。

引用自:https://unix.stackexchange.com/questions/718776