[RedHat] NFS 서버 버전 관리 가이드

 

이번 글에서는 NFS 서버 버전에 대해서 다룹니다. NFS 서버 구성이 궁금하신 분들은 NFS 서버 구성 이전 글을 참고해주세요.

 

NFS 버전 할당 방식

NFS 사용 시 버전은 특별한 지정이 없을 경우, 기본적으로 서버와 클라이언트의 협상을 통해 결정됩니다. 이 과정에서 서버와 클라이언트가 각각 지원하는 가장 높은 버전이 채택됩니다. 클라이언트가 마운트를 시도할 때, 자신이 지원하는 최신 버전으로 협상을 시작합니다. 만약 이 버전이 서버와 맞지 않으면, 버전을 한 단계씩 버전을 낮추면서 다시 협상을 시도하게 됩니다. 이런 과정을 거쳐 최종적으로 두 엔드 포인트가 모두 지원하는 가장 높은 버전으로 연결이 이루어지는 것입니다.

RHEL(Red Hat Enterprise Linux)이 지원하는 NFS 버전을 확인하려면 man 페이지를 참조하실 수 있습니다. 이를 통해 시스템에서 사용 가능한 NFS 버전을 확인해 볼 수 있습니다.

== RHEL6.9 ==

nfsvers=n      The  NFS  protocol version number used to contact the server’s NFS service.  If the server does not support the requested ver-
sion, the mount request fails.  If this option is not specified, the client negotiates a suitable  version  with  the  server,
 trying version 4 first, version 3 second, and version 2 last.
== RHEL7.1 ==

nfsvers=n      The  NFS  protocol  version number used to contact the server's NFS service.  If the server
does not support the requested version, the mount request fails.  If  this  option  is  not
specified,  the  client  negotiates  a  suitable  version with the server, **trying version 4**
first, version 3 second, and version 2 last.

RHEL 6.9와 7.1 두 버전의 man 페이지를 확인해 보면, 두 버전 모두 NFS 4버전을 최신 지원 버전으로 채택하고 있으며, 이전 버전인 NFS 2와 3도 함께 지원하고 있습니다. 이 정보는 NFS 연결 시 중요한 의미를 갖습니다. 예를 들어, 클라이언트가 RHEL 7.1을 사용하고 있다고 가정해 봅시다. 이 경우, 서버에서 NFS 4.1과 같은 더 높은 버전을 지원하더라도 실제 연결은 이루어질 수 없습니다. 그 이유는 클라이언트의 최대 지원 버전이 NFS 4로 제한되어 있기 때문입니다.

결과적으로, NFS 연결 시 실제로 사용되는 버전은 항상 서버와 클라이언트가 공통으로 지원하는 버전 중 가장 높은 것으로 결정됩니다. 이러한 메커니즘은 시스템 간 호환성을 보장하면서도 가능한 최신 기능을 활용할 수 있게 해주는 중요한 역할을 합니다.

아래 RHEL 7.6 버전을 보면 NFS 4.1 버전 부터 협상을 시도한다는 내용이 확인됩니다.

== RHEL7.6 ==

nfsvers=n      The NFS protocol version number used to contact the server's NFS service.  If the server does not support the requested version, the mount
request fails.  If this option is not specified, 
the client tries version 4.1 first, then negotiates down until it finds  a  version  sup
ported by the server.

각 커널마다 지원하는 NFS 버전이 다르다는 점은 주목할 만한 사항입니다. NFS 마운트의 자동 협상 방식은 이러한 다양한 버전 환경에서 사용자들에게 큰 편의를 제공합니다. 마운트 시 버전을 일일이 신경 쓰지 않아도 되는 점입니다.

다만 이런 편리한 기능도 단점이 존재하기 마련인데요. NFS가 버전이 업데이트되면서 각종 버그 픽스 와 성능 향상이 이루어졌지만 어떤 제품이든 업데이트를 지속할수록 버전 간의 호환성 문제는 존재하게 됩니다. NFS v3과 v4  사이에서 종종 문제가 발생하곤 합니다. 예를 들어, v3만을 지원하던 프로그램이 시스템 업데이트나 마이그레이션 등 어떤 이유로 인해 v4로 마운트 되어 장애가 나는 경우를 가끔 볼 수 있습니다.

 

NFS 버전 지정

NFS를 사용할 때 가장 중요한 것은 현재 사용 중인 NFS가 어떤 버전으로 마운트 되어 있는지, 그리고 어떻게 버전을 변경할 수 있는지 확인하는 능력입니다.

NFS 버전은 마운트 시점에 결정되며, 서버와 클라이언트가 지원하는 최신 버전으로 선택된다고 앞서 설명드렸습니다. 따라서 버전을 지정하는 방법은 서버 측과 클라이언트 측 양쪽에서 모두 가능합니다. 예를 들어, v3 버전을 사용해야 하는 상황이라면 서버에서 v4를 비활성화하고 v3만 활성화하면 됩니다. 이 경우 클라이언트가 어떤 시도를 하더라도 v3만 사용할 수 있게 됩니다. 하지만 이 방법에는 단점이 있습니다. 서버에서 여러 디렉터리를 호스팅하고 있을 때, v4를 사용하고 싶은 다른 클라이언트에게는 문제가 될 수 있기 때문입니다. 이러한 이유로 대부분의 경우에는 클라이언트에서 마운트할 때 버전을 지정하는 방법을 많이 사용합니다. 이 방법이 더 유연하고 개별 클라이언트의 요구사항을 충족시키기 쉽기 때문입니다.

서버에서 특정 NFS 버전을 비활성화하는 방법과 클라이언트에서 버전을 지정하는 두 가지 방법을 자세히 살펴보도록 하겠습니다. 이 두 가지 방법을 이해하면 다양한 상황에서 NFS 버전을 효과적으로 관리할 수 있을 것입니다.

 

환경

Red Hat Enterprise Linux 7

Red Hat Enterprise Linux 8

Red Hat Enterprise Linux 9

 

NFS 서버에서 4버전 비활성화하기

비활성화하기 전에 현재 서버에서 어떤 버전이 지원되는지 확인합니다. 아래 방법으로 지원되는 버전을 확인하기 위해서는 NFS 서버가 기동 중이어야 합니다. 아직 기동이 되어 있지 않다면 다음 명령어를 실행합니다.

# systemctl start nfs-server

1. 현재 NFS 서버 버전 확인하기

[root@server ~]# cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

위 결과에서 “+” 기호는 지원되는 버전을, “-” 기호는 지원되지 않는 버전을 나타냅니다. 위 예시에서는 NFSv2를 제외한 모든 버전이 활성화되어 있습니다.

 

 

2. NFS 설정 파일 수정하기

NFSv4를 비활성화하려면 NFS 설정 파일을 수정해야 합니다

[root@server ~]# vim /etc/nfs.conf
...
[nfsd]
...
# vers3=y
# vers4=y
# vers4.0=y
# vers4.1=y
# vers4.2=y
 vers4=n
 vers4.0=n
 vers4.1=n
 vers4.2=n
...

[nfsd] 섹션에서 위와 같이 vers4 관련 항목을 모두 ‘n’으로 설정합니다.

 

 

3. NFS 서비스 재시작

변경사항을 적용하기 위해 NFS 서비스를 재시작합니다.

[root@server ~]# systemctl restart nfs-server

 

4. 변경 사항 확인하기

NFSv4가 비활성화되었는지 다시 확인합니다:

[root@server ~]# cat /proc/fs/nfsd/versions
-2 +3 -4 -4.0 -4.1 -4.2

이제 NFSv3만 활성화된 것을 확인할 수 있습니다.

 

5. 마운트 테스트

NFSv4버전을 비활성화 한 서버에 마운트를 진행해 봅니다.

[root@client ~]# mount -t nfs 192.168.155.145:/test /test

[root@client ~]# mount | grep test
192.168.155.145:/test on /test type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.155.145,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.155.145)

마운트 상태를 확인하면 다음과 같이 NFSv3로 마운트 된 것을 볼 수 있습니다.

 

 

주의: 4버전을 강제로 마운트 시도하게 되면 마운트가 되지 않습니다.

# mount -t nfs -o vers=4.1 192.168.155.145:/test /test
mount.nfs: Protocol not supported

 

클라이언트에서 마운트 버전 변경

클라이언트는 서버가 지원하는 버전 중에서 내가 원하는 버전을 지정하여 마운트 할 수 있습니다. 아래 일시적 마운트와 /etc/fstab 사용하는 두 가지 방법을 보도록 하겠습니다.

 

mount 명령어 사용 (일시적)

  • 4.1버전으로 마운트 하고 싶은 경우 아래와 같이 옵션에 버전을 지정합니다.
[root@client ~]# mount -t nfs -o vers=4.1 192.168.155.145:/test /test

[root@client ~]# mount | grep test
192.168.155.145:/test on /test type nfs (rw,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.155.145,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.155.145,_netdev)

  • 3버전 마운트 역시 마찬가지 입니다.
[root@client ~]# mount -t nfs -o vers=3 192.168.155.145:/test /test

[root@client ~]# mount | grep test
192.168.155.145:/test on /test type nfs (rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.155.145,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.155.145,_netdev)

 

fstab 사용 (영구적)

이번에는 재부팅 후에도 유지되는 영구적인 방법을 확인해 보겠습니다.

먼저, nfs 설명 페이지를 확인해 보면 다음가 같은 내용을 볼 수 있습니다.

# man nfs
...
       vers=n         This option is an alternative to the nfsvers option.  It is included for compatibility
                      with other operating systems
...
  • fstab 설정에서는 vers 옵션을 이용해 원하는 버전을 지정합니다.
# vi /etc/fstab
...
192.168.155.145:/test   /test                   nfs     defaults,vers=3         0 0
...
  • 설정 후에는 마운트 테스트를 진행합니다.
[root@client ~]# mount /test

  • 확인
[root@client ~]# mount | grep test
192.168.155.145:/test on /test type nfs (rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.155.145,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.155.145,_netdev)

이렇게 NFS 클라이언트에서 마운트 버전을 변경하는 방법을 알아봤습니다. 일시적으로 할 때는 mount 명령어를, 영구적으로 설정하고 싶을 때는 fstab을 사용하면 됩니다. 환경에 맞게 적절히 선택해서 사용할 수 있습니다.

 

마치며

RedHat 환경에서의 NFS 서버 버전 관리에 대해 자세히 살펴보았습니다. NFS 버전 할당 방식부터 시작해 각 커널 별 지원 버전, 그리고 실제 버전 지정 방법까지 다루었습니다. 특히 NFS v3와 v4 사이에서 발생할 수 있는 문제점들을 인지하고, 이를 해결하기 위한 방법들을 살펴보았습니다. 중요한 점은 우리가 사용하는 NFS의 버전을 정확히 알고, 필요에 따라 버전을 변경할 수 있는 능력입니다.

실무에서는 대부분 클라이언트에서 마운트 시 버전을 지정하는 방법을 선호합니다. 이는 서버의 다양한 클라이언트 요구사항을 충족시키면서도 유연성을 제공하기 때문입니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top