Ubuntu 18.04 系统上有2个6T的硬盘,分别挂载到/home和/usr下。现在要为这两个盘做nfs共享,但是nfs共享只能共享一个文件夹,如果要共享第二个文件夹,那么第二个文件夹必须是第一个文件夹的子文件夹。

这样,我要么只能共享 /home/data ,要么只能共享 /usr/data

这时候就开始脑洞了:

  • 建立一个软连接 /usr/nfs-share /home/data/nfs-share ,然后共享 /home/data/nfs-share 。实测是客户端无法挂载,提示文件不存在,所以该方案不可行。

  • /usr 所在的硬盘挂载到 /home/data/nfs-share ,实测该方案成功,客户端可正常挂载 /nfs-share 。但是存在很大的问题,这样等于客户端可以访问到服务器 /usr 下的所有文件,想想就恐怖噢,所以该方案不可行。

  • 既然方案二可以通,那不就有方案了嘛,把 /usr 所在的硬盘挂载到 /home/data/nfs-share ,然后卸载 /usr ,这样 /usr 就隶属于根目录,而不是独立的硬盘了,再把 /home/data/nfs-share 里面的文件用 cp -rp 命令复制回去就可以了呗。说干就干, sudo umount /usr sudo cp -rp /home/data/nfs-share/* /usr ,完蛋, command not found ,这下才想起来坏事了。所有的命令都是存放在 /usr/bin /usr/sbin 里面的,你把 /usr 搞掉了,命令当然就没有了。好在,我还只是用命令行卸载了,没有修改 /etc/fstab 文件,那重启系统应该就解决了吧。太天真了嘛,所有命令都用不了,当然也不能重启拉。只能物理重启了。

  • 后记: 最终方案是使用启动盘做方案3的操作,而不是直接在原系统里面做方案3的操作。

    另一种可能: 将不同驱动器映射到docker容器的一个目录和该目录的子目录,然后在docker容器里面做nfs共享,简直完美。