Ubuntu: Nfs Server 설치/설정

이글루스에 있던 글을 옮겨왔고, 살짝 수정했다.


MS 윈도우를 게임용으로 밖엔 쓰지 않아서 잘은 모르겠지만, 그외 모든 OS(리눅스, Android, iOS, macOS)에서 NFS 지원엔 별 문제가 없다. Android/iOS 에선 Nfs 자체 지원이 되지는 않지만, 적어도 nPlayer 라는 강력한 도구가 있어 내 사용 목적엔 아무런 제한이 없다. (MS 윈도우를 주로 쓰는 환경이라면 NFS 보다는 Samba 가 더 옳은 선택이라 생각한다.)

또, 기타 사용을 위해선 NextCloud 등을 설치하면 되므로 이 문제도 슬기롭게(?) 헤쳐갈 수 있다.

따라서, 내 선택은 NFS(Network File System) 다. 삼바와 비교했을 때 동일한 하드웨어 상황에서 월등한 성능(속도)을 볼 수 있었다.

  • 이렇게들 쓰는 지는 알 수가 없으나, 한 서버에 삼바/NFS 서버를 모두 설치해놓고, 경우에 따라 이 쪽, 저 쪽으로 연결해서 쓰면 될 것 같다. 이렇게 했을 때 얼만큼의 성능 저하가 일어나는 지는 모르지만.. 동시접속 수가 많은 것도 아니므로, 별 관계가 없으리라 생각한다.

이제 설치에 들어가본다. 물론, 환경은 우분투(서버)다.


설치

적어도 우분투 20.04 까지는 다음 명령으로 설치할 수 있다.

$ sudo apt install nfs-kernel-server

서버 설정

자세한 설정은 다른 글 참고.

Samba 의 smb.conf 와 비슷한 설정 파일은 /etc/exports 인데, 훨씬 간단하다.
자세한 옵션은 man page 를 참고하면 되긴 되는데.. (뭔 소린지 모를 말들이 많다. ^^)

설정은 이런 형식으로 해준다.

/공유할_디렉토리_위치 허용할IP/서브넷(옵션) 허용할IP/서브넷(옵션) 허용할IP/서브넷(옵션) ...

실 사용 예는 아래와 같다.

/mnt/Share/Video 192.168.0.0/255.255.255.255(rw,root_squash,no_subtree_check,async)


ip 대역은 꼭 써주지 않아도 된다. 보안을 위해서는 명시하는 것이 좋을 것 같긴 하다.
다음은, 필요한 옵션에 대한 대강의 설명이다. (자세한 것은 나도 모르기 때문에..)

  • rw : 읽기, 쓰기 권한 허용.
  • root_squash : 클라이언트의 root 가 서버의 root 로 행세하는 것을 막는다. 말 그대로 root 를 짓누르는(Squash) 것이다.
  • no_subtree_check : 이건 잘 개념이 오지 않는데, man page 에 이런 내용이 있다.

As a general guide, a home directory filesystem, which is normally exported at the root and may see lots of file renames, should be exported with subtree checking disabled. A filesystem which is mostly readonly, and at least doesn’t see many file renames (e.g. /usr or /var) and for which subdirectories may be exported, should probably be exported with subtree checks enabled.
간단하게 생각해서, rw 에는 no_subtree_check 이면 되는 것 같다.

  • async : sync 와 async 가 있는데, 이것은 한 파일이 동시에 열렸을 때에 어떻게 처리할 것인지에 대한 설정이다. 역시 복잡한 것은 넘겨버리고, sync 는 조금 느리고, async 는 반대. 그러나 동시 접속이 아닌 상황에서 sync 나 async 나 속도 차이는 없는 것 같다.

서버 설정은 이것으로 끝이고, /etc/exports 를 편집했다면 NFS 를 재시작 해줘야 한다.

$ sudo systemctl restart nfs-kernel-server
또는,
$ sudo systemctl restart nfs-server

둘다 같다.

$ ll /lib/systemd/system/nfs*
lrwxrwxrwx 1 root root  18 2020-06-17 21:42 /lib/systemd/system/nfs-kernel-server.service -> nfs-server.service
-rw-r--r-- 1 root root 861 2020-06-17 21:42 /lib/systemd/system/nfs-server.service

뭔가 오류가 발생할 수도 있는데, 그 때는 오류 메시지를 잘 읽어보고 옵션을 적절히 설정해야 한다.

클라이언트 설정

역시나 다른 글을 참고하고, 그냥 마운트보다는 Autofs 가 더 편했다. 왜냐? 서버가 늘 켜있지 않기 때문.

우분투에서도 기본적으로 NFS 는 설치되어 있지 않다. 일단 수동으로 mount 를 했을 때, Wrong File System type 어쩌고 하는 오류가 발생한다면 NFS 를 설치해야 한다.

$ sudo apt-get install nfs-common

마운트는 별다를 것이 없다.

$ sudo mount -t nfs 192.168.1.7:/mnt/share /mnt/local

이런 형식으로 해서 마운트가 잘되는지 확인해본다.

mount 명령으로 아무 문제가 없음을 확인했다면, /etc/fstab 에 넣어줄 차례다. 비슷한 형식으로 넣어주면 된다.

192.168.1.7:/mnt/share /media/local nfs noauto,user 0 0

noauto 는 부팅시에 연결하지 않겠다는 뜻이다. 네트웍이 잘 안될 수도 있고, 서버가 꺼져있을 수도 있으니 마운트 상황만 주고, 마운트는 원하는 때에 사용자가 직접 할 수 있게끔 한다.
noauto 이므로, user 선택사항을 반드시 줘서 root 가 아닌 일반 사용자도 마운트가 가능하게끔 한다.

그리고.. 가장 애매하고도 민감한 문제로 전송 속도에 관한 부분이 있다.

** 20.09 현재, 아래는 설정하지 않고 그냥 기본값으로 쓰고 있다. 별 차이가 없는 듯도 하고..

192.168.1.7:/mnt/share /mnt/local nfs noauto,user,rsize=65536,wsize=65536 0 0

이런 식으로 정해줄 수 있는데, 내가 시험해본 바에 의하면, 아무 것도 주지 않는 편이 제일 괜찮은 속도를 보여줬던 것 같다.


원 글은 몇가지 내용이 더 있지만, 지금은 별 필요없을 듯 하여 여기까지만 정리하기로 한다.

안녕하세요. 글 남겨주셔서 고맙습니다.