1

我正在尝试对数百台服务器上的数千个 NFSv3 文件服务器导出进行一些测试。从服务器上的配置到网络连接,很多事情都可能出错。我能做的最完整的测试是实际尝试将它安装在客户端上。

我可以做到这一点,但实际上安装所有东西超出了我的需要,占用了程序执行之外的状态和资源,并且往往会给客户带来一点压力。我不止一次看到似乎表明客户端上的某些事情不满意并阻止安装发生的问题。(除了客户端重新启动之外没有任何更改,安装再次工作)。

我希望编写一些更轻量级的代码,它可以简单地充当 NFS 客户端,并查看 NFS MOUNT 调用是否成功返回了文件句柄。如果是这样,我的服务器正在运行并且我的客户端已获得授权。但我还没有找到任何简单的代码来做到这一点。

当我查看Linux Source时,看起来至少有一些代码涉及它是一个 linux 模块,这令人困惑。

是否有一些用户空间代码只是通过挂载调用请求 NFS 文件句柄,而我可能能够删除这些代码?(或者有什么理由让我的想法行不通)?这都是 AUTH_SYS,所以我不必获得 kerberos 票证或任何东西。

4

2 回答 2

0

那么,只需获取您正在运行的 nfs 版本的 rpc 协议定义文件,可能是版本 3 或 4,通过 rpcget xdr 协议编译器运行它们,您将获得 c 中的客户端函数,您可以编译这些函数,您可以调用与服务器。但是他们会执行几个系统系统调用,没有发生这种情况就无法进行网络通信 linux 并且它将通过 linux 内核中的 tcp/ip 堆栈(您可能会使用 udp)。您可能可以在 SUN/Oracle 网站上找到 nfs 协议定义文件,或者您可以在 linux 发行版的源代码中找到它们——您将进行应用层调用,但客户端调用 rpc 库函数,而后者又会调用进入内核的linux系统调用

于 2017-02-22T22:13:48.327 回答
0

在不了解的情况下,我将根据我对 NFS/Linux 文件系统的了解进行一点推测。

我假设您的客户端是 linux(但如果存在 nfs 客户端,相同的逻辑也适用于 windows)。

听起来,当您进行挂载时,您正在达到资源消耗到客户端无法挂载更多 nfs 挂载的程度。有意义的是,当您重新启动时它会再次开始工作,并且重新启动将删除 nfs 挂载(假设您正在显式/以编程方式挂载),从而允许挂载再次发生。我敢打赌,您只是在安装 nfs 安装件,而从不卸载它们。所以我建议如下:

  1. 访问刚刚挂载的 nfs 文件系统中的文件或目录
  2. 卸载 nfs 文件系统
于 2017-02-21T10:39:47.257 回答