如何正确导出和导入也将子目录作为挂载点的 NFS 共享?

如何正确导出和导入也将子目录作为挂载点的 NFS 共享?

服务器通过 NFS 使用选项A导出目录。, ,中的子目录是 NFS 服务器上另一个位置的安装点,使用选项,例如/srvnohide/srv/srv/foo--bind

server# mount --bind /bar/foo/ /srv/foo/

客户端使用 NFSB导入A:/srv并安装它/mnt/srv。的内容/mnt/srv是 的内容A:/srv

问题是它/mnt/srv/foo是空的,而我期待看到A:/bar/foo/那里的内容。

如何正确导出和导入也将子目录作为挂载点的 NFS 共享?

答案1

crossmnt是你的朋友。

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)

答案2

我在关注时偶然发现了这个问题无盘拱门指南,这确实减慢了我的速度。我将在这里分享我的发现,因为我很好奇这是否对其他人有用。

根据无盘指南,我在环回映像中拥有无盘客户端的根文件系统(我需要导出的实际数据),该映像已安装在/srv/des1

/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)

然后我创建了一个挂载点,/nfs/des1然后运行挂载,并确认我可以看到一切:

# mkdir -p /nfs/des1 
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin  boot  dev  usr  #[SNIP]

参考架构 NFS指南,然后我将以下内容放在/etc/exports服务器上:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)

exportfs -rav然后我在服务器上运行以应用这些更改。

mount server:/des1 /mnt/tmp然而,当我期望无盘根文件系统在那里时,我随后在测试客户端上安装了共享:却发现它是一个空目录。

在这个阶段,我尝试了几乎所有的方法,直到有东西引导我在exports手册页中看到这个选项:

crossmnt
    This option is similar to nohide but it makes it possible for clients
    to move from the filesystem marked with crossmnt to exported filesystems
    mounted on it. Thus when a child filesystem "B" is mounted on a parent "A",
    setting crossmnt on "A" has the same effect as setting "nohide" on B. 

因此,在尝试了其他所有方法后,我将其交换了,所以我的/etc/exports看起来像这样:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)

阅读完手册页条目后,您可能会认为这与之前的代码具有相同的效果,但是当我exportfs -rav再次运行以注册更改,然后尝试从客户端重新安装时,它起作用了!

答案3

看起来每个挂载子点都必须由 NFS 服务器导出才能对客户端可见。在上述情况下,/etc/exports文件应如下所示:

/srv        *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo    *(rw,nohide,no_subtree_check)

然后,/srv通过选项在客户端上导入-t nfs将使/srv/srv/foo正确可用。

由OP编辑

这条线

    /srv/foo    *(rw,fsid=0,nohide,no_subtree_check)

在我的情况下有效而不是

    /srv/foo    *(rw,nohide,no_subtree_check) 

答案4

笔记:仅启用单个用户

它添加的是对服务器端和客户端的一组编辑。在服务器端/etc/exports/etc/fstab客户端。

服务器端

  • Linux Mint 18.3 西尔维亚 32 位
  • 内核 Linux 4.4.0-138-通用 i686
  • 华硕EEPC

    $ cat /etc/exports 
    #insert shares (one for each mounted partition sub-folder):      
    /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
    /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check)
    /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check)   
    
    $ cat /etc/fstab  
    #shared media files on /media/ed/
    /media/ed/ /nfsshare/ nfs bind 0 0
    /media/ed/media/ /nfsshare/media/ nfs bind 0 0
    /media/ed//extra /nfsshare/extra/ nfs bind 0 0
    

客户端

  • Linux Mint 19 塔拉 64 位
  • 内核 Linux 4.15.0-38-通用 x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    

相关内容