服务器使用选项通过 NFSA
导出目录。内的子目录,是一个使用NFS服务器上的其他位置安装点的选择,像/srv
nohide
/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 共享?
ana*_*nik 39
crossmnt
是你的朋友。
/srv *(rw,fsid=0,no_subtree_check,crossmnt)
Run Code Online (Sandbox Code Playgroud)
mba*_*off 11
看起来每个挂载子点都必须由 NFS 服务器导出才能对客户端可见。在上述情况下,/etc/exports
文件应如下所示:
/srv *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo *(rw,nohide,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
然后,导入/srv
与选项在客户端上-t nfs
将使双方/srv
和/srv/foo
正常使用。
这条线
/srv/foo *(rw,fsid=0,nohide,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
在我的情况下工作而不是
/srv/foo *(rw,nohide,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
小智 10
我在遵循Diskless Arch指南时偶然发现了这个问题,它真的让我慢了下来。我将在这里分享我的发现,因为我很好奇这是否适用于其他任何人。
根据无盘指南,我在环回映像中有无盘客户端的根文件系统(我需要导出的实际数据),该映像已安装在/srv/des1
:
/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个挂载点,/nfs/des1
然后运行挂载,并确认我可以看到所有内容:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
Run Code Online (Sandbox Code Playgroud)
参考Arch NFS指南,然后我将以下内容放入/etc/exports
服务器:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
Run Code Online (Sandbox Code Playgroud)
然后我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.
Run Code Online (Sandbox Code Playgroud)
因此,在尝试了其他所有方法后,我将其交换了下来,因此/etc/exports
看起来像这样:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
阅读手册页条目后,您会认为这与之前的代码具有相同的效果,但是当我exportfs -rav
再次运行以注册更改时,然后尝试从客户端重新安装并且它起作用了!