Ubuntu环境下NFS挂载包含子挂载目录的文件夹到客户端时子挂载目录缺失的问题
嗨,这个问题其实是NFS导出的默认行为导致的,我来给你拆解清楚并提供解决办法:
问题根源
默认情况下,NFS服务器导出目录时,只会包含本地文件系统的目录树,不会自动包含该目录下的子挂载点(比如你这里Server01上/mydata里的clientinfo是从Server02挂载的NFS目录,属于独立的文件系统)。NFS的默认规则是“不跨文件系统导出”,所以Server03挂载后看不到这个子挂载目录。
解决步骤
要让Server01导出/mydata时包含子挂载的clientinfo目录,你需要修改NFS导出配置,添加crossmnt选项:
修改Server01的NFS导出配置
编辑/etc/exports文件,把原来的导出行更新为:/mydata 10.0.0.3(rw,sync,no_subtree_check,no_root_squash,crossmnt)这里的
crossmnt选项的作用就是允许NFS服务器导出包含子挂载点的目录树,把那些挂载在导出目录下的其他文件系统也一并对外提供。让新的导出配置生效
在Server01上执行以下命令,重新加载NFS导出规则,不需要重启整个NFS服务:sudo exportfs -ra在Server03上重新挂载目录
先卸载已挂载的/mydata,再重新挂载(或者用mount -a读取fstab配置重新挂载):sudo umount /mydata sudo mount /mydata完成后你应该就能在Server03的
/mydata下看到clientinfo目录了。
额外建议
其实从性能和稳定性角度来说,更推荐让Server03直接挂载Server02的/clientinfo目录,而不是通过Server01中转——毕竟多一层NFS挂载会增加延迟和潜在的故障点。如果你的架构允许的话,可以直接在Server02的/etc/exports里添加Server03的IP,让Server03直接挂载,这样效率会更高。
备注:内容来源于stack exchange,提问作者seb835

