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