NFS를 통해 FUSE를 내보내는 중에 문제가 발생했습니다.

NFS를 통해 FUSE를 내보내는 중에 문제가 발생했습니다.

나는 NFS 서버의 마운트 지점에 마운트된 FUSE 파일 시스템을 직접 작성했습니다 /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에 액세스하면 NFS에 액세스할 때까지 클라이언트가 정지됩니다 umount(이를 수행하려면 옵션을 사용해야 함 -f).

업무용 사용자와 루트로 FUSE를 설치해 보았습니다. 결과는 동일합니다.

서버는 Ubuntu 12.04를 실행 중이고 클라이언트는 SuSE 9.3입니다. FUSE는 Python으로 작성되었으며 문제 없이 로컬로 실행할 수 있습니다. 내보내기는 NFS를 통해서만 실패합니다. 이 모든 것이 신뢰할 수 있는 사용자만 있는 개인 네트워크에 있기 때문에 보안 제한이 없습니다.

나에게 문제를 일으키는 원인이나 해결 방법을 아는 사람이 있습니까?

문제를 해결하기 위해 NFS를 SSHFS로 교체하려고 생각했지만 클라이언트 시스템이 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

서버에 마운트 해제된 마운트 지점을 내보내고 나중에 회로 차단기를 사용하여 마운트하는 경우 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를 통한 하위 마운트 내보내기는 기본적으로 꺼져 있습니다. 권장되는 조치 방법은 하위 설치도 내보내고 클라이언트가 이를 설치하도록 하는 것입니다.

관련 정보