NFS

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

to Top