본문 바로가기

DevOps/Linux

[Linux] Linux NFS

NFS 란

# Network File System의 약자로 리눅스, 유닉스 컴퓨터끼리 저장공간을 공유하게 해주는 서비스이다

# Windows 서버와도 공유가 가능하긴하다.

# 서버의 리소스를 클라이언트에서 마치 자신의 리소스인것처럼 사용할 수 있게 해준다

# 네트워크가 가능한 곳이면 리눅스 유닉스 등의 운영체제에서 nfs를 이용하여 파일공유가 가능하다.

# nfs 비슷하게 NAS가 있다 (스토리지 Network Attached Storage)


NFS 실습

# 1번 VM을 NFS서버로 만들어보자

rpm -qa nfs-utils
nfs-utils-1.3.0-0.68.el7.x86_64

# 위와 같이 nfs-utils-1.3.0-0.68.el7.x86_64 결과가 나온다면 nfs가 설치되어있다는 뜻이다.

# 즉 rpm -qa nfs-utills 명령어는 nfs가 설치되어있는지 확인하기 위한 명령어

 

# 공유 디렉토리 세팅

vi /etc/exports

# 생성한 파일에 nfs 공유 디렉토리를 세팅하면 된다. 빈 파일이기 때문에 초기에는 아무것도 없다.

# 아래와 같이 vi 편집으로 세팅

 

/share  193.168.56.*(rw,sync)

# 192.168.56.1~255 까지 전부 공유하기 위해 설정하며

# rw : 읽기 및 쓰기를 뜻함

# sync : nfs로 쓰기를 할 때 디스크를 동기화 하겠다

# 서버에 a 와 b 가 동시에 접근을하여 쓰기작업을 시작해서 a = 3시 5분 저장 b = 3시 6분 저장을 하게 되면 b의 내용만 반영이된다

# 또는 a와 b가 동시에 쓰기작업을하게 되었을 때 둘이 동시에 저장을 하게되면 어떤것을 저장할지 충돌이 생김

# 데이터가 충돌하는 상황에서 데이터가 깨져버릴 수 있으며 이에 따라 여러가지 문제가 생길 수 있다.

# sync 옵션을 주게되면 a와 서버가 싱크를 맺게되어 잠시 a만 작업을 할 수 있게 한다

# b가 등장해서 덮어쓰기가 불가능하다는 것이다.

# 따라서 데이터를 쓰고 저장 할 때 충돌을 방지하기 위한 옵션인 것이다.

 

# 공유 디렉토리인 /share를 생성후 권한을 부여한다.

mkdir /share
chmod 777 /share

 

# 디렉토리로 이동해서 파일을 생성해보자

cd /share
echo 1 > 1.txt
echo 2 > 3.txt
echo "hello world" > hello

 

# ls 명령어로 확인해보자

ls
1.txt  3.txt  hello

 

# nfs 서버를 시작해보자

systemctl restart nfs-server
systemctl enable nfs-server

 

# export 파일정보를 확인해보자.

exportfs -v
/share          192.168.56.*
(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

 

# 방화벽을 오픈한다. nfs는 오픈할 것이 많다. mountd, rpc-bind, nfs 3가지를 오픈한다.

firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=nfs

# rpc는 어떤 서비스일까? 클라이언트에서 서버에 접속을 할 때 ftp 포트 21, telnet 포트 23 등 포트가 지정되어 있지만 nfs 와 같은 일부 서비스들은 포트가 정해져있지 않다. 그래서 클라이언트가 nfs 를 이용하려 할 때 rpc에 먼저 어떤 포트를 이용할지 요청을 한다. 즉, 따로 포트가 지정되어 있지 않은 nfs 를 사용하기 위한 포트를 지정해주는 서비스이다.

 

firewall-cmd --reload

 

# 2번 서버로 이동하여 역시 nfs 가 설치되어 있는지 확인해보자

rpm -qa nfs-utils

 

# showmount -e <서버아이피> 를 보면 해당 아이피에서 공유중인 정보를 볼 수 있다.

showmount -e 192.168.56.20
Export list for 192.168.56.20:
/share 192.168.56.*

 

# 공유할 디렉토리를 생성한다.

mkdir /nfs_share

 

# 이후 공유폴더에 생성훈 nfs_share 폴더를 마운트하여 공유를 한다

mount -t nfs 192.168.56.20:/share /nfs_share
cd /nfs_share
ls
1.txt  3.txt  hello

# 앞서 1번서버에서 구성한 nfs 폴더에서 생성한 파일들이 2번서버의 nfs_share에서 공유가 가능하다.

# 2번 서버인 것처럼 생성이 되며, 2번 서버의 마운트된 공유폴더에서 파일을 생성하게 되면 1번 서버에서도 공유가 됨.

 

# 4 파일 생성 후 1번 서버에서 확인해보자

touch 4 # 2번 서버
ls # 1번서버
1.txt  3.txt  4  hello

# 2번 서버에서 생성한 4 파일이 1번서버 /share 폴더에 저장이 되어있음을 알 수 있다.