서브 디렉토리가있는 NFS 공유를 마운트 지점으로 올바르게 내보내고 가져 오는 방법은 무엇입니까?


21

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

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

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

문제는 /mnt/srv/foo비어 있지만 내용이 표시 될 것으로 예상합니다 A:/bar/foo/.

서브 디렉토리가있는 NFS 공유를 마운트 지점으로 올바르게 내보내고 가져 오는 방법은 무엇입니까?


A에서 symlink를 사용하는 것이 더 쉬울 /srv/foo --> /bar/foo까요?
ckhan

1
나는 이것을 시도했다. 이것은 서버가 아닌 /bar/foo클라이언트 컴퓨터 로 가려고 시도 B합니다 A.
mbaitoff

답변:



10

Diskless Arch 가이드 를 따르는 동안이 문제가 발생 하여 실제로 속도가 느려졌습니다. 나는 이것이 다른 사람에게 효과가 있는지 궁금하기 때문에 여기에서 나의 결과를 공유 할 것입니다.

Diskless 안내서에 따라 루프백 이미지에 디스크없는 클라이언트의 루트 파일 시스템 (내보낼 실제 데이터)이 있습니다 /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]

Arch 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변경 사항을 등록하기 위해 다시 실행 한 후 클라이언트에서 다시 마운트하려고 시도했지만 작동했습니다!


8

클라이언트가 볼 수 있도록 모든 마운트 하위 지점을 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) 

1
뿌리에 crossmnt?
meffect

2

정말이 작업을 원했지만 NFS 클라이언트 는 단일 마운트에 대한 클라이언트의 관점 에서 inode 수의 파일이 고유해야하기 때문에이 아이디어에 문제가있는 것 같습니다 .

문제는이 블로그 게시물 (자신이 아님)에 자세히 설명되어 있습니다. http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

파일 시스템을 별도로 마운트하고 함께 심볼릭 링크하기로 결정했습니다. 모든 NFS 클라이언트에서 작동합니다.


1
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
slm

0

참고 : 단일 사용자 만 활성화

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

서버 측

  • 리눅스 민트 18.3 실비아 32 비트
  • 커널 리눅스 4.4.0-138-generic i686
  • 아수스 eeepc

    $ 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 비트
  • 커널 리눅스 4.15.0-38-generic x86_64

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

1
이게 뭐야? 이 파일입니까? 많은 파일? 서식 도구 를 사용하여 명확하게 답변을 형식화하십시오. 답변이 질문에 어떻게 대답하는지 편집 하고 설명해 주시겠습니까?
terdon

(1) 당신의 말을 사용하십시오. (2) 아직 제공되지 않은이 제안은 무엇입니까?
G-Man, 'Reinstate

그것에 대한 사과.
Ed Iglehart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.