Actualiser le time d'access au file sous Linux / Jeter le cache de lecture du disque

Je fais usage du time d'access pour parsingr un process de construction, mais cela ne fonctionne pas comme je le veux: le time d'access est mis à jour la première fois que je lise le file, puis il rest le même pendant longtime, ou jusqu'à ce que le prochain redémarrage. Par exemple:

$ ll -u some_file -rw-r--r-- 1 root root 1.3M 2010-04-07 10:03 some_file $ grep abcdef some_file $ ll -u some_file -rw-r--r-- 1 root root 1.3M 2010-04-07 11:24 some_file # The access time is updated # waiting a few minutes... $ grep abcdef some_file $ ll -u some_file -rw-r--r-- 1 root root 1.3M 2010-04-07 11:24 some_file # The access time has not been updated :( 

Je suppose que le file est mis en memory tampon par Linux dans la memory libre, la seule copy est accessible aux heures suivantes pour des raisons de vitesse. Une solution serait de rejeter les tampons en memory. Après avoir cherché des forums, j'ai trouvé:

 sync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches 

Mais il ne fonctionne pas, il semble que cela ne synchronise que les tampons d'écriture, et non ceux qui sont lus. Peut-être est-ce dû à une configuration kernel personnalisée sur ma distro (fedora 9)?

Ou je manque quelque chose ici? Existe-t-il un moyen d'get ce rafraîchissement du time d'access?

Notez également que je ne veux pas simuler des écritures sur mon tree de files complet. Parce que j'utilise un système de construction basé sur makefile, cela entraînera la construction complète du projet.

modifier:

J'utilise un système de files ext3 standard, sans options spéciales.

 /dev/sda1 on / type ext3 (rw) 

J'ai essayé de le remonter avec ssortingctatime (non reconnu) et atime (pas de différence, je suppose que c'était la valeur par défaut).

Utilise-t-on les options de assembly ou de relation? Vous pouvez voir si vous êtes avec la command mount :

 [kbrandt@kbrandt-opadmin: ~] mount /dev/sda1 on / type ext3 (rw,relatime,errors=remount-ro) 

Si c'est le cas, remontez le système de files sans ces options (ou probablement mieux pour ce cas serait de modifier l'option hors de /etc/fstab et simplement de redémarrer). Ces options sont indépendantes du système de files. La description de ces options se trouve sous "FILESYSTEM INDEPENDENT MOUNT OPTIONS" dans man mount , mais essentiellement, elles empêchent ou limitent l'heure d'être mises à jour pour augmenter leurs performances.

Je ne sais pas si c'est la solution à votre problème, mais comme vous dépendez du time d'access, je vous recommand de le faire de toute façon.


À titre d'exemple, vous pouvez requestr ici ou sur stackoverflow d'parsingr votre process de construction particulier pour vous assurer que l'heure est le bon path à suivre.


Mettre à jour:
Est-ce que la stat -c "%x" filename montre la même chose? (Ignorez ma dernière mise à jour, n'a pas remarqué l'option -u …), mais peut-être que quelque chose se passe avec votre alias, alors je vérifierais avec stat pour m'assurer.

En outre, vous avez dit / n'a pas de problème, mais faites-vous ces tests sur le système racine et pas un autre système de files, comme un assembly nfs ou quelque chose?

Est-ce que touch -a -t 199812130530 de modifier le time d'access?

Bien, ce comportement est en réalité dû au kernel Fedora 9 spécifique qui désactive la mise à jour du time d'access standard pour des raisons d'optimization (l'écriture du disque pour chaque lecture nécessite beaucoup de time).

L'option DEFAULT_RELATIME (dans mon cas kelel 2.6.27.25) a été définie, qui désactive le rafraîchissement du time d'access si le dernier rafraîchissement survient il y a less d'un jour.

L'option de compilation du kernel doc ​​donne l'option de démarrage du kernel qui norelatime cette fonctionnalité … mais cela n'a pas marché!

Pour modifier avec succès ce comportement, j'ai effectivement:

 echo 60 > /proc/sys/fs/relatime_interval 

qui diminuent cet intervalle à 1 minute.

Merci pour l'aide qui m'a conduit à cette solution.