两个 NFS 导出指向同一位置(以某种方式)

两个 NFS 导出指向同一位置(以某种方式)

我正在运行具有两个导出的 NFS 服务器:

/mnt/sda1 192.168.1.254/255.255.255.0(rw,fsid=1,no_subtree_check,all_squash,anonuid=0,anongid=0,insecure)
/mnt/sdb1 192.168.1.254/255.255.255.0(rw,fsid=1,no_subtree_check,all_squash,anonuid=0,anongid=0,insecure)

在服务器上,如果我 cd 到任一目录,它们显然是非常不同的驱动器。

/dev/sda1                 1.8T      1.7T      8.6G 100% /mnt/sda1
/dev/sdb1                 2.0T      1.3T    603.9G  68% /mnt/sdb1

但是,如果我在客户端上挂载这些 nfs 共享,则挂载 /mnt/sdb1 似乎直接指向 /mnt/sda1。

sudo mount 192.168.1.123:/mnt/sdb1 /media/test

然后在客户端使用 df -h

192.168.1.123:/mnt/sdb1                   1.8T  1.7T  8.6G 100% /media/test

正如您在上面看到的,即使仅根据存储空间,这实际上是 /mnt/sda1。

该服务器已经运行了很长时间,我隐约记得大约 5 年前,我正在使用 lvm 磁盘管理东西(但从未让它工作),并且可能配置了一些导致这种奇怪行为的东西 - 但我不确定。我什至不太确定从哪里开始,因为这对于谷歌来说是一种很难的行为。感谢帮助!

答案1

我在这里做出一个有根据的猜测:这种行为可能是由fsid=1两个导出选项引起的。

根据exports联机帮助页,该fsid选项用于标识文件系统:

NFS 需要能够识别它导出的每个文件系统。通常它会使用文件系统的 UUID(如果文件系统有这样的东西)或保存文件系统的设备的设备号(如果文件系统存储在设备上)。

由于并非所有文件系统都存储在设备上,并且并非所有文件系统都有 UUID,因此有时需要显式告诉 NFS 如何识别文件系统。这是通过fsid=选项完成的。

导出/mnt/sda1可能优先,因为它在导出文件中较早(即它映射到fsid=1第一个)。

如果上述假设成立,那么问题的解决方案应该很简单:只需fsid/mnt/sdb1导出分配一个不同的值即可。

相关内容