¿Por qué el gato no cambia el tiempo de acceso?

25

La segunda llamada para capturar un archivo no actualiza el tiempo de acceso. Esperaba que el tiempo de acceso se actualizara cada vez que se muestra el contenido de un archivo.

Veo el mismo comportamiento si abro el archivo en el navegador web. Su tiempo de acceso no se actualiza constantemente.

¿Estoy malinterpretando el tiempo de acceso? ¿Qué es diferente entre las dos llamadas de gato?

$ prueba táctil
prueba de $ stat
  Archivo: `prueba '
  Tamaño: 0 Bloques: 0 Bloque IO: 4096 archivo vacío regular
Dispositivo: 803h / 2051d Código: 152694 Enlaces: 1
Acceso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Acceso: 2012-08-21 11: 05: 40.586020996 +0200
Modificar: 2012-08-21 11: 05: 40.586020996 +0200
Cambio: 2012-08-21 11: 05: 40.586020996 +0200
 Nacimiento:

prueba de $ vim
prueba de $ stat
  Archivo: `prueba '
  Tamaño: 5 bloques: 8 bloques IO: 4096 archivo regular
Dispositivo: 803h / 2051d Código: 152694 Enlaces: 1
Acceso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Acceso: 2012-08-21 11: 05: 52.890021630 +0200
Modificar: 2012-08-21 11: 06: 31.606023626 +0200
Cambio: 2012-08-21 11: 06: 31.638023629 +0200
 Nacimiento:

$ prueba de gato
prueba

prueba de $ stat
  Archivo: `prueba '
  Tamaño: 5 bloques: 8 bloques IO: 4096 archivo regular
Dispositivo: 803h / 2051d Código: 152694 Enlaces: 1
Acceso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Acceso: 2012-08-21 11: 06: 44.662024298 +0200
Modificar: 2012-08-21 11: 06: 31.606023626 +0200
Cambio: 2012-08-21 11: 06: 31.638023629 +0200
 Nacimiento:

$ prueba de gato
prueba

prueba de $ stat
  Archivo: `prueba '
  Tamaño: 5 bloques: 8 bloques IO: 4096 archivo regular
Dispositivo: 803h / 2051d Código: 152694 Enlaces: 1
Acceso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Acceso: 2012-08-21 11: 06: 44.662024298 +0200
Modificar: 2012-08-21 11: 06: 31.606023626 +0200
Cambio: 2012-08-21 11: 06: 31.638023629 +0200
 Nacimiento:
nelaaro
fuente

Respuestas:

44

http://en.wikipedia.org/wiki/Stat_(system_call)

Crítica de atime

Escribir en un archivo cambia su mtime y ctime, mientras que leer un archivo cambia su tiempo. Como resultado, en un sistema compatible con POSIX, leer un archivo provoca una escritura, que ha sido criticada. Este comportamiento generalmente se puede deshabilitar agregando una opción de montaje en / etc / fstab.

Sin embargo, la desactivación de la actualización atime rompe el cumplimiento de POSIX, y algunas aplicaciones, especialmente el lector de correo mutt (en algunas configuraciones), y algunas utilidades de observación de uso de archivos, especialmente tmpwatch. En el peor de los casos, no actualizar atime puede hacer que algunos programas de copia de seguridad no puedan hacer una copia de seguridad de un archivo.

El desarrollador del kernel de Linux, Ingo Molnár, llamó a atime "quizás la idea de diseño de Unix más estúpida de todos los tiempos", y agregó: "Piense un poco en esto: 'Por cada archivo que se lee del disco, hagamos un ... escriba al disco! Y, por cada archivo que ya está en caché y que leemos del caché ... ¡escriba en el disco! '".

Las actualizaciones de Atime son, con mucho, la mayor deficiencia de rendimiento de IO que Linux tiene hoy. Deshacerse de las actualizaciones de Atime nos daría más rendimiento diario de Linux que todas las aceleraciones de caché de página de los últimos 10 años, combinadas .

¿Cómo saber si noatime o relatime es la opción de montaje predeterminada en el kernel?

man mount
....
   relatime
          Update inode access times relative to  modify  or  change  time.
          Access time is only updated if the previous access time was ear
          lier than the current modify or change time. (Similar  to  noat
          ime,  but  doesn't break mutt or other applications that need to
          know if a file has been read since the last time  it  was  modi‐
          fied.)

          Since Linux 2.6.30, the kernel defaults to the behavior provided
          by this option (unless noatime was  specified), and the stricta‐
          time  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.
....

Así es como se montó esa partición en particular y por qué cat no actualiza el tiempo de acceso como esperaba.

nelaaro
fuente
Más información sobre cómo maneja ubuntu atime askubuntu.com/questions/2099/…
nelaaro
Aquí hay una discusión anterior sobre cómo el tiempo se ve afectado por las diferentes opciones de montaje. linux.koolsolutions.com/2009/01/30/…
nelaaro