Почему опция монтирования atime не всегда обновляет atime файлов должным образом?

Мне нужно было определить доступ для чтения к определенным файлам, поэтому мне нужна была файловая система для обновления atime Атрибут файлов обычным способом.

Параметры монтирования по умолчанию

В состоянии по умолчанию файловая система не обновлялась atime как и ожидалось, хотя я не использовал noatime опция:

$ cat /etc/fstab | grep '/home '
# /home was on /dev/sda7 during installation
UUID=d7e67903-f24d-45a7-be90-6a134c9c1ae9 /home         ext4    defaults      0     2

$ mount | grep '/home '
/dev/sda7 on /home type ext4 (rw)

$ cat /etc/mtab | grep '/home '
/dev/sda7 /home ext4 rw 0 0

atime на файл обновлялся только иногда. Позже я понял, что файловая система смонтирована с новым relatime вариант.

$ cat /proc/mounts | grep '/home '
/dev/sda7 /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0

Очевидное решение не работает

Так что кажется, что relatime опция по умолчанию в Ubuntu 12.04. Решение, казалось, было простым - явно заявить, что не по умолчанию atime опция:

$ sudo mount -o remount,atime /home

Я был удивлен, что фактическое mount варианты выглядели точно так же, как без atime вариант.

$ mount | grep '/home '
/dev/sda7 on /home type ext4 (rw)

$ cat /etc/mtab | grep '/home '
/dev/sda7 /home ext4 rw 0 0

$ cat /proc/mounts | grep '/home '
/dev/sda7 /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0

На самом деле система вела себя точно так же, как без atime вариант.

Вопросы

Что здесь происходит? Почему я не могу просто использовать atime вариант? Что я могу сделать, чтобы получить нормальный atime функциональность?

1 ответ

Решение

На самом деле есть четыре пять atime связанные варианты mount в Linux:

  • noatime - atime Атрибут (как файлов, так и каталогов) обновляется только во время доступа для записи.
  • nodiratime - atime из каталогов обновляется только во время доступа записи, может быть объединен с релеем времени.
  • relatime / atime - atime кажется теперь псевдоним relatime, Эта опция вызывает atime атрибут для обновления, только если предыдущий atime старше чем mtime или же ctime или предыдущий atime старше 24 часов.
  • strictatime - Это раньше называлось atime и как таковой был вариант по умолчанию. Это вызывает atime атрибут для обновления при каждом доступе к файлу. (доступ к данным файла, а не только к метаданным / атрибутам)
  • lazytime- В Linux 4.10 добавлена ​​новая опция: только время обновления (atime, mtime, ctime) для версии inode в оперативной памяти. Данные на диске обновляются лениво (см. man 8 mount для деталей).

Начиная с ядра Linux 2.6.30, по умолчанию relatime, Если вы хотите иметь оригинал atime функциональность вы должны использовать strictatime вариант. В представленном случае это будет:

sudo mount -o remount,strictatime /home

источники

Другие вопросы по тегам