[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
'IT 관련정보 > 리눅스' 카테고리의 다른 글
리눅스 기본이론(14) -APM(Apache, PHP, MariaDB) 설치 (0) | 2017.04.19 |
---|---|
리눅스 기본 이론(13) - RAID 구축하기 (0) | 2017.04.19 |
리눅스 기본 이론(11) - SAMBA, DHCP (0) | 2017.04.19 |
리눅스 기본 이론(10) - 네트워크 설정, 네트워크 진단 명령어, 서버 포트와 방화벽 (0) | 2017.04.19 |
리눅스 기본 이론 (9) - Nmap, rootkit, rkhunter, snort, TCP/IP 네트워크 설정 (0) | 2017.04.19 |