通过 NFS 导出 FUSE 时遇到问题

通过 NFS 导出 FUSE 时遇到问题

我有一个自己编写的 FUSE 文件系统,挂载在我的 NFS 服务器上的 mountpoint 上/export/example/mount。然后我通过 NFS 导出 FUSE 的父目录。其中/etc/exports包含选项nohide,crossmnt,subtree_check,ro,no_root_squash并允许所有人免费访问:

/export/example *(nohide,crossmnt,subtree_check,ro,no_root_squash)

我可以在 NFS 客户端上安装此导出并访问它。一旦我访问 NFS 中的 FUSE,我的客户端就会挂起,直到我访问umountNFS(并且我需要使用选项-f来完成此操作)。

我尝试以我的工作用户和 root 身份安装 FUSE。结果是一样的。

服务器运行的是 Ubuntu 12.04,客户端运行的是 SuSE 9.3。 FUSE 是用 Python 编写的,可以在本地运行,没有任何问题。仅通过 NFS 导出失败。我没有安全限制,因为所有这些都位于只有受信任用户的专用网络上。

有谁知道什么可能会导致我的麻烦或(甚至更好)如何解决问题?

我曾考虑过用 SSHFS 替换 NFS 来解决该问题,但这不起作用,因为客户端系统太旧而无法支持 SSHFS(因为它基于 FUSE,并且不支持 FUSE)。

答案1

大多数 Linux 发行版附带的内核不允许使用 NFSv2 或 NFSv3 导出 FUSE 安装的文件系统。您的选择是: 1. 在内核空间中实现您的文件系统。 2. 在 NFSv4 中导出它,这需要 fsid=

我自己使用2。在下图中,以 开头的命令#在服务器上运行,以 开头的命令$在客户端上运行。

这是我的服务器配置,您可以看到我正在导出 FUSE 安装点:

# mount | tail -n1
convmvfs on /mnt/gb2312 type fuse.convmvfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
# grep gb2312 /etc/exports 
/mnt/gb2312     192.168.0.0/16(no_subtree_check,fsid=0)

这是我对我的客户所做的:

$ sudo mount -t nfs4 server:/ /mnt/
$ ls /mnt
Downloads  IMAGES  Library  lost+found

要验证您的失败是否是由在 NFS v2/v3 中导出熔丝引起的,请专门导出该挂载点而不使用 NFS v4 (fsid),然后查看是否出现错误:

# exportfs -a
exportfs: /mnt/gb2312 requires fsid= for NFS export

如果在服务器上导出挂载点 umounted,并稍后使用熔断器挂载它,如果您尝试使用 nfs 客户端,您应该在日志中看到:

# tail /var/log/syslog
Aug 18 03:54:31 server rpc.mountd[17183]: Cannot export /mnt/gb2312, possibly unsupported filesystem or fsid= required
Aug 18 04:00:52 server rpc.mountd[17183]: Caught signal 15, un-registering and exiting.

答案2

默认情况下,通过 nfs 导出子安装处于关闭状态。建议的操作过程是同时导出子安装并让客户端安装它。

相关内容