3

我的基于 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和实际上在同一个文件系统上,有 100 GB 可用空间,但我错误地将它们加起来并报告 200 GB 可用空间/some/path/name/some/path/name2

有什么方法可以检测到它们在同一个分区上吗?

不起作用的方法:

  • “使用statfs()”:statfs()返回一个struct statfs,其中有一个“文件系统 ID”字段,f_fsid。不幸的是,它是未定义的,并且在 NFS 上被归零。
  • “不要多次挂载同一个分区。” 这是我无法控制的。
  • “使用基于可用空间的启发式方法。” 该方法必须确定有效。此外,statfs()缓存其输出,因此在面对大量数据移动时很难做到这一点。

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

谢谢!

4

2 回答 2

0

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

于 2011-03-24T22:35:17.370 回答
0

您可能想读取远程系统的共享文件系统 - 使用:

showmount -e server

这将为您提供正在共享的真实路径。当从远程系统遍历挂载时,将它们修剪到远程系统的公共根目录,并使用它来确定挂载点是否来自相同的底层文件系统。

在文件系统与同一底层文件系统分开共享的情况下,这对您没有帮助。

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

如果您从一个看起来与其他文件完全不同的环回挂载文件系统进行共享,这些都无济于事。

对于可以以不同名称和地址寻址的服务器,它对您没有帮助。

于 2011-03-25T00:27:32.667 回答