[리눅스] NFS 서버 구축

목차

NFS(Network File System)는 네트워크로 연결된 컴퓨터 간에 디렉터리를 공유하기 위한 서버다. 클라이언트가 서버의 디렉터리를 마운트하면 마치 자기 디스크처럼 사용할 수 있다. 이 글에서는 CentOS 8 환경에서 NFS 서버를 구축하고, 클라이언트에서 마운트해 파일을 공유하는 전 과정을 단계별로 정리한다.

OS : CentOS 8

NFS란?

NFS는 네트워크를 통해 마운트된 디렉터리를 공유하는 방식이다. 다만 데이터 통신을 암호화하지는 않기 때문에 신뢰할 수 있는 내부 네트워크가 아니라면 기본적으로 권장되지 않는다.

윈도우는 네트워크로 연결된 컴퓨터끼리 폴더(디렉터리)를 GUI로 쉽게 공유할 수 있지만, 리눅스는 대부분 명령으로 작업하기 때문에 윈도우보다 다소 복잡한 과정을 거친다.

NFS 서버 구축 과정 한눈에 보기

  1. NFS 서버/클라이언트 OS 각각에 nfs-utils 패키지가 설치되었는지 확인한다.
  2. /etc/exports에 공유할 디렉터리와 접근을 허가할 컴퓨터, 접근 권한을 지정한다.
  3. nfs-server 서비스를 실행한다.
  4. 클라이언트에서 showmount 명령으로 서버에 공유된 디렉터리가 있는지 확인한다.
  5. 클라이언트에서 mount 명령으로 서버의 공유 디렉터리를 마운트한다.

이 글의 예시에서는 클라이언트의 ~/myShare 디렉터리에 접근하면 자동으로 NFS 서버의 /share 디렉터리에 접근하는 효과를 내도록 구성한다.

NFS 서버 클라이언트 작동 원리

서버(NFS)
공유 디렉터리 : /share
Client
마운트 디렉터리 : ~/myShare

NFS 서버 설정

nfs-utils 패키지 확인

먼저 nfs-utils 패키지가 설치되었는지 확인한다.

[root@localhost ~]# rpm -qa nfs-utils
nfs-utils-2.3.3-14.el8.x86_64

/etc/exports에 공유 디렉터리 등록

vi나 gedit으로 /etc/exports 파일을 열고 공유할 디렉터리를 추가한 뒤 저장한다. 형식은 공유디렉터리 접근허용IP(권한옵션)이다.

/share    192.168.111.*(rw, sync)

이어서 /share 디렉터리를 생성하고, chmod 명령으로 접근 권한을 707로 설정한 뒤, 테스트용 파일을 미리 복사해 둔다.

[root@localhost ~]# mkdir /share
[root@localhost ~]# chmod 707 /share
[root@localhost ~]# cp /boot/vm* /share/
[root@localhost ~]# ls /share/
vmlinuz-0-rescue-5866bf09495b4feb9c141b603ae87873 vmlinuz-4.18.0-80.el8.x86_64
[root@localhost ~]#

nfs-server 서비스 실행

nfs-server 서비스를 시작하고 부팅 시 자동으로 가동되도록 등록한다.

[root@localhost ~]# systemctl restart nfs-server.service
[root@localhost ~]# systemctl enable nfs-server.service
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.

exportfs -v 명령으로 /share 디렉터리가 클라이언트에서 마운트 가능한 상태로 export 되었는지 확인한다.

[root@localhost ~]# exportfs -v
/share 192.168.111.*(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

방화벽이 NFS 통신을 막을 수 있으므로, 테스트를 위해 잠시 방화벽을 중지한다. (실제 운영 환경에서는 방화벽을 끄는 대신 NFS 포트를 허용하는 것이 안전하다.)

systemctl stop firewalld

NFS 클라이언트 설정

공유 디렉터리 확인

클라이언트에도 nfs-utils 패키지가 설치되어 있어야 한다. 설치 여부를 확인한다.

rpm -qa nfs-utils

showmount -e 명령으로 서버에 공유된 디렉터리 목록을 확인한다.

[root@localhost ~]# showmount -e 192.168.111.100
Export list for 192.168.111.100:
/share 192.168.111.*

서버 디렉터리 마운트

마운트 지점이 될 myShare 디렉터리를 만들고, 서버의 /share 디렉터리를 마운트한 뒤 내용이 보이는지 확인한다.

[centos@localhost ~]$ mkdir myShare
[centos@localhost ~]$ su -c 'mount -t nfs 192.168.111.100:/share myShare'
암호:
[centos@localhost ~]$ ls -l myShare/
합계 15384
-rwxr-xr-x. 1 root root 7872760 3월 22 15:48 vmlinuz-0-rescue-5866bf09495b4feb9c141b603ae87873
-rwxr-xr-x. 1 root root 7872760 3월 22 15:48 vmlinuz-4.18.0-80.el8.x86_64

파일 공유 확인

클라이언트에서 마운트한 디렉터리에 파일을 복사해 본다.

[centos@localhost ~]$ cp /boot/vmlinuz-4* ~/myShare/testfile

서버에서 /share 디렉터리를 확인하면 클라이언트가 복사한 testfile이 그대로 보인다. 클라이언트의 ~/myShare 디렉터리가 서버의 /share 디렉터리에 마운트되어 파일이 실시간으로 공유되는 것이다.

[root@localhost ~]# ls /share/
testfile vmlinuz-4.18.0-80.el8.x86_64
vmlinuz-0-rescue-5866bf09495b4feb9c141b603ae87873

부팅 시 자동 마운트 설정 (/etc/fstab)

재부팅 후에도 마운트가 유지되도록 /etc/fstab에 등록한다. su 명령으로 root 사용자로 전환한 뒤, vi나 gedit으로 /etc/fstab 파일을 열고 맨 아래 줄에 다음 내용을 추가한다.

vi /etc/fstab
192.168.111.100:/share /home/centos/myShare nfs defaults 0 0

클라이언트를 재부팅한 뒤 자동으로 마운트되었는지, 그리고 읽기·쓰기 작업이 양쪽에서 동기화되는지 확인한다. 클라이언트에서 파일을 만들면 서버에도 동일하게 반영되어야 한다.

클라이언트

[centos@localhost ~]$ touch myShare/newfile
[centos@localhost ~]$ ls myShare/
newfile vmlinuz-0-rescue-5866bf09495b4feb9c141b603ae87873
testfile vmlinuz-4.18.0-80.el8.x86_64

서버

[root@localhost ~]# ls /share/
newfile vmlinuz-0-rescue-5866bf09495b4feb9c141b603ae87873
testfile vmlinuz-4.18.0-80.el8.x86_64

정리

지금까지 CentOS 8에서 NFS 서버를 구축하고 클라이언트에서 마운트해 파일을 공유하는 전 과정을 살펴봤다. 핵심은 서버의 /etc/exports에 공유 디렉터리와 접근 권한을 지정하고, 클라이언트가 mount 명령으로 이를 마운트하는 것이다. 부팅 시 자동 마운트가 필요하면 /etc/fstab에 등록한다. 윈도우와의 파일 공유가 필요하다면 Samba 서버 구축 글을 함께 참고하면 좋다.

Reference

💬 댓글 0

💬 댓글을 남기려면?
첫 댓글을 남겨보세요 ✨

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요