NFS缓存清理命令?

时间:2011-11-29 13:41:33

标签: linux nfs

我遇到了NFS客户端属性缓存问题。 我正在使用一些服务器,一个是NFS服务器,其他服务器是NFS客户端服务器。

所有服务器都是Debian(lenny,Linux的2.6.26-2-amd64),版本如下。

 % 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

在NFS服务器中,/ etc / exports编写如下:

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

在NFS客户端中,/ etc / fstab编写如下:

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

如您所见,“async”选项用于多客户端访问性能。 但是,有时这会导致错误缓存错误。

由于我维护的服务器很多(而且我没有很强的权限来更改挂载选项),我不想修改/ etc / exports和/ etc / fstab。 我认为只要我有一个命令行工具就可以用用户权限“清理”NFS客户端属性缓存就足够了。

如果有这样的命令,请告诉我。

谢谢,

<小时/> (追加)

我的意思是“虚假缓存错误”,

 % 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

有时这种情况会发生。 问题不是文件内容,而是文件属性(= dentries信息),因为NFS表示它保证了Close-to-Open一致性。

5 个答案:

答案 0 :(得分:21)

根据“虚假缓存错误”的含义,运行sync可能会为您提供所需的信息。这将刷新所有文件系统缓冲区。

如果需要,您还可以使用/proc/sys/vm/drop_caches清除内核中的VM缓存。

# 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

答案 1 :(得分:6)

在给定的进程中,在文件的父目录上调用opendir和closedir会使NFS缓存无效。我在编写作业调度程序时使用了这个。非常,非常有帮助。试试吧!

答案 2 :(得分:4)

AFAIK,syncasync选项不是属性缓存的来源。 Async允许服务器将数据延迟保存到服务器文件系统,例如它会影响NFS服务器故障时的写入持久性,但如果NFS服务器稳定,则async不会影响NFS客户端。

可以使用lookupcache=positive NFS挂载选项来防止负面查找缓存,例如当文件实际存在于服务器上时,NFS返回“无此类文件或目录”。请参阅Directory entry caching中的man nfs

答案 3 :(得分:1)

在nfs服务器上清除/ var / lib / nfs / rmtab文件。

以下命令用于清除与内存相关的问题。这也很危险。 soem times它会破坏托管在盒子上的应用程序

# 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

答案 4 :(得分:1)

您正在看到NFS的属性缓存的影响。请参阅man nfs,然后查看DATA AND METADATA COHERENCE

默认情况下,NFS将属性缓存至少30秒(acregminacdirmin),最多60秒(acregmaxacdirmax)。您可以使用actimeo覆盖所有这些内容,或使用noac完全禁用属性缓存。使用noac挂载选项,OP描述的行为消失,但会达到性能。

如果您只是寻找新文件的外观,

lookupcache=positive非常有用,但删除操作仍然会通过属性缓存。

相关问题