我正在运行具有两个导出的 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
导出分配一个不同的值即可。