[Linux] nfs mount 하는 방법

건미누·2025년 7월 21일

인프라

목록 보기
4/4
post-thumbnail

nfs가 필요한 이유

서버의 수가 많아지고 여러 서버에서 공통으로 사용해야하는 파일이 있는 경우, 공유 스토리지가 없다면 각 서버마다 파일을 업로드 해줘야한다. 추가로 서비스 운영 간 사용되는 동적파일의 생성 및 수정이 이루어진다면 필요한 모든 서버로 TCP, SFTP 연결이 이루어져야하는데 이건 꽤나 불필요하고 번거로운 과정이다.

실제로 nfs로 공유 스토리지를 설정해주는 프로젝트 사이트가 있고, 그렇지 않은 사이트가 있는데 인프라 구성을 배제하고 단순 작업 효율성만 보았을 때는 nfs 설정된 곳이 좋았다.

하지만 나는 nfs를 구성하는 방법을 잘 모른다.
그래서 Hyper-V를 사용해 두 서버 간 공유되는 스토리지를 만드는 방법을 알아보고자 한다.


nfs 마운트 방법

설치 환경

nfs1 ip		: 172.25.67.23		# Client 서버
nfs2 ip		: 172.25.71.183		# Export 서버

OS			: Rocky Linux 9.6
권한		: root

NFS 서버 실행

우선 nfs를 사용하기 위해서 nfs-utils를 설치해야한다. 네트워크가 되는 환경에서는 yum을 사용하여 설치하면 되지만 종속된 꾸러미가 많아서 폐쇄환경에서 직접설치하기에는 번거로워 보인다.

# Export서버, Client서버에 모두 설치

yum install nfs-utils

nfs-utils를 설치 후 Export 서버의 /etc/exports 파일에 아래와 같이 작성한다.

# Export 서버만 실행

vi /etc/exports

# 입력: `공유 디렉토리명` `접근 가능한 클라이언트 주소`(공유 옵션)
/home/oomuiw/share 172.25.67.23/20(rw,sync)
  • 공유 옵션
    • ro : 읽기 권한만 부여 (default)
    • rw : 읽기 쓰기 권한 부여
    • ecure : 클라이언트 마운트 요청 시 포트를 1024 이하로 설정
    • noaccess : 액세스 거부
    • root_squach : 클라이언트 root로 접근 시 anonymous uid/gid로 변경 (default)
    • no_root_squash: 클라이언트의 root 접근을 허용
    • sync : 파일시스템이 변경되면 즉시 동기화

이후 클라이언트를 추가로 등록해주는 경우, 등록 후 exportfs -r명령을 실행하면 NFS 서버를 재실행하지 않고 추가된 클라이언트를 적용할 수 있다.

방화벽 설정 확인

단순 테스트 및 설정만 해보고자 한다면 firewalld와 같은 서비스를 중지 후 사용하면 될테지만, 서비스 운영을 하고자 한다면 방화벽이 있는 상태여야 한다. firewalld에 다음과 같이 설정하지 않으면 이후 클라이언트 측에서 showmount -e {nfs1서버}로 조회하더라도 마운트 내용을 가져오지 못한다.

# Export 서버만 실행
# 서비스를 firewalld에서 영구적으로 허용

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-serivce=mountd

3가지 서비스를 모두 등록해야 nfs 디렉토리를 공유할 수 있다.

# Export 서버만 실행

systemctl start nfs-server

참조한 블로그에는 rpcbindnfs, chkconfig를 동작하라고 되어있는데, 이는 nfsv3 이하에서는 NFS 서비스를 사용할 때 포트가 동적으로 할당되기 때문에 클라이언트가 정확한 포트를 알지 못한다. 이를 해결하기 위해 rpcbind사용했지만 nfsv4이상 부터는 port 2049를 사용하기 때문에 사용하지 않아도 된다.

서버가 지원하는 NFS 버전 확인 방법

rpcinfo -p localhost

program vers proto   port  service
...
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100227    3   tcp   2049  nfs_acl
...

rpcinfo -p를 확인 했을 때, 3,4버전의 nfs를 모두 지원하는 것을 확인할 수 있다.
클라이언트 측에서 nfsv4이상을 사용하면 rpcbindchkconfig를 사용하지 않아도 된다.

클라이언트 nfs 버전 확인 방법

 nfsstat -m
/mnt/share from 172.25.71.183:/home/oomuiw/share
 Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.67.23,local_lock=none,addr=172.25.71.183
  • vers=4.2 이므로 rpcbindchkconfig를 사용하지 않아도 됨.

클라이언트 설정

서버에 공유된 디렉토리 확인

# showmount -e 공유서버명
showmount -e 172.25.71.183

Export list for 172.25.71.183:
/home/oomuiw/share 172.25.67.23/20

설정을 올바르게 했다는 전제하에 마운팅 포인트가 조회되지 않는다면 방화벽이나 네트워크 통신여부를 의심해야한다.

공유된 디렉토리를 자신의 디렉토리에 마운트

# Export 서버(172.25.71.183)의 /home/oomuiw/share와 연결할 디렉토리 생성

mkdir /mnt/share

# 마운트
# mount -t nfs `공유서버명:공유디렉토리명` `연결디렉토리`
mount -t nfs 172.25.71.183:/home/oomuiw/share /mnt/share

# 연결 확인
df -h

Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   4.0M     0  4.0M   0% /dev
tmpfs                      854M     0  854M   0% /dev/shm
tmpfs                      342M  4.9M  337M   2% /run
/dev/mapper/rl-root         70G  3.0G   68G   5% /
/dev/sda1                  960M  330M  631M  35% /boot
/dev/mapper/rl-home        125G  925M  125G   1% /home
tmpfs                      171M     0  171M   0% /run/user/0
172.25.71.183:/home/share  125G  925M  125G   1% /mnt/share
tmpfs                      171M     0  171M   0% /run/user/1000

# fstab에 등록하여 재부팅 시 자동 마운트
vi /etc/fstab

# `공유서버명:공유디렉토리명` `연결 디렉토리` nfs default 0 0
172.25.71.183:/home/oomuiw/share       /mnt/share      nfs     defaults        0 0

이렇게 연결까지 끝나면 nfs1에서 생성한 파일이 nfs2연결디렉토리에서 조회되는 것을 확인할 수 있다.

연결 디렉토리에서 파일 생성 및 조회

# nfs1 서버에서 파일 생성
[root@nfs1 /mnt/share]# touch test3
[root@nfs1 /mnt/share]# ll
합계 0
-rw-r--r--. 1 oomuiw oomuiw 0  721 10:34 test1
-rw-r--r--. 1   test   test 0  721 10:34 test2
-rw-r--r--. 1 nobody nobody 0  721 14:32 test3

# nfs2 서버에서 디렉토리 조회
[root@nfs2 /home/oomuiw/share]# ll
합계 0
-rw-r--r--. 1 oomuiw oomuiw 0  721 10:34 test1
-rw-r--r--. 1   1001   1001 0  721 10:34 test2
-rw-r--r--. 1 nobody nobody 0  721 14:32 test3

공유 스토리지 권한

마운트 된 서버는 따로 /etc/exports에 설정하지 않으면 ro, root_squach를 기본 설정으로 가지게 된다. 위의 파일 생성 및 조회 결과를 보면 nfs1서버와 nfs2서버에서 확인되는 권한이 다르다.

root 권한

root_squach로 인해 root접근을 허용하지 않게되므로 anonymous uid/gid인 nobody로 바뀌게 된다.

사용자 권한

사용자 권한의 경우 2가지 경우로 나뉘게 된다.

  1. nfs1, nfs2서버 모두 있는 사용자인 경우 ex) oomuiw

    두 서버 모두 존재하는 사용자이므로 소유권이 그대로 oomuiw로 이루어지게 된다.

  2. nfs1서버에는 있지만 nfs2서버에는 없는 사용자인 경우 ex) test

    nfs1에만 사용자가 있는 2의 경우에는 nfs2서버에서는 알지 못하기 때문에 nfs1서버에서 id값으로 할당된 1001으로 조회된다.


참조

Linux nfs mount(마운트) 방법

profile
꺾여도 해야지

0개의 댓글