Почему кошка не меняет время доступа?

25

Второй вызов cat файла не обновляет время доступа. Я ожидал, что время доступа будет обновляться каждый раз, когда отображается содержимое файла.

Я вижу такое же поведение, если я открываю файл в веб-браузере. Время доступа не обновляется постоянно.

Я неправильно понимаю время доступа? Чем отличаются две кошачьи звонки?

сенсорный тест
$ stat test
  Файл: `test '
  Размер: 0 Блоки: 0 Блок ввода-вывода: 4096 обычный пустой файл
Прибор: 803h / 2051d Inode: 152694 Ссылки: 1
Доступ: (0664 / -rw-rw-r--) Uid: (1001 / Аарон) Гид: (1001 / Аарон)
Доступ: 2012-08-21 11: 05: 40.586020996 +0200
Изменить: 2012-08-21 11: 05: 40.586020996 +0200
Изменение: 2012-08-21 11: 05: 40.586020996 +0200
 Рождение: -

$ vim test
$ stat test
  Файл: `test '
  Размер: 5 блоков: 8 блоков ввода-вывода: 4096 обычный файл
Прибор: 803h / 2051d Inode: 152694 Ссылки: 1
Доступ: (0664 / -rw-rw-r--) Uid: (1001 / Аарон) Гид: (1001 / Аарон)
Доступ: 2012-08-21 11: 05: 52.890021630 +0200
Изменить: 2012-08-21 11: 06: 31.606023626 +0200
Изменение: 2012-08-21 11: 06: 31.638023629 +0200
 Рождение: -

кошачий тест
тест

$ stat test
  Файл: `test '
  Размер: 5 блоков: 8 блоков ввода-вывода: 4096 обычный файл
Прибор: 803h / 2051d Inode: 152694 Ссылки: 1
Доступ: (0664 / -rw-rw-r--) Uid: (1001 / Аарон) Гид: (1001 / Аарон)
Доступ: 2012-08-21 11: 06: 44.662024298 +0200
Изменить: 2012-08-21 11: 06: 31.606023626 +0200
Изменение: 2012-08-21 11: 06: 31.638023629 +0200
 Рождение: -

кошачий тест
тест

$ stat test
  Файл: `test '
  Размер: 5 блоков: 8 блоков ввода-вывода: 4096 обычный файл
Прибор: 803h / 2051d Inode: 152694 Ссылки: 1
Доступ: (0664 / -rw-rw-r--) Uid: (1001 / Аарон) Гид: (1001 / Аарон)
Доступ: 2012-08-21 11: 06: 44.662024298 +0200
Изменить: 2012-08-21 11: 06: 31.606023626 +0200
Изменение: 2012-08-21 11: 06: 31.638023629 +0200
 Рождение: -
nelaaro
источник

Ответы:

44

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

Критика времени

Запись в файл изменяет его mtime и ctime, в то время как чтение файла меняет его atime. В результате в POSIX-совместимой системе чтение файла вызывает запись, которая подверглась критике. Такое поведение обычно можно отключить, добавив параметр монтирования в / etc / fstab.

Однако отключение обновления времени нарушает соответствие POSIX и некоторым приложениям, в частности, программе чтения почты Mutt (в некоторых конфигурациях), и некоторым утилитам наблюдения за использованием файлов, в частности, tmpwatch. В худшем случае отсутствие обновления atime может привести к тому, что некоторые программы резервного копирования не смогут выполнить резервное копирование файла.

Разработчик ядра Linux Инго Молнар (Ingo Molnár) назвал atime «пожалуй, самой глупой идеей дизайна Unix за все время», добавив: «[T] поразмыслите над этим:« Для каждого файла, который читается с диска, давайте сделаем ... запись на диск! И для каждого файла, который уже кэширован и который мы читаем из кэша ... сделайте запись на диск! »« Далее он подчеркнул влияние на производительность таким образом:

Atime-обновления - это самый большой дефицит производительности ввода-вывода, который есть у Linux на сегодняшний день. Избавление от временных обновлений даст нам больше повседневной производительности Linux, чем все ускорения кэша страниц за последние 10 лет, вместе взятые .

Как узнать, является ли noatime или relaytime опцией монтирования по умолчанию в ядре?

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.
....

Именно так был смонтирован этот конкретный раздел и почему cat не обновляет время доступа, как я ожидал.

nelaaro
источник
Больше информации о том, как Ubuntu обрабатывает время. Askubuntu.com/questions/2099/…
nelaaro
Вот более старая дискуссия о том, как на atime влияют различные параметры монтирования. linux.koolsolutions.com/2009/01/30/…
nelaaro