通过 NFS 导出 FUSE 时遇到问题

Alf*_*lfe 10 linux suse ubuntu 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Tan*_*n六四 9

大多数 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)
Run Code Online (Sandbox Code Playgroud)

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

$ sudo mount -t nfs4 server:/ /mnt/
$ ls /mnt
Downloads  IMAGES  Library  lost+found
Run Code Online (Sandbox Code Playgroud)

要验证您的失败是由在 NFS v2/v3 中导出保险丝引起的,请在没有 NFS v4 (fsid) 的情况下专门导出该挂载点,然后查看是否出现错误:

# exportfs -a
exportfs: /mnt/gb2312 requires fsid= for NFS export
Run Code Online (Sandbox Code Playgroud)

如果在服务器上导出挂载点 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.
Run Code Online (Sandbox Code Playgroud)


hil*_*red 0

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