Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何判断两个NFS装载是否在同一个远程文件系统上?_Linux_Unix_Nfs - Fatal编程技术网

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

Linux 如何判断两个NFS装载是否在同一个远程文件系统上?,linux,unix,nfs,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 那很好。问题在于,NF

我的基于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的可用空间

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

不起作用的方法:

  • “Use
    statfs()
    ”:
    statfs()
    返回一个
    struct statfs
    ,其中有一个“文件系统ID”字段,
    f\u fsid
    。不幸的是,它是未定义的,在NFS上被归零
  • “不要多次挂载同一个分区。”这超出了我的控制范围
  • “使用基于可用空间的启发式方法。”该方法必须明确有效。另外,
    statfs()
    缓存其输出,因此在面对大数据移动时很难做到这一点
如果没有解决方案,我将不得不在服务器端的每个潜在装载点生成一个配置文件,但如果有,那会更好 一些干净的方法来避免这种情况


谢谢

我猜如果“stat-c%d/mountpoint”执行您想要的操作(我现在无法测试)?

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

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

如果文件系统与同一个底层文件系统分开共享,这对您没有帮助

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

如果您从一个环回挂载的文件系统共享数据,而该文件系统在形式上与其他文件系统完全不同,那么这些都没有帮助


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

给定示例数据,您可以
排序-u
(唯一)
+0.0-0.N
(通过远程路径的前N个字符),或者假设server1:中的“:”是您的“字段sep”
排序-t:“-u+0-1