NFS cache-cleaning command?

Tomoya Kabe picture Tomoya Kabe · Nov 29, 2011 · Viewed 52.2k times · Source

I have a trouble with NFS client-side attribute caching. I'm using some servers, one is an NFS server and the others are NFS client servers.

All servers are Debian(lenny, 2.6.26-2-amd64 of Linux) and versions are following.

 % 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

In the NFS server, /etc/exports is written as following:

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

In the NFS clients, /etc/fstab is written as following:

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

As you can see, "async" option is used for multi-clients access performance. However, sometimes this can cause false-caching errors.

Since I am maintaining many servers (and I have not so strong permission to change the mount options), I don't want to modify /etc/exports nor /etc/fstab. I think it is sufficient if I have a command-line tool that "cleans" NFS client-side attribute cache with a user permission.

Please let me know if there such commands.

Thanks,


(Appended)

I mean by "false-caching errors",

 % 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

Sometimes such cases happen. The problem is not a file content but file attributes(=dentries information) since NFS says it guarantees Close-to-Open consistency.

Answer

JimB picture JimB · Nov 29, 2011

Depending on what you mean by "false-caching errors", running sync may get you what you need. This will flush all filesystem buffers.

If needed, you can also clear out the VM caches in the kernel using /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