NFS缓存清理命令?

Tom*_*abe 20 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
Run Code Online (Sandbox Code Playgroud)

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

/export-path   192.168.0.0/255.255.255.0(async,rw,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)

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

server:/export-path     /mountpoint   nfs rw,hard,intr,rsize=8192,async 0 0
Run Code Online (Sandbox Code Playgroud)

如您所见,"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
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*imB 21

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

如果需要,您还可以使用清除内核中的VM缓存/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
Run Code Online (Sandbox Code Playgroud)


Eri*_*sty 6

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

  • 我刚刚通过实验证实了这一点,这确实是一个非常有用的知识,所以感谢@erik-aronesty。我在 nfs 客户端的安装选项中找不到任何提及这一点的信息。你知道你是如何发现它的吗? (4认同)
  • `opendir()` 肯定可以工作,而 `sync` 则不行。一个简单的“ls -la /data/1/kabe/ >/dev/null”就可以解决问题。 (2认同)

Art*_*mGr 5

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

有一个lookupcache=positiveNFS 挂载选项可用于防止负查找缓存,例如,当文件实际存在于服务器上时,NFS 返回“没有这样的文件或目录”。见Directory entry cachingman nfs