如何确定NFS远程服务器是否正在导出目录?


11

在我的脚本中,我具有多个状态层:

  1. 遥控器可用(ping)
  2. 远程NFS服务处于活动状态
  3. 远程NFS导出某个目录
  4. 远程NFS已挂载(挂载)

对于(2)和(3),我相信rcpinfo是最好的选择。对于(2),我无法弄清楚如何在不启动子shell的情况下将查询范围缩小到NFS服务(此应用程序不接受)。对于(3),我不确定该信息是否甚至可以远程使用(ssh当然,无需输入)。

我正在使用RHEL 6,无法访问标准发行版中未包含的程序。

Answers:


16

对于3),您可能想要使用showmount -e remote_nfs_server它来显示remote_nfs_server是否已导出任何内容。

对于2),如果您不想使用shubshel​​l,并且知道远程服务器是否运行NFSv3或NFSv4,以及TCP还是UDP,则可以使用rpcinfo专门查询:
rpcinfo -u remote_nfs_server nfs 3 通过UDP的NFSv3和
rpcinfo -t remote_nfs_server nfs 4通过TCP的NFSv4

对于4),您可能需要查看“ 检查文件夹是否是已安装的远程文件系统”


更多的信息:


showmount -r remote会告诉我是否remote正在导出任何内容,但是有什么办法让我确定是否remote:/mnt/dir在不启动子外壳程序(即管道)的情况下进行导出?
肖恩·艾瑞德

showmount -e remote会告诉您是否remote已导出任何内容。showmount -r只会给您一条错误消息,因为该选项不存在。您可以尝试使用shell子串匹配来在showmount输出中基本上对正则表达式进行grep匹配。也许看看如stackoverflow.com/questions/12619720/...
doktor5000

或换种说法,我不知道有任何独立的命令可以专门查询远程NFS服务器的一个特定挂载,而且我认为这不存在。只有另外两种可行的方法是通过ssh在本地查询远程服务器(尽管那样,由于NFS的无状态特性,没有可靠的方法来确定当前是否导出了给定目录)。其他方法可能是尝试从客户端挂载NFS导出并检查退出代码,然后检查本地挂载及其内容。
doktor5000

我对-r选项-e– –的错误是我的意思:)以前曾建议过“尝试方法”。我不是特别喜欢它,但是看起来很不错。
肖恩·艾瑞德

5

您可以showmount -e <server>在#3的某些方面使用。如果导出很简单,则至少建议导出一个目录(或该目录的父目录)。

# showmount -e server
/export                               (everyone)

对于#2,我不确定您要寻找什么。如果您使用的是NFSv3,则至少要查找mountd和nfs(在某些情况下可能要确认锁管理器)。如您所说,您可以使用rpcinfo明确检查任何内容。

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting

showmount -r remote会告诉我是否remote正在导出任何内容,但是有什么办法让我确定是否remote:/mnt/dir在不启动子外壳程序(即管道)的情况下进行导出?
肖恩·艾瑞德

这取决于您所使用的设施。您的脚本是用什么写的?为什么启动一个单独的可执行文件(showmount)比启动另一个shell没什么大问题?
BowlOfRed 2014年

我正在Python 2.6中编写脚本并使用该subprocess模块。我可以使用它来建立一个管道,但是我不想让设计变得那么复杂。我需要避免启动子外壳以使脚本被优雅地杀死-如果将其杀死,则将杀死其子进程,但杀死其子进程。因此,子外壳将被杀死,但子外壳不会生成进程。我还注意到,rpcinfo最多可能需要三分钟才能返回,这是无子外壳功能的原始基础。不过,现在改变这一点为时已晚。
肖恩·艾瑞德

编写一个满足您需要的脚本(例如调用showmount,但接受目录参数并返回成功/失败,并包括一个适合您目的的超时),然后从python调用该脚本。
BowlOfRed 2014年

我可以向您保证,这并不像您立即想到的那么容易–锁定后,rpcinfo除了SIGKILL之外,什么都不响应(这是错误的归因–操作系统显然会杀死进程)。无论如何,这仍然会启动Shell启动rpcinfo-根本的问题仍然存在。
肖恩·艾瑞德

0

列出所有伪根NFS-V4导出目录

ls /net/ip-addr-nfs-server

在另一个线程中查看我的答案


为了使/net安装工作,/etc/auto.net脚本必须确定服务器具有相应的导出。这使用showmount命令。如果服务器仅具有NFSv4,它将无法正常工作(showmount显示RPC: Program not registered/net/server并将仅报告File not found
Ale
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.