본문 바로가기

IT 관련정보/리눅스

리눅스 기본 이론(12) - NFS

[NFS란?]

리눅스와 리눅스 사이에 파일을 공유하는 서버로, Network File System 의 약어로

썬마이크로시스템사에서 개발된 TCP/IP 프로토콜로 리눅스 운영체제간에 파일을 

상호 공유하고자 할 때 흔히 사용되는 서비스이다.


NFS는 서버에 의해 파일시스템이 마운트되는 것이 아니라, 클라이언트에 의해서 

서버의 파일시스템이 마운트되어 클라이언트가 서버의 파일시스템을 

자신의 파일시스템처럼 사용하는 것이 주된 특징이다.


NFS 서버는 웹서버를 분산하여 서버끼리 데이터를 동기화시키고자 할 때 사용될 수 있으며, 원격 서버의 특정 디렉토리를 로컬 디렉토리로 마운트시켜 서버의 파일을 공유하는데 사용될 수 있다.

또한 CD/DVD-ROM 드라이브가 없는 시스템에서 CentOS를 비롯한 리눅스 배포한을 네트워크 상으로 설치하고자 할 때도 유용하게 사용된다.




[용어정리]


- exporting : NFS 클라이언트가 서버의 특정디렉토리를 마운트할 수 있도록 준비하는것

- portmapper : NFS 서버와 클라이언트간에는 RPC(Remote Procedule Call) 

               통신을 이용하여 서비스가 이루어지게 되는데, 

               RPC 데몬 자체는 서비스 포트를 제공하지 않기 때문에 portmapper라는 

               데몬에 의해서 서비스가 이루어지게 된다.



[방화벽에 portmapper 등록 (/etc/sysconfig/iptables)]


-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 40000:60000

-i eth0 -j ACCEPT



-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 40000:60000 

-i eth0 -j ACCEPT




방화벽 데몬 재시작


# service iptables restart


[효율적인 방화벽 관리를 위한 고정 포트 등록 (/etc/sysconfig/nfs)]


MOUNTD_PORT=4002

LOCKD_TCPPORT=4001

LOCKD_UDPPORT=4001

RQUOTAD_PORT=4003

STAD_PORT=4003

STAD_OUTGOING_PORT=4000


위의 파일 설정이 끝나면 아래와 같이 방화벽설정을 해준다.


-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 4000:4003 -i eth0 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 4000:4003 -i eth0 -j ACCEPT



방화벽 설정이 끝나면 방화벽 데몬을 재실행한다.


# service iptables restart


=======================================================================================


[NFS Server Install]



nfs-utils RPM 설치

portmap RPM 설치




* 패키지설치 확인

# rpm -qa | grep nfs

# rpm -qa | grep portmap




# yum install nfs-utils

# yum install portmap



=======================================================================================


[NFS 서버 설정]


1. /etc/exports 설정  (/nfs-test)


사용형식


마운트될 디렉토리 클라이언트주소 ( NFS 옵션)


/home/centos 10.5.1.10(rw)



실습]


/root/test 상대방IP주소(rw)

/root/test 192.168.119.129(rw)   135




NFS_option


1). no_root_squash : 클라이언트가 root 일지라도 서버에서는 nobody 사용자로 취급하지만,

                    서버와 클라이언트 모두 같은 root 권한으로 사용한다. 보안상 주의를 요함.


2). ro : 서버의 특정 디렉토리를 읽기 전용으로 마운트 시킨다. 기본값임.


3). rw : 서버의 특정 디렉토리를 읽기/쓰기로 마운트 시킨다.


4). no_subtree_check : 어느 한 볼륨 일부가 익스포팅될 때, 하위트리 검사라는 루틴이 클라이언트가 

요청했던 파일이 적당한 위치의 볼륨에 있는지를 체크하게 되는데, 

전체 볼륨이 익스포팅될 경우에는 이 옵션을 적용하면 하위트리 검사가 이루어지지 않기 때문에 전송 속도 향상을 가져온다.


5). sync : 클라이언트가 nfs 서버에 파일쓰기 작업이 바로 이루어지도록 하는 옵션. 기본값임.


6). wdelay : 데이터쓰기 요청이 있을 때 또는 요청이 예상될 때 데이터 쓰기 동작을 연기할 수 있는 옵션 기본값임.



2. /etc/exports 호스트 지정 방법


- 개별적인 호스트 지정방법 : 192.168.10.100,    bluescreen.co.kr,    nfs-server

- 네트워크주소/넷마스크지정 : 192.168.10.0/255.255.255.0

- 와일드문자+도메인주소지정 : *.bluescreen.com ???.bluescreen.com



사용예제


/var/www/html 192.168.10.50(rw,no_subtree_check,sync,no_root_squash)

/centos/source 192.168.10.60(ro,no_subtree_check,sync,no_root_squash)



3. NFS 서버 데몬 실행 및 동작 확인


/etc/exports 파일을 설정한 다음에 /etc/init.d 디렉토리에 존재하는 INIT 스크립트를 이용하여 portmapper 데몬과 NFS 데몬을 순서대로 띄운다.


# service portmap restart

# service nfs restart



참고로 NFS 서비스를 제공하기 위해서는 portmapper, rpc,rquotad, rpc.nfsd, lockd, rpc.mountd 등의 

여러 데몬들이 작동되고 있어야 한다. 이러한 데몬들이 제대로 작동되고 있는지 확인하려면



# rpcinfo -p  명령을 실행하여 확인할 수 있다.



프로그램 버전 원형 포트

100000  2 tcp 111 portmapper

100000  2 udp 111 portmapper

100003  2 tcp 2049 nfs

100003  3 tcp 2049 nfs

100003  4 tcp 2049 nfs

100003  2 udp 2049 nfs

100003  3 udp 2049 nfs

100003  4 udp 2049 nfs




만일 다음과 같은 화면이 나오지 않고 portmapper 에 연결할 수 없다는 오류 메시지가 나오는 경우에는

portmap 데몬이 동작하지 않아 발생하는 것이므로, portmap 데몬을 다시 띄어준다.


# rpcinfo -p

rpcinfo: 포트매퍼에 연결할 수 없습니다: RPC: 원격 시스템 오류 - 연결이 거부됨


# service portmap restart




NFS 데몬을 띄우고 나서 NFS 서버가 정상적으로 동작하고 있는지 확인한다.


# service nfs status


rpc.mountd (pid 4171)를 실행 중....nfsd (pid 4168 4167 4166 4165 4164 4163 4162 4161)를 실행중.

rpc.rquotad (pid 4136)를 실행 중...


#




Exporting 정보가 정확한지는 exportfs -v 명령으로 체크할 수 있다.


# exportfs -v


/centos/source  192.168.10.50(ro,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

/var/html/www   192.168.10.60(rw,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)




NFS 서버 데몬이 동작하고 있는 상태에서 /etc/exports 내용이 변경되었을 때는 NFS 데몬을 다시 띄우지 않고서도 

export -ra 명령으로 변경된 익스포팅 정보를 적용시킬 수 있다.



=========================================================================================


[Client NFS Mount]


NFS 클라이언트에서 NFS 서버의 공유 디렉토리를 마운트시키는 방법


- mount 명령을 이용하는 방법

- /etc/fstab 파일에 nfs 마운트 정보를 등록하는 방법



사용형식


mount -t nfs 서버주소:디렉토리  /마운트위치


mount -t nfs 192.168.10.100:/var/html/www  /tmp/webserver



클라이언트에서 서버의 공유 디렉토리가 제대로 마운트 되었는지는 df 명령이나 mount 명령으로 확인할 수 있다.




/etc/fstab에 등록하기


사용형식


NFS서버주소:마운트될경로 클라이언트마운트디렉토리 nfs 옵션


192.168.10.100:/var/html/www /tmp/webserver nfs rsize=8192,wsize=8192,nosuid,soft  0  0



[option]


- rsize=n : NFS 서버로 부터 읽어들이는 바이트 수 지정, 기본값 1024Byte

- wsize=n : NFS 서버에 쓰기할 때 사용하는 바이트 수 지정, 기본값 1024Byte

- timeo=n : RPC 타임아웃이 발생하고 나서 첫번째 재전송 요구를 보낼 때 사용되는 시간. 

            기본값 7*1/10초

- retrans=n : 주 타임아웃을 발생시키는 부 타임아웃고 재전송 회수. 기본값을 3번의 타임아웃

- port=n : NFS 서버와 연결할 수 있는 포트 지정

- fg : 첫번째 NFS 마운트 시도에서 타임아웃이 발생되면 즉시 중단함. 기본값.

- intr : 주 타임아웃이 발생되었을때 신호를 NFS 호출을 인터럽트함.

- hard : 주 타임아웃이 발생되면 server not responding 출력하고 무한정 재시도.

- soft : 주 타임아웃이 발새오디면 프로그램에게 I/O 에러 보고.





[실습하기]


NFS 서버를 구축하여 ISO 파일이나 소스파일을 복사하여 

네트워크로 CentOS 를 설치하여 본다.



boot: linux askmethod