탑재 지점으로 하위 디렉터리도 있는 NFS 공유를 올바르게 내보내고 가져오려면 어떻게 해야 합니까?

탑재 지점으로 하위 디렉터리도 있는 NFS 공유를 올바르게 내보내고 가져오려면 어떻게 해야 합니까?

서버는 옵션을 사용하여 NFS를 통해 디렉토리를 내보냅니다 A. 의 하위 디렉토리는 다음과 같은 옵션을 사용하여 NFS 서버의 다른 위치에 대한 마운트 지점입니다./srvnohide/srv/srv/foo--bind

server# mount --bind /bar/foo/ /srv/foo/

클라이언트는 NFS를 사용하여 이를 B가져오고 마운트합니다 . 내용 은 내용입니다 .A:/srv/mnt/srv/mnt/srvA:/srv

문제는 그것이 /mnt/srv/foo비어 있고 거기에서 뭔가를 볼 것으로 기대하고 있다는 것입니다 A:/bar/foo/.

탑재 지점으로 하위 디렉터리도 있는 NFS 공유를 올바르게 내보내고 가져오려면 어떻게 해야 합니까?

답변1

crossmnt당신의 친구입니다.

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)

답변2

팔로우하다가 이런 질문을 발견했습니다.디스크 없는 아치가이드님, 이로 인해 속도가 정말 느려졌습니다. 이것이 다른 사람에게도 효과가 있을지 궁금하기 때문에 여기서 결과를 공유하겠습니다.

디스크 없는 가이드에 따르면 다음 위치에 마운트된 루프백 이미지에 디스크 없는 클라이언트의 루트 파일 시스템(내보내야 하는 실제 데이터)이 있습니다 /srv/des1.

/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)

그런 다음 마운트 지점을 생성 /nfs/des1하고 마운트를 실행하여 모든 것을 볼 수 있는지 확인했습니다.

# mkdir -p /nfs/des1 
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin  boot  dev  usr  #[SNIP]

인용하다아키텍처NFS가이드를 작성한 후 /etc/exports서버에 다음을 넣습니다.

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)

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. 

그래서 다른 모든 것을 시도한 후 교체하여 다음 /etc/exports과 같이 생겼습니다.

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)

매뉴얼 페이지 항목을 읽은 후 이것이 이전 코드와 동일한 효과를 가질 것이라고 생각할 수도 있지만 exportfs -rav변경 사항을 등록하기 위해 다시 실행한 다음 클라이언트에서 다시 설치하려고 시도했을 때 작동했습니다!

답변3

클라이언트가 볼 수 있도록 NFS 서버에서 각 마운트 하위 지점을 내보내야 하는 것으로 보입니다. 위의 경우 /etc/exports파일은 다음과 같아야 합니다.

/srv        *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo    *(rw,nohide,no_subtree_check)

그런 다음 /srv클라이언트의 옵션을 통해 가져오기 를 올바르게 -t nfs만들고 사용할 수 있습니다./srv/srv/foo

OP가 편집함

이 줄

    /srv/foo    *(rw,fsid=0,nohide,no_subtree_check)

내 경우에는 대신 일했습니다.

    /srv/foo    *(rw,nohide,no_subtree_check) 

답변4

노트:단일 사용자만 활성화

추가되는 것은 서버 측과 클라이언트 측 모두에 대한 일련의 편집입니다. 서버 측 /etc/exports/etc/fstab클라이언트 측에서.

서비스 터미널

  • 리눅스 민트 18.3 실비아 32비트
  • 커널 Linux 4.4.0-138-일반 i686
  • ASUS EEPC

    $ cat /etc/exports 
    #insert shares (one for each mounted partition sub-folder):      
    /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
    /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check)
    /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check)   
    
    $ cat /etc/fstab  
    #shared media files on /media/ed/
    /media/ed/ /nfsshare/ nfs bind 0 0
    /media/ed/media/ /nfsshare/media/ nfs bind 0 0
    /media/ed//extra /nfsshare/extra/ nfs bind 0 0
    

고객

  • 리눅스 민트 19 타라 64비트
  • 커널 Linux 4.15.0-38-일반 x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    

관련 정보