web-dev-qa-db-fra.com

Commande de nettoyage du cache NFS?

J'ai un problème avec la mise en cache des attributs côté client NFS. J'utilise certains serveurs, l'un est un serveur NFS et les autres sont des serveurs clients NFS.

Tous les serveurs sont Debian (lenny, 2.6.26-2-AMD64 de Linux) et les versions sont les suivantes.

 % dpkg -l | grep nfs
ii  libnfsidmap2                        0.20-1                     An nfs idmapping library
ii  nfs-common                          1:1.1.2-6lenny1            NFS support files common to client and server
ii  nfs-kernel-server                   1:1.1.2-6lenny1            support for NFS kernel server

Dans le serveur NFS,/etc/exports s'écrit comme suit:

/export-path   192.168.0.0/255.255.255.0(async,rw,no_subtree_check)

Dans les clients NFS,/etc/fstab s'écrit comme suit:

server:/export-path     /mountpoint   nfs rw,hard,intr,rsize=8192,async 0 0

Comme vous pouvez le voir, l'option "async" est utilisée pour les performances d'accès multi-clients. Cependant, cela peut parfois provoquer des erreurs de fausse mise en cache.

Étant donné que je gère de nombreux serveurs (et que je n'ai pas une autorisation aussi forte pour modifier les options de montage), je ne veux pas modifier/etc/exports ni/etc/fstab. Je pense que c'est suffisant si j'ai un outil en ligne de commande qui "nettoie" le cache d'attributs côté client NFS avec une autorisation utilisateur.

Veuillez me faire savoir s'il existe de telles commandes.

Merci,


Je veux dire par "erreurs de fausse mise en cache",

 % ls -l /data/1/kabe/foo                  
ls: cannot access /data/1/kabe/foo: No such file or directory
 % ssh another-server 'touch /data/1/kabe/foo' 
 % ls -l /data/1/kabe/foo
ls: cannot access /data/1/kabe/foo: No such file or directory

Parfois, de tels cas se produisent. Le problème n'est pas un contenu de fichier mais des attributs de fichier (= informations sur les dentiers) car NFS dit qu'il garantit une cohérence proche de l'ouverture.

22
Tomoya Kabe

Selon ce que vous entendez par "erreurs de fausse mise en cache", l'exécution de sync peut vous fournir ce dont vous avez besoin. Cela videra tous les tampons du système de fichiers.

Si nécessaire, vous pouvez également effacer les caches VM dans le noyau en utilisant /proc/sys/vm/drop_caches.

# To free pagecache
echo 1 > /proc/sys/vm/drop_caches

# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches

# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
23
JimB

Dans un processus donné, appeler opendir et closedir dans le répertoire parent d'un fichier invalide le cache NFS. Je l'ai utilisé lors de la programmation d'un planificateur de travaux. Très, très utile. Essayez!

6
Erik Aronesty

AFAIK, les options sync et async ne sont pas la source de la mise en cache des attributs. Async permet au serveur de retarder l'enregistrement des données dans le système de fichiers du serveur, par exemple cela affecte la durabilité d'écriture en cas de défaillance du serveur NFS, mais si le serveur NFS est stable, alors async n'affecte pas les clients NFS.

Il y a un lookupcache=positive Option de montage NFS qui pourrait être utilisée pour empêcher la mise en cache de recherche négative, par exemple le NFS renvoyant "Aucun fichier ou répertoire" lorsque le fichier existe réellement sur le serveur. Voir Directory entry caching dans man nfs.

4
ArtemGr

Vous voyez les effets du cache d'attributs de NFS. Voir man nfs, et consultez DATA AND METADATA COHERENCE.

NFS par défaut met en cache les attributs pendant au moins 30 secondes (acregmin et acdirmin) et au maximum 60 secondes (acregmax et acdirmax). Vous pouvez remplacer tout cela avec actimeo, ou désactiver entièrement le cache d'attributs avec noac. Avec l'option de montage noac, le comportement décrit par l'OP disparaît, mais diminue les performances.

lookupcache=positive est utile si vous recherchez simplement l'apparition de nouveaux fichiers, mais les suppressions continueront à passer par le cache d'attributs.

1
Jeff Taylor

effacer le fichier/var/lib/nfs/rmtab sur le serveur nfs.

Les commandes ci-dessous sont utilisées pour effacer les problèmes liés à la mémoire. et c'est très dangereux aussi. soem fois il plantera votre application hébergée sur la boîte

# sync

# To free pagecache
echo 1 > /proc/sys/vm/drop_caches

# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches

# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
0
Bin