我在计算机 A 上有一个 nfs 导出,我需要将其安装到不同网络中的计算机 B 上。我有一台多家庭计算机 C,可以提供 A 和 B 之间的连接。所有计算机都是基于 Redhat 的。我尝试安装并重新导出它,但没有成功。我假设 exportfs 拒绝共享 nfs 安装的文件系统。但在我放弃之前,我想我应该问一下。
也许有更好的解决方案?也许将 nfs/nfslock 请求从 C 转发到 A?
答案1
不,您不能重新共享 NFS 挂载。
摘录自:回复:我们可以通过运行在其他 Linux 服务器上的 NFS 服务器再次导出一个 NFS 共享吗?
简短的回答:这是不可能的。
至少九年来,Linux 内核包含的代码可保证 NFS 导出的目录“物理”存在于提供 NFS 服务的主机上。 “物理上”存在能意味着磁盘通过 iSCSI 或光纤通道或任意数量的其他网络层存在,但这是在块级别,而不是文件系统级别。内核将拒绝导出 NFS 挂载目录。
大约 14 年前,用户空间 NFS 服务器实现确实允许这样做,但我只将它用于一种奇怪的一次性情况几天(绝对是非生产)。
我可以想象许多用例,其中重新导出 NFS 安装目录是合适的(我有天马行空的想象力),但让它工作并不容易。具体来说,在最近的内核中,熔丝文件系统可能是 NFS 导出的(http://lwn.net/Articles/281793/),因此您可以在 NFS 安装目录和导出之间放置一个熔断层。如果你成功了,我很想听听。
答案2
您无法重新共享 NFS 安装,但没有理由这样做。您可以使用C在A和B之间转发请求。
对于直接转发,您需要转发 TCP 端口 111(端口映射)以及 NFS 使用的所有 UDP 和 TCP 端口(nfsd
本身mountd
和lockd
)。这可能不太方便。
使用C可能会更容易设置 VPN这样,就可以在A和B之间建立一条路由,将应用层问题与网络路由问题完全分开来解决。