Времето за достъп не се променя след отваряне на файл

Използвам 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]$

Резултатът от командата mount е

[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