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

时间:2011-02-25 18:55:45

标签: linux unix 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的{​​{1}}和/some/path/name实际上位于同一个文件系统上,它有100 GB可用空间,但我错误地将它们添加起来并报告200 GB免费。

有没有办法检测到它们在同一个分区上?

不起作用的方法:

  • “使用/some/path/name2”:statfs()返回statfs(),其中包含“文件系统ID”字段struct statfs。不幸的是,它未定义并通过NFS归零。
  • “不要多次安装相同的部分。”这超出了我的控制范围。
  • “使用基于可用空间的启发式算法。”该方法必须明确地工作。此外,f_fsid会缓存其输出,因此面对大数据移动很难做到这一点。

如果没有解决方案,我将不得不在服务器端的每个潜在挂载点生成一个配置文件,但如果有的话会更好  一些干净的方法来避免这种情况。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可能希望阅读远程系统的共享文件系统 - 使用:

showmount -e server

这将为您提供正在共享的真实路径。从远程系统步行安装时,将它们从远程系统修剪到公共根,并使用它来确定安装点是否来自同一个基础文件系统。

如果文件系统是从同一个基础文件系统单独共享的话,这对您没有帮助。

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

如果您从环回安装的文件系统中共享,这些文件系统在形式上与其他文件系统完全不同,则这些文件系统都无法提供帮助。

对于可以使用不同名称和地址进行寻址的服务器,它无法帮助您。