SLOW but STEADY

NFS(Network File System) 본문

2020 AWS기반 아키텍처 설계 전문가 양성 과정/리눅스

NFS(Network File System)

ㅁ윤지ㅁ 2020. 3. 9. 17:44

NFS이란??

- NFS는 Unix & Linux System 간 File System을 공유하는 서비스입니다.

- NFS Server에서 File System을 공유하고 NFS Client에서 공유된 File System을 마운트 합니다.

- *Portmapper가 반드시 동작해야 사용이 가능합니다. (Portmapper가 동작하는지는 rpcbind를 통해 확인 가능합니다. 이 rpcbind 같은 경우 CentOS에서는 기본적으로 동작중입니다.)

- File System을 공유하는 것이기 때문에 파티션을 공유하는 것과 같은 말입니다.

 

*Portmapper란?
서버와 클라이언트 사이에서 각각의 포트로 매핑해주는 것입니다.

 

 


 

NFS 설치하기

 

** NFS란 파일 시스템을 공유하는 서비스이므로 Server컴퓨터와 Client컴퓨터 두 대가 필요합니다.
두 컴퓨터에 모두 설치작업을 해줍니다.

 

yum -y install nfs*
패키지를 설치합니다.

rpm -qa | grep nfs
nfs패키지 5개가 설치되었는지 확인합니다.

systemctl start rpcbind
데몬 프로세스를 시작합니다.

systemctl enable rpcbind
데몬 프로세스를 활성화시킵니다.

firewall-cmd --permanent --add-service=rpc-bind
방화벽에 서비스를 등록합니다.

firewall-cmd --reload

rpcinfo -p
rpcbind서비스가 활성화돼있는지 확인합니다.

 

 

* 여기서부터는 Client컴퓨터에서만 해주면 되는 작업입니다.

 

yum -y install autofs-*
autofs패키지를 설치해줍니다. autofs패키지는 NFS서버와 오토 마운트를 걸어주는 패키지입니다.
즉, Client를 재시동시켜도 NFS서버와 연결이 끊어지지 않게 해주는 것입니다.

rpm -qa | grep autofs
패키지 1개가 설치되었는지 확인합니다.

 

 


 

 

NFS 구축하기

 

* Server컴퓨터

실습하기 전에 1GB SCSI HDD 1개를 추가시켜주겠습니다. 
추가한 다음, Primary Partition: 200M, 200M, 200M - 3개
Extended Partition: 나머지 용량 - 1개
Logical Partition: 200M, 나머지 용량 - 2개를 생성해 줍니다.    

파티션을 만든 다음, 
/nfs_server1, /nfs_server2, /nfs_server3, /nfs_server4, /nfs_server5 디렉터리들을 생성해 줍니다.

디렉터리를 만든 다음, 
/dev/sdb1 -> /nfs_server1
/dev/sdb2 -> /nfs_server2
/dev/sdb3 -> /nfs_server3
/dev/sdb5 -> /nfs_server4
/dev/sdb6 -> /nfs_server5
와 마운트 시켜줍니다.

vi /etc/fstab파일에서 AutoMount까지 시켜줍니다.

 

vi /etc/exports
NFS설정 파일입니다.
# [Share Dir]  [Allow Host/Network][Option] 형식으로 내용을 씁니다.


/nfs_server1        [Client ip주소](rw, no_root_squash, sync)
/nfs_server2        [Client ip대역폭/Netmask](rw, root_squash, async, no_wdelay)
/nfs_server3        *(rw, all_squash, sync)
/nfs_server4        *(rw,all_squash,anonuid=1005,anongid=1005,sync)
/nfs_server5        [Client ip주소](rw,no_root_squash,sync)

위의 내용을 추가해줍니다.

첫 번째 방식은 ip형식으로 적어준 것이고 두 번째 방식은 대역폭 형식으로 적어준 것이고 세 번째 방식은 전체를 말하는 것입니다. 하지만 ip형식으로 지정해 주는 것이 보안적으로 좋은 형식입니다.

 

위에서 써준 NFS Option의 종류와 의미입니다. 빨간색 박스로 표시해놓은 것들은 중요한 것들입니다.

 

systemctl start nfs-server

systemctl enable nfs-server

firewall-cmd --permanent --add-service=nfs

firewall-cmd --reload

rpcinfo -p
사용/서비스 중인 포트 목록을 볼 수 있습니다.

exportfs -v
설정해놓은 NFS설정을 확인할 수 있습니다.

*exportfs -ra
이 명령어는 데몬 프로세스를 재시작해주지 않아도 설정 파일의 변경사항을 실시간으로 적용시키는 명령어입니다.
예를 들어, 클라이언트 측에서 파일을 서버로 전송하고 있는데 데몬 프로세스를 재시작해버리면 서비스가 끊기기 때문에 이 명령어를 사용합니다.

groupadd -g 1005 nfs_froup
nfs_group이라는 그룹을 생성해주겠습니다.

useradd -u 1005 -g nfs_group nfs_user
UID를 1005로 가지고 GID를 nfs_group으로 가지는 nfs_user라는 사용자를 만들겠습니다.

id nfs_user
nfs_user사용자의 정보를 확인합니다.



이렇게 해주면, 서버 구성 작업은 끝이 났습니다.
이제는 클라이언트 측으로 넘어가 보겠습니다.

 

* Client 컴퓨터

vi /etc/autofs.conf
8번째 줄 #master_map_name = auto.master의 주석을 풀어줍니다.
원래는 /misc라는 디렉터리에 마운트 포인터들이 만들어지는데 이 위치를 바꾸고 싶을 때 auto.master라는 설정 파일을 사용합니다.
저희는 이 파일을 사용할 것이므로 주석을 풀어줍니다.

15번째 줄  timeout=300은 30초 동안 별다른 작업이 일어나지 않을 때는 연결을 끊어놓겠다는 설정입니다.
네트워크적인 소모를 줄이기 위해 설정해 주는 것입니다.

51번째 줄 browse_mode=no를 yes로 바꿔줍니다.
클라이언트 측에서 생기는 마운트 포인터들을 자동으로 탐색해서 연결을 할 거냐 하는 설정입니다.

vi /etc/auto.master
7번째 줄 /misc      /etc/auto.misc밑에
/NFS       /etc/auto.custom이라고 추가합니다.
저희는 /NFS라는 상위 디렉터리에 마운트 포인터들을 만들 것입니다.

mkdir /NFS

vi /etc/auto.custom
nfs_client1     -rw,hard,intr   [Server ip주소]:/nfs_server1
nfs_client2     -rw,hard,intr  [Server ip주소]:/nfs_server2
nfs_client3     -rw,hard,intr  [Server ip주소]:/nfs_server3
nfs_client4     -rw,hard,intr  [Server ip주소]:/nfs_server4
nfs_client5     -rw,hard,intr  [Server ip주소]:/nfs_server5
위의 내용을 추가시켜 줍니다.
nfs_client1이라는 디렉터리를 Server에 있는 nfs_server1이라는 디렉터리와
읽고 쓸 수 있는 형태로 연결시키겠다는 뜻입니다.

systemctl start autofs

systemctl enable autofs

ls -l /NFS
자동으로 마운트 포인터들이 생긴 것을 확인 가능합니다.

cd /NFS/nfs_client1
이제 공유 디렉터리에 들어가서 NFS를 사용해 보도록 합시다.

touch A
A라는 파일을 만들어 보겠습니다.

ls -l
A파일이 만들어진 것을 확인 가능합니다.

서버로 넘어가서 확인해 보겠습니다.

 

* Server 컴퓨터

ls -l /nfs_server1
A파일이 공유된 것을 확인하실 수 있습니다.

이제 다시 클라이언트로 넘어가서 모든 폴더에 파일을 생성해 보도록 하겠습니다.

 

* Client 컴퓨터

cd /NFS/nfs_client2

touch B
허가 거부 됩니다.

cd /NFS/nfs_client3

touch C
허가 거부됩니다.

cd /NFS/nfs_client4

touch D
허가 거부됩니다.

cd /NFS/nfs_client5

touch E
파일이 생성됩니다.

저희가 설정을 할 때 no_root_squash라는 설정을 넣어준 것들은 
파일을 생성할 때 다 허가 거부되었습니다. 
Client 측에서 root계정으로 접속해서 쓰기를 하면 Server 측에서는 권한이 nfsnobody가 되기 때문에
허가권과 소유권에 따라 파일이 생성이 되지 않는 것입니다.

그렇다면 해결방법은 이렇습니다.
no_root_squash로 설정해준 서버 측 디렉터리들의 허가권의 other영역을 7로 만들어 주거나
허가권의 group영역을 7로 만들고 소유권의 GID를 그 그룹으로 지정해준 다음
클라이언트 사용자를 그룹에 속하게 하면 됩니다.

첫 번째 방법으로 /nfs_server2의 허가권을 바꿔보도록 하겠습니다.

 

* Server 컴퓨터

chmod 757 /nfs_server2

 

* Client 컴퓨터

cd /NFS/nfs_client2

touch B
파일이 잘 생성됩니다.

* Server 컴퓨터

ls -l /nfs_server2
확인하면 B파일이 있는 것 확인 가능하고 소유권이 nfsnobody인 것을 확인하실 수 있습니다.

/nfs_server3의 허가권도 바꿔준 다음, C파일을 생성해보세요!

두 번째 방법도 해보겠습니다.


chown .nfs_group /nfs_server4

chmod 775 /nfs_server4

 

* Client 컴퓨터

cd /NFS/nfs_client4

touch D
생성이 됩니다.

 

* Server 컴퓨터

ls -l /nfs_server4
D를 확인해보면 UID = nfs_user GID = nfs_group인 것을 확인하실 수 있습니다.

이런 식으로 E파일도 생성해 봅니다!

 

* Client 컴퓨터

df -h
마운트 정보를 확인해보면 저절로 연결되어 있는 것을 보실 수 있습니다.