如何判断两个NFS挂载是否在同一个远程文件系统上?

我的基于Linux的系统显示NFS挂载文件系统的统计信息,如下所示:

Remote Path Mounted-on Stats server1:/some/path/name /path1 100 GB free server2:/other/path/name /path2 100 GB free Total: 200 GB free 

这工作正常。 问题是NFS服务器上的同一文件系统在我的客户端上挂载了两次:

  Remote Path Mounted-on Stats server1:/some/path/name /path1 100 GB free server1:/some/path/name2 /path2 100 GB free Total: 200 GB free 

server1/some/path/name/some/path/name2实际上是在同一个文件系统上,它有100 GB的空闲空间,但是我错误地将它们加起来并报告了200 GB的空闲空间。

有什么办法可以检测到他们在同一个分区吗?

方法不起作用:

  • “使用statfs() ”: statfs()返回一个struct statfs ,它有一个“文件系统ID”字段f_fsid 。 不幸的是,它是未定义的,并通过NFS归零。
  • “不要多次安装同一份。” 这是我无法控制的。
  • “根据可用空间使用启发式”。 该方法必须确定地工作。 而且, statfs()caching它的输出,所以在大数据移动的情况下很难做到这一点。

如果没有解决办法,我将不得不在服务器端的每个可能的挂载点上生成一个configuration文件,但是如果有一些干净的方法可以避免的话,那将会好很多。

谢谢!

我猜如果“stat -c%d / mountpoint”做你想做的(我现在无法测试)?

您可能需要阅读远程系统的共享文件系统 – 使用:

 showmount -e server 

这会给你分享的真正路径。 从远程系统步行安装时,将其修剪到远程系统的公共根目录,并使用它来确定安装点是否来自同一个基础文件系统。

如果文件系统是从相同的底层文件系统分别共享的,这并不能帮助您。

您可以添加一个启发式检查整个文件系统的大小和可用空间,并假设它们是相同的,并且从同一个分区映射到装载设备的最短公共路径的相同远程服务器。

如果你从一个看起来与其他形式完全不同的环回安装的文件系统共享,这些都不会有帮助。

它不能帮助你在一个服务器的情况下,可以用不同的名字和地址来解决。