NFS(Network File System)는 네트워크로 연결된 컴퓨터 간에 디렉터리를 공유하기 위한 서버다. 클라이언트가 서버의 디렉터리를 마운트하면 마치 자기 디스크처럼 사용할 수 있다. 이 글에서는 CentOS 8 환경에서 NFS 서버를 구축하고, 클라이언트에서 마운트해 파일을 공유하는 전 과정을 단계별로 정리한다.
OS : CentOS 8
NFS란?
NFS는 네트워크를 통해 마운트된 디렉터리를 공유하는 방식이다. 다만 데이터 통신을 암호화하지는 않기 때문에 신뢰할 수 있는 내부 네트워크가 아니라면 기본적으로 권장되지 않는다.
윈도우는 네트워크로 연결된 컴퓨터끼리 폴더(디렉터리)를 GUI로 쉽게 공유할 수 있지만, 리눅스는 대부분 명령으로 작업하기 때문에 윈도우보다 다소 복잡한 과정을 거친다.
NFS 서버 구축 과정 한눈에 보기
- NFS 서버/클라이언트 OS 각각에 nfs-utils 패키지가 설치되었는지 확인한다.
- /etc/exports에 공유할 디렉터리와 접근을 허가할 컴퓨터, 접근 권한을 지정한다.
- nfs-server 서비스를 실행한다.
- 클라이언트에서 showmount 명령으로 서버에 공유된 디렉터리가 있는지 확인한다.
- 클라이언트에서 mount 명령으로 서버의 공유 디렉터리를 마운트한다.
이 글의 예시에서는 클라이언트의 ~/myShare 디렉터리에 접근하면 자동으로 NFS 서버의 /share 디렉터리에 접근하는 효과를 내도록 구성한다.
![[리눅스] NFS 서버 구축 NFS 서버 클라이언트 작동 원리](https://nuschool.cc/wp-content/uploads/2024/03/image-1-1024x391.png)
서버(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