奇妙な接続時間

奇妙な接続時間

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デモ用(遅い出力)

ベストアンサー1

データブロックにアクセスせず(書き込みのみ)、atimeは更新されません。 Random.datを読むと、atimeが更新されます(関連する時間基準が満たされている限り)。

file_accessed()カーネルで呼び出しを見つけると、次のことがわかります。

https://github.com/torvalds/linux/blob/master/fs/ext4/file.c

file_accessedはinodeのatimeを更新するルーチンを呼び出し、読み取り関数(およびmmap)内でのみ呼び出されます。

おすすめ記事