1. NFS 서버의 개요


■ 서버에서의 설치 및 설정

NFS(Network File System)는 썬 마이크로 시스템사에서 리눅스 시스템 간 파일의 공유를 목적으로 개발한 프로토콜이다. NFS는 TCP/IP 네트워크 속해 있는 리눅스 시스템의 파일 시스템 일부를 마운트하여 마치 자신의 디렉토리 처럼 사용 할 수 있도록 해준다.

윈도우는 간단하지만, 리눅스는 다소 복잡한 과정을 거치게 된다.

서버는 클라이언트에 의해 공유될 파일을 유지하기 위한 디렉토리(/share)를 생성하며, 이를 공유 디렉토리라 한다.
클라이언트는 서버의 /share 디렉토리를 자신의 /mnt/myshare 디렉토리에 마운트 한다. 그래서 마운트된 디렉토리에 접근함으로써 /share를 사용할 수 있게 된다. 예를 들어,서버 관리자가 /share 디렉토리에 생성된 파일을 사용할 수 있다.

NFS는 보안을 위해 서버는 NFS 설정에서 접근 가능한 클라이언트의 IP주소를 지정하며, 지정된 클라이언트만이 NFS를 사용해 서버의 공유 디렉토리에 접근 할 수 있다.

NFS를사용하기 위해서는 서버와 클라이언트가 모두 TCP/IP 네트워크에 존재해야 한다. NFS는 RPC(remote procedure call)을 사용한다. 서버는 먼저 공유 디렉토리 (/share)를 띄어 놓고 클라이언트의 마운트 요청을 기다린다. 이를 익스포팅(exporting) 이라 한다. 클라이언트가 RPC를 통해 공유 디렉토리의 마운트를 요청하면 서버는 클라이언트의 마운트 요청을 허가함으로써 NFS 서비스가 이루어진다.

 

 

. showmount : NFS 마운트 정보를 보여준다.
. nfsstat : NFS 서버와 클라이언트의 상태를 보여준다.
. nhfsstone : nfs의 성능을 벤치마크 한다.


NFS 클라이언트는 /etc/fstab 파일에 서버로부터 마운트할 디렉토리에 대한 정보를 가지고 있다.

. rpc.mountd는 클라이언트에서 작동하는 데몬이며, 마운트 요청을 서버에 보내는 데몬이다.
. rpc.nfsd 는 서버에서 작동하는 데몬이며, 파일시스템 요청을 처리한다.

 

2. 서버에서의 설치과정


1. nfs-util 설치확인

[root@localhost]#rpm -qa | grep nfs-util
 : 있으면 진행하고 없으면 yum으로 명령을 사용해 설치한다.
 

 

2. 공유
디렉토리 생성 및 허가권 변경

#mkdir /nfs_share
chmod 707 /nfs_share

* nfs 설치후 정상적으로 동작하는지 확인하기 위해 디렉토리내 test2라는 파일을 생성한다.

 

 

3. NFS를 사용해, 공유 디렉토리로 접근 가능한 클라이언트 지정

#vi /etc/exports
/nfs_share [클라이언트 IP](rw,sync)
                                         [옵션]
 

옵션 의미
ro 서버의 공유 디렉토리를 읽기 전용(read only) 모드로 마운트 한다.
rw 서버의 공유 디렉토리를 읽기 쓰기 가능(read Write)모드로 마운트 한다.
sync 마운트 디렉토리에 쓰기와 같은 연산이 발생할 경우, 공유 디렉토리와 마운트 디렉토리를 즉시 동기화 한다. 즉, 공유 디렉토리와 마운트 디렉토리의 내용을 동기화하여 NFS사용 도중 서버가 다운되거나 재부팅 현상에 의한 데이터의 불일치성을 최소화 한다. 만약, 즉시 동기화를 수행 하지 않고자 할 경우 async 옵션을 사용한다.
no_subtree_check 공유 디렉토리는 서브디렉토리를 가질 수 있다. 클라이언트가 특정 파일을 요청하면 서버는 subtree checking이라는 루틴을 실행해 서브디렉토리까지 탐색하여 클라이언트가 요청한 파일의 위치를 확인한다. 이 옵션을 사용하면 서브디렉토리를 조사하는 루틴을 실행하지 않는다. 만약, 서브 디렉토리까지 검색하고자 할 경우 subtree_check 옵션을 사용한다
no_root_squash 사용자가 클라이언트 시스템의 root계정으로 접근했을 경우, 서버에서도 root 권한을 가지게 한다. 만약, 서버에서 nobody 권한으로 지정하고자 할 경우 root_squash 옵션을 지정한다.

 
4.  /etc/sysconfig/nfs 파일을 통해 RPC에 필요한 포트 번호 지정

RPC를 통해 NFS를 사용하기 위해서는 다음과 같은 데몬이 반드시 필요하다.

데몬  역활

기본포트

rpc.portmapper rpc를 사용하는 프로그램을 지정된 포트에 맵핑시킨다. 즉, 클라이언트에 서버의 서비스 포트 번호를 전달하여 RPC 통신이 이루어지게 한다. 111
rpc.mountd NFS 클라이언트가 마운트를 요청하면 /etc/exports 파일에서 설정된 내용에 따라 마운트요청을 처리한다. 유동
rpc.nfsd rpc.mountd 데몬에 의해 마운트가 이루어지면 마운트된 공유 디렉토리에 읽고 쓰는 등의 작업을 수행하게 해준다 2049
rpc.lockd 파일 잠금을 통해 여러 사용자가 동시에 한 파일을 수정하는 것을 방지한다.
유동
rpc.statd rpc.lockd와 함께 작동하면서 NFS서버가 비정상적으로 종료되었거나 리부팅 했을 경우 복구하는 역활을 한다.
유동
rpc.rquotad NFS 파일 시스템을 마운트한 로컬 사용자에 대해 quota를 처리한다.
유동

서버 방화벽을 사용하지 않을 경우 유동적인 포트 번호의 사용은 문제가 되지 않지만
서버의 방화벽이 설치되어있을 경우, 유동적인 포트번호는 방화벽에 의해 접근이 차단된다.
따라서, 이경우 접속 포트를 유동에서 고정으로 변경해야 한다.

 

일반적으로 rpc.statd 데몬을 4000번, rpc.lockd 데몬은 4001번, rpc.mountd 데몬은 4002번,
rpc.rquotad 데몬은 4003번으로 고정한다.

#vi /etc/sysconfig/nfs
STATD_PORT=4000
LOCKD_TCPPORT=4001
LOCKD_UPPORT=4001
MOUNTD_PORT=4002
RQUOTAD_PORT=4003

5.방화벽 설정

RPC에 필요한 데몬들이 사용하는 포트 번호를 방화벽에 등록한다.


6. 서버의 재시작

#service nfs start
#/etc/init.d/nfslock restart


3. 클라이언트에서의 설정과정

1. 설치확인
#rpm -qa | grep nfs-util

2. service 명령을 사용해 nfs 서버를 시작한다.
service nfs start

3. showmount 명령을 사용해 nfs서버에 공유된 디렉토리 정보를 확인한다.
showmount -e [서버IP]

4.클라이언트의 마운트해서 사용할 디렉토리를 생성한다.
 #mkdir share_client

5.클라이언트 시스템 서버의 공유 디렉토리를 마운트해서 사용할 디렉토리를 마운트 한다.
mount -t nfs [서버IP]:/nfs_share /root/share_client/
                               (NFS디렉토리)

6. 정상적으로 마운트가 이루어 졌다.
  cd share_clinet/