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


21

服务器通过带有选项的NFS A导出目录。内的子目录,是一个使用NFS服务器上的其他位置安装点的选择,像/srvnohide/srv/srv/foo--bind

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

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

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

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


在A from上使用symlink可能更容易/srv/foo --> /bar/foo
ckhan 2012年

1
我试过了 这将尝试到达/bar/foo客户端计算机上B而不是服务器上A
mbaitoff 2012年

Answers:


27

crossmnt 是你的朋友。

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

10

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

根据无盘指南,我在回环映像中具有无盘客户端的根文件系统(我需要导出的实际数据),该映像已安装在/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]

参考Arch 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再次运行以注册更改时,然后尝试从客户端重新挂载并成功了!


8

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

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

然后,/srv使用option在客户端上导入-t nfs将使两者/srv同时/srv/foo可用。

由OP编辑

这条线

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

在我的情况下而不是

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

1
在根上交叉?
meffect '17

2

我也确实想这样做,但是这个想法似乎有问题,因为NFS客户端期望文件的inode数量在客户端的单个装载视图中是唯一的。

问题在此博客文章中详细介绍(不是我本人):http : //utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

我决定单独安装文件系统并将它们符号链接在一起,这对所有NFS客户端都适用。


1
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
slm

0

注意:仅启用单个用户

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

服务器端

  • Linux Mint 18.3 Sylvia 32位
  • 内核Linux 4.4.0-138-通用i686
  • 华硕eeepc

    $ 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 Tara 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
    

1
这是什么?这是一个文件吗?文件很多?请使用格式化工具来格式化您的答案,以便清楚说明。您能否编辑并解释您的答案如何回答问题?
terdon

(1)用你的话。(2)尚未提供的报价是什么?
G-Man说'Resstate Monica''18

对此表示歉意。
Ed Iglehart '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.