web-dev-qa-db-fra.com

Pourquoi l'option atime de mount ne met-elle pas toujours à jour atime des fichiers comme prévu?

J'avais besoin de détecter les accès en lecture sur certains fichiers et j'avais donc besoin du système de fichiers pour mettre à jour l'attribut atime des fichiers de la manière habituelle.

Options de montage par défaut

Dans l'état par défaut, le système de fichiers n'a pas mis à jour atime comme prévu, même si je n'ai pas utilisé l'option 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

Le atime sur un fichier a été mis à jour seulement parfois. Plus tard, j'ai réalisé que le système de fichiers est monté avec la nouvelle option relatime .

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

La solution évidente ne fonctionne pas

Il semble donc que l'option relatime soit la valeur par défaut sous Ubuntu 12.04. La solution semblait simple: indiquez explicitement l'option atime non définie par défaut:

$ Sudo mount -o remount,atime /home

J'ai été surpris que les options réelles mount aient exactement la même apparence sans l'option 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

En fait, le système se comportait exactement de la même manière que sans l'option atime.

Des questions

Que se passe-t-il? Pourquoi ne puis-je pas simplement utiliser l'option atime? Que puis-je faire pour obtenir la fonctionnalité normale atime?

5
pabouk

En fait il y a quatre Cinq options atime- associées à mount sous Linux:

  • noatime - L'attribut atime (des fichiers et des répertoires) est mis à jour uniquement pendant l'accès en écriture.
  • nodiratime - atime des répertoires est mis à jour uniquement pendant l'accès en écriture, peut être combiné avec relatime.
  • relatime/atime - atime semble maintenant être un alias de relatime. Cette option entraîne la mise à jour de l'attribut atime uniquement si atime précédent est plus ancien que mtime ou ctime, ou si atime précédent a plus de 24 heures.
  • strictatime - Il s'appelait auparavant atime et était donc l'option par défaut. Cela provoque la mise à jour de l'attribut atime à chaque accès au fichier. (accéder aux données du fichier, pas seulement aux métadonnées/attributs)
  • lazytime - Linux 4.10 a ajouté une nouvelle option: uniquement les temps de mise à jour (atime, mtime, ctime) de la version en mémoire du fichier inode. Les données sur le disque sont mises à jour lentement (voir man 8 mount pour plus de détails).

Depuis le noyau Linux 2.6.30, l'option par défaut est relatime. Si vous souhaitez utiliser la fonctionnalité atime d'origine, vous devez utiliser l'option strictatime. Dans le cas présenté ce serait:

_Sudo mount -o remount,strictatime /home
_

Sources

8
pabouk