Время доступа не меняется после открытия файла

Я использую stat, чтобы получить время доступа к файлу (текущая дата - 23 октября 2013 г.)

[juan@JN-LNXSVR-02 labfiles]$ stat nursery
  File: `nursery'
  Size: 837         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 139539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/    juan)   Gid: (  500/    juan)
Access: 2013-10-22 18:03:20.703888346 -0400
Modify: 2013-10-21 16:57:07.801165793 -0400

затем я редактирую файл и закрываю его без каких-либо изменений и снова отправляю статистику

juan@JN-LNXSVR-02 labfiles]$ vi nursery
[juan@JN-LNXSVR-02 labfiles]$ stat nursery
  File: `nursery'
  Size: 837         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 139539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/    juan)   Gid: (  500/    juan)
Access: 2013-10-22 18:03:20.703888346 -0400
Modify: 2013-10-21 16:57:07.801165793 -0400
Change: 2013-10-21 16:57:07.801165793 -0400

но время доступа не изменилось, почему?

Я не смог найти ни одного атрибута noatime

juan@JN-LNXSVR-02 labfiles]$ grep noatime /proc/mounts
[juan@JN-LNXSVR-02 labfiles]$

Вывод команды монтирования:

[juan@JN-LNXSVR-02 labfiles]$ mount

/dev/mapper/vg_jnlnxsvr02-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw) 

devpts on /dev/pts type devpts (rw,gid=5,mode=620) 

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")


/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

[juan@JN-LNXSVR-02 labfiles]$ 

person JC Nunez    schedule 23.10.2013    source источник


Ответы (1)


Не могли бы вы включить вывод mount? Может ваш диск смонтирован с noatime?

ИЗМЕНИТЬ (снова): relatime будет обновлять его только один раз при чтении после модификации, но не каждый раз. Начиная с Linux 2.6.30 это кажется стандартным вариантом, поэтому, если вы сделаете write + read, он будет обновляться при чтении. Но write + read + read будет обновлять его только при первом чтении (и один раз после каждой последующей модификации).

Учитывая, что ваше время доступа уже новее, чем время модификации, время доступа не будет обновляться при монтировании с relatime (или без опции atime), если вы только читаете.

с man mount:

noatime
 Do not update inode access times on this filesystem (e.g., for faster access on
 the news spool to speed up news servers).

relatime
 Update  inode  access  times relative to modify or change time.  Access time is
 only updated if the previous access time was earlier than the current modify or
 change  time. (Similar to noatime, but doesn't break mutt or other applications
 that need to know if a file has been read since the last time it was modified.)
 Since Linux 2.6.30, the kernel defaults to the behavior provided by this option
 (unless  noatime  was   specified),  and  the strictatime option is required to
 obtain traditional semantics. In addition, since Linux 2.6.30, the file's  last
 access time is always  updated  if  it  is more than 1 day old.

И для записи: если вы хотите вернуть прежнее поведение, используйте strictatime.

Allows to explicitly requesting full atime updates. This makes it possible for
kernel to defaults to relatime or noatime but still allow userspace to override
it. For more details about the default system mount options see /proc/mounts.
person Johannes Weiss    schedule 23.10.2013
comment
juan @ JN-LNXSVR-02 labfiles] $ grep noatime / proc / mounts [juan @ JN-LNXSVR-02 labfiles] $ Этого достаточно? - person JC Nunez; 24.10.2013
comment
Не совсем, потому что reatime (и без флагов) будет вести себя так же - person Johannes Weiss; 24.10.2013
comment
Ладно, я понял. Монтирование показывает, что опция relatime включена. Так что в этом случае время доступа может быть бесполезной статистикой, начиная с Linux 2.6.30, верно? - person JC Nunez; 24.10.2013
comment
Не бесполезно, но он обновляется только при записи и ОДИН РАЗ при первом чтении после последней записи. В следующий раз, когда он будет обновлен, будет следующая запись. Если вам действительно нужно каждое обновление, вы должны монтировать strictatime начиная с Linux 2.6.30. - person Johannes Weiss; 24.10.2013
comment
Спасибо большое за вашу помощь - person JC Nunez; 24.10.2013
comment
Значит, нет возможности узнать, когда в последний раз к файлу действительно обращались (открывали для чтения / записи)? - person android developer; 03.09.2014
comment
Опять же, только если вы смонтируете с опцией strictatime. - person Johannes Weiss; 03.09.2014