Skip to content

Network File System

네트워크 파일 시스템(Network File System, NFS)은 1984년에 썬 마이크로시스템즈가 개발한 프로토콜이다. 클라이언트 컴퓨터의 사용자가 네트워크 상의 파일을 직접 연결된 스토리지에 접근하는 방식과 비슷한 방식으로 접근하도록 도와 준다. 다른 수많은 프로토콜과 마찬가지로 ONC RPC 시스템을 기반으로 한다. 네트워크 파일 시스템은 RFC에 정의된 오픈 표준이므로 누구나 구현할 수 있다.

About

NFS(Network File System)은 용어 그대로 네트워크 기반의 파일시스템을 의미한다. 공유된 원격의 호스트 파일을 다른 리눅스 시스템이 로컬에서 사용할 수 있도록 구현한 방식이다. NFS v2 부터 현재 v4에 이르기 까지 널리 사용되어 왔으며, 손쉽게 원격의 파일 시스템을 공유할 수 있다는 점에서 편의성이 매우 높다.

하지만 편의성이 높은 만큼 보안에 대한 취약점도 고려해야 하기 때문에 전용 NFS 스토리지가 아니라면, Read Only 정도로 공유하며 사용하는 것이 좋다.

NFS를 사용하게 되면 Linux Server가 네트워크를 통해 다른 리눅스/운영체제 클라이언트와 디렉토리를 공유할 수 있다. NFS 서버는 해당 디렉토리를 외부로 보내고, NFS 클라이언트는 해당 디렉토리를 마운트 하는 형태이다. NFS는 현재 주로 v3,v4를 사용한다.

How to install

ubuntu일 경우

## nfs 관련 설치된 패키지가 있는지 확인
dpkg -l | grep nfs

apt-get -y install nfs-kernel-server

CentOS일 경우

## nfs 관련 설치된 패키지가 있는지 확인
rpm -qa | grep nfs

yum -y install nfs-utils

NFS v3 (1995년)

  • NFS version3는 Async방식의 Writed 모드를 지원
  • 64bit File Size의 Offset을 지원하므로 2GB 이상의 파일 액세스 가능
  • TCP/UDP Port 2049를 지원하지만 실제 IP Network에서 UDP 기반 Stateless 방식으로 연결됨
  • UDP 방식 전송으로 인해 신뢰성에 이슈가 있을 수 있음.

NFS v4 (2003년)

  • NFS version4는 rpcbind서비스가 필요없고 ACL 을 지원하며 Statuful 방식 운영이 가능함.
  • RHEL/CentOS 6 이상에서는 모두 지원하며, 기본 mounting 될 때 NFS v4가 기본으로 구성됨.
  • TCP 를 사용하기 때문에 신뢰성을 보장 받을 수 있음.
  • TCP Port 2049를 지원
  • 2010년 NFS v4.1 발표, 현재 NFS v4.2가 최신

NFS RPC 프로세스 및 주요서비스

  • rpc.statd: NFS 클라이언트와 서버간의 모니터링 프로토콜
  • rpc.mountd: NFS v3클라이언트의 마운트 요청을 서버 측에서 구현하는 NFS mount 데몬
  • rpc.idmapd: NFSv4 이름과 로컬 UID 및 GID 매핑
  • rpc.rquotad: 원격 사용자에 대한 사용자 할당량 정보 제공
  • rpcbind: RPC 프로그램 번호를 범용 주소를 변환
  • nfs-lock / rpc-statd : NFS 파일 Lock

NFS 주요 구성 파일

  • /etc/exports: 기본 구성 파일이며, 원격 호스트로 내보낼 파일 시스템을 제어하고 옵션을 지정
  • /etc/fstab: 시스템이 부팅될 때 NFS 디렉토리를 포함하여, 어떤 파일 시스템이 마운트 되지는 제어하는 데 사용
  • /etc/sysconfig/nfs: 필요한 RPC 서비스가 실행되는 포트를 제어하는 데 사용
  • /etc/hosts.allow, /etc/host.deny: TCP wrapper 기반으로 NFS 서버 접근 제어로 사용.

버전4와 이전 버전 비교

다음은 NFSv4와 NFS 버전 2 및 3 간의 차이점에 대한 간단한 요약 정보입니다.

  • NFS 버전 2 및 3 프로토콜은 Stateless인 반면 NFSv4 프로토콜은 상태를 도입합니다. NFSv4 클라이언트에 의한 오브젝트의 사용 정보는 서버에서 유지보수합니다. 열기, 잠금, 읽기 및 쓰기와 같은 NFSv4 프로토콜을 통한 조작은 상태 정보를 전달하여 클라이언트에 의한 오브젝트의 의도에 대해 서버에게 통지합니다. 그러면 서버는 동일한 오브젝트에 대해 사용 의도를 가지고 있는 다른 클라이언트와 관련된 정보를 클라이언트에 리턴할 수 있습니다. NFSv4 프로토콜에 의해 서버에서 지속적 열기를 사용하면 NFS 버전 2 또는 3 클라이언트에서 파일에 쓰는 동안 파일이 잠기게 되는 일부 경우를 방지합니다.
  • NFSv4 프로토콜에는 기본 프로토콜의 일부로 바이트 범위 잠금 및 공유 모드에 대한 지원이 포함되어 있습니다. NFSv4의 잠금은 클라이언트가 소유한 열기 및 잠금 상태를 유지하기 위해 NFSv4 클라이언트가 서버와의 연결을 유지하도록 요구하는 임대 기반입니다.
  • NFSv4 프로토콜은 복합 요청 형식을 도입합니다. NFSv4 클라이언트는 여러 단순 조작(예: LOOKUP, OPEN 및 READ)을 서버에 대한 단일 요청으로 결합할 수 있습니다. 단일 요청을 통해 NFSv4는 한 번의 네트워크 교환으로 복잡한 조작을 수행할 수 있습니다.
  • NFSv4 프로토콜은 이전 프로토콜 버전에 필요한 다른 메카니즘을 능가하는 향상된 보안 메카니즘을 제공합니다. IBM i는 기존 AUTH_SYS 보안뿐만 아니라 Kerberos 5 인증 및 데이터 보호에 대한 지원을 제공합니다. NFSv4에서 사용하는 보안 API를 통해 향후에 새 보안 메카니즘을 쉽게 추가할 수 있습니다.
  • NFSv4 프로토콜은 문자열 데이터의 표시를 표준화합니다. 프로토콜에서 사용하는 모든 문자열 데이터는 네트워크에서 UTF-8 형식으로 표시됩니다. 사용자 및 그룹 정보는 이전 버전에서처럼 숫자 값이 아닌 문자열 양식으로 클라이언트와 서버 간에 전달됩니다.
  • NFSv4 프로토콜은 이전 NFS 버전의 개별 구성요소 프로토콜을 단일 프로토콜 스펙으로 결합합니다. NFSv4 프로토콜의 단일 컨택 포인트를 통해 네트워크 방화벽에 대한 호환성이 좋아질 수 있습니다.
  • NFS 버전 4는 TCP와 같은 스트리밍 네트워크 전송 프로토콜에 대해 RPC 지원이 필요합니다. IBM i에서 제공하는 NFSv4 지원은 배타적으로 TCP를 사용합니다.

NFSv4 프로토콜에 대한 자세한 정보는 RFC 3530 http://www.ietf.org/rfc/rfc3530.txt의 내용을 참조하십시오.

보안 설정

  • /etc/exports 파일에 꼭 필요한 공유 디렉토리만 나열해야 한다.

Projects

erichough/nfs-server
A lightweight, robust, flexible, and containerized NFS server.
https://hub.docker.com/r/erichough/nfs-server/
https://github.com/ehough/docker-nfs-server

Network-attached storage (NAS)

See also

Favorite site

How to settings