1. NFS 정의
NFS
NFS(Network File System)는 썬 마이크로시스템즈가 개발한 프로토콜로 컴퓨터 사용자가 원격지 컴퓨터에 있는 파일을 마치 로컬 파일인 것처럼 사용할 수 있게 해주며 RPC(Remote Procedure Call)를 이용해 통신한다.
RPC
RPC(Remote Procedure Call)란 네트워크상의 다른 컴퓨터에 있는 프로그램에 서비스를 요청하는 데 사용되는 프로토콜이다.
2. NFS 주요 서비스 및 프로그램
서비스
- nfs : NFS 메인 서비스로 RPC 콜이 있으면 작동한다.
- nfslock : NFS클라이언트가 서버의 파일을 잠글 때 필요한 데몬
- rpcbind : RPC요청에 의해 포트를 결정하기 위한 데몬(예전 portmap 역할)
프로그램
- rpc.mountd : NFS클라이언트로부터 마운트 요청을 받았을 때 검증 및 마운트를 진행하는 데몬
- rpc.nfsd : NFS 서비스 데몬
- rpc.lockd : 파일 잠금을 통해 여러 사용자가 동시에 한 파일을 수정하는 것을 방지
- rpc.statd : rpc.lockd와 함께 작동하면서 NFS서버가 비정상적으로 종료되었거나 리부팅 했을 경우 복구한다.
- rpc.rquotad : 사용자 쿼터 정보를 제공하는 데몬
- rcp.idmapd : NFSv4의 이름을 제공하는 데몬
3. NFS 서버 설치
#yum install nfs-utils
추가로 설치되는 패키지
libnfsidmap
4. NFS 서버 설정
#vi /etc/exports
- [공유할 디렉토리] / [허용할 클라이언트 IP] / [옵션]
ex) /data 192.168.10.99(rw,sync,no_root_squash)
/data 192.168.10.*(rw,sync,no_root_squash)
옵션 | 설명 |
ro | 읽기만 허용 |
rw | 읽기/쓰기 허용 |
sync | 요청시 쓰기 작업을 동기화 |
noaccess | 공유된 디렉토리의 특정 하위 디렉토리의 접근제한 |
root_squash | 클라이언트 root를 nobody로 매핑 |
no_root_squash | 클라이언트 root를 root로 매핑 |
all_squash | 모든 사용자를 nobody로 매핑 |
no_all_squash | root를 제외하고 서버와 클라이언트의 사용자로 매핑 |
#exportfs -v
- /etc/exports 파일에 설정한 공유 목록 확인
! TIP
클라이언트에서 nfs서버에 공유된 디렉토리 정보를 확인하는 방법
#showmount -e [NFS서버 IP]
showmount 명령어를 입력했는데 다음과 같은 오류가 발생했을 경우
방화벽에서 udp 111, 20048번 포트를 열어주면 문제가 해결됨
#iptables -A INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
#iptables -A INPUT -p udp -m state --state NEW -m udp --dport 20048 -j ACCEPT
#vi /etc/sysconfig/nfs
- RPC 데몬 기본포트 변경(필요시 진행하며 /etc/sysconfig/nfs 파일이 없을 경우 생성)
# # Note: For new values to take effect the nfs-config service # has to be restarted with the following command: # systemctl restart nfs-config # # Optional arguments passed to in-kernel lockd #LOCKDARG= # TCP port rpc.lockd should listen on. #LOCKD_TCPPORT=32803 // rpc.lockd 데몬 TCP 포트 # UDP port rpc.lockd should listen on. #LOCKD_UDPPORT=32769 // rpc.lockd 데몬 UDP 포트 # # Optional arguments passed to rpc.nfsd. See rpc.nfsd(8) RPCNFSDARGS="" # Number of nfs server processes to be started. # The default is 8. #RPCNFSDCOUNT=16 # # Set V4 grace period in seconds #NFSD_V4_GRACE=90 # # Set V4 lease period in seconds #NFSD_V4_LEASE=90 # # Optional arguments passed to rpc.mountd. See rpc.mountd(8) RPCMOUNTDOPTS="" # Port rpc.mountd should listen on. #MOUNTD_PORT=892 // rpc.mountd 데몬 포트 # # Optional arguments passed to rpc.statd. See rpc.statd(8) STATDARG="" # Port rpc.statd should listen on. #STATD_PORT=662 // rpc.statd 데몬 포트 # Outgoing port statd should used. The default is port # is random #STATD_OUTGOING_PORT=2020 # Specify callout program #STATD_HA_CALLOUT="/usr/local/bin/foo" # # # Optional arguments passed to sm-notify. See sm-notify(8) SMNOTIFYARGS="" # # Optional arguments passed to rpc.idmapd. See rpc.idmapd(8) RPCIDMAPDARGS="" # # Optional arguments passed to rpc.gssd. See rpc.gssd(8) # Note: The rpc-gssd service will not start unless the # file /etc/krb5.keytab exists. If an alternate # keytab is needed, that separate keytab file # location may be defined in the rpc-gssd.service's # systemd unit file under the ConditionPathExists # parameter RPCGSSDARGS="" # # Enable usage of gssproxy. See gssproxy-mech(8). GSS_USE_PROXY="yes" # # Optional arguments passed to blkmapd. See blkmapd(8) BLKMAPDARGS="": |
5. NFS 공유 디렉토리 생성
공유 디렉토리 생성 및 권한 변경
#mkdir /data
#chmod 777 /data
6. 방화벽 설정
NFS서버 시작
#service rpcbind start
#service nfslock start
#service rpcidmapd start
#service nfs start
NFS 와 관련된 포트확인
#rpcinfo -p
방화벽 설정 및 iptables 시작
#vi /etc/sysconfig/iptables
#service iptables restart
#iptables --list
추가된 정책 확인
7. 클라이언트에서 NFS 공유 디렉토리 접속
Windows 환경
- NFS 기능 사용
제어판 -> 프로그램 -> 프로그램 및 기능에서 NFS용 서비스 항목에 체크
- 네트워크 드라이브 연결
파일탐색기 -> 네트워크 마우스우클릭 -> 네트워크 드라이브 연결(N)... -> 계정 및 패스워드 입력
- 접속성공
Linux 환경
- NFS 클라이언트 패키지 설치
#yum install nfs-utils
- 마운트 포인트 생성 및 권한 변경
#mkdir /nfsmount
#chmod 777 /nsfmount
- 마운트 명령어 실행
#mount -t nfs NFS서버의 IP:/data /nfsmount/
- 부팅시 자동으로 마운트 되게 하려면 /etc/fstab 에 다음과 같은 내용 추가
'Linux' 카테고리의 다른 글
리눅스에서 swap 사이즈 용량을 늘이는 방법 (0) | 2019.12.10 |
---|---|
FTP (0) | 2019.11.25 |
리눅스에서 gcc 설치 (0) | 2019.11.08 |
리눅스 모니터링 유틸리티 정리 (0) | 2019.04.18 |
마운트 시 오류 'mount error(112): Host is down' (0) | 2019.01.25 |