我必须在/ etc / exports中“改变”一下以获得mount -a的执行权限,这是什么问题?

每当必须重新启动server1时,我可以将NFS挂载到server2上的唯一方法是更改​​server1上/ etc / exports文件中的一个“fsid”整数。 否则, mount -a命令只会挂在server2上。

典型场景:

Server1重新启动。 在server1上,我在/ etc / exports中有两行代码:

/mnt/ramdisk/dir1 *(fsid=0,rw,no_root_squash,no_subtree_check,async) /mnt/ramdisk/dir2 *(fsid=1,rw,no_root_squash,no_subtree_check,async) 

我发出这个命令:

 "exportfs -r". 

在server2上,我在/ etc / fstab中有这个

 xxx.xxx.xx:/server1_dir1/ /dir1_server2 nfs async,noatime 0 0 xxx.xxx.xx:/server2_dir2 /dir2_server2 nfs async,noatime 0 0 

我首先“卸载”那些现在有过时的NFS处理的老旧的dirs。 然后,

 "mount -a" 

该命令挂起。 我杀了之后, df显示dir1挂载,但dir2没有。

让这两个dirs挂载的唯一方法是将fsid整数更改为其他值。 例如,在server1上,我们现在有:

 /mnt/ramdisk/dir1 *(fsid=0,rw,no_root_squash,no_subtree_check,async) /mnt/ramdisk/dir2 *(fsid=2,rw,no_root_squash,no_subtree_check,async) 

我改变了fsid = 1到= 2 。 我再次发出exportfs -r命令,瞧, mount -a命令在server2上工作。

也许我不明白什么是fsid真的,但显然必须有一个更好的方式来“重新安装”NFS,而不是每次随机编辑fsid数字?

编辑 :如果我没有包含在我的导出文件server1上的fsid ,它给了我

 "Warning: /mnt/ramdisk/dir1 requires fsid= for NFS export" 

而且,如果我为两行(dir1和dir2)设置了fsid = 0,那么挂载点最终将与所有文件被复制到dir1位置相同! 所以这似乎是这个工作的唯一方法是不断切换fsid整数,有点随意。

编辑2 :我删除了fsid = 0,因为它是“特殊的”,并将其更改为fsid = 1fsid = 2/ etc / exports在server1上。 这当然有效(因为文件被改变)。 但是今天只是强行重新启动,之后(缓慢地)卸载server2的旧硬盘, mount -a失败了。 所以,(和以前一样),我编辑了server1上的exports文件,这次是fsid = 2fsid = 3exportfs -r和voila, mount -a再次在server2上工作。 回到方块1。

EDIT3关键信息:如果我以受控的方式(即.server1不会“崩溃”)取下所有内容,首先卸载server2上的目录,然后重新启动server1,然后mount -a在server2上,它工作的很好。 只有在服务器2上的挂载突然中断时才会出现此问题。 所以我猜测一些需要在server2上重置?我知道,server1崩溃后,需要很长时间卸载server2上的陈旧句柄。

我的猜测是这个问题是由在你的一个导出中使用fsid=0引起的。

请记住,当底层文件系统驱动程序不提供自己的唯一ID时, fsid是为了唯一标识设备。 特别是, fsid=0有一个特殊的含义 :

对于NFSv4,有一个独特的文件系统,它是所有导出的文件系统的根。 这是用fsid=root或者fsid=0指定的,两者意味着完全一样的东西。

由于这显然不是你想要的,总是使用一个不是0的fsid。