본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 유닉스 저장공간 공유] NFS 서버란 무엇인가? NFS서버 설치 및 구축, 클라이언트에서 NFS 테스트 해보기

반응형

[리눅스 유닉스 완전정복 목차]

안녕하세요~~! 주인장 양햄찌 입니다.

오늘은 NFS 서버에 대해 다뤄보려고 합니다. :)

NFS서버란 무엇인가?

현재야 디스크 용량이 기하급수적으로 커지면서 공간 부족현상이 없지만, 몇십년전만 해도 그렇지 않았죠 ㅎㅎ

A라는 서버는 엄청 큰 용량의 메모리를 가지고 있는데, 그 외의 B,C,D 등등의 클라이언트들은 여유 공간이 별로 없다면, 클라이언트들은 생각할거예요. 내 용량을 뺏어가지 않고 A서버의 저장공간 즉 디렉터리등을 마치 내것처럼 사용할 수 없을까? 생각하겠죠 ㅎㅎ

그게 NFS시스템입니다. NFS는 네트워크 파일 시스템 (Network File System)의 약자예요  

사진 출처: http://sysstec.blogspot.com/2014/04/what-is-nfs-in-linux.html

NFS를 그림으로 설명하면 위의 그림이 되는거죠 ㅎㅎ 현재 그림에선 4대의 컴퓨터가 NFS서버의 디스크 공간을 공유하고 있어요.

이와 같은 기능 때문에 NFS는 특히 임베디드 시스템과 같은 구조에서 유용합니다. 임베디드는 디스크 용량 자체가 작기 때문에 약간의 용량도 소듕하거든요 ㅎㅎNFS서버 용량으로 시스템을 똑같이 구동시킬 수 있으니까요.

 

클라이언트가 여유공간이 있더라도, 공통으로 사용되는 파일이라면 각자의 컴퓨터에 해당 파일을 모두 저장해 두기보다는 1대의 컴퓨터에만 저장해놓고 저장한 디렉터리를 공유하는 게 더 효율적이겠죠?

 

아 아무래도 NFS는 다른 서버에 있는 파티션을 마치 내 로컬 영역인것처럼 네트워크를 이용하는 것이기 때문에 보안에 취약합니다.

보안이 중요하지 않다면 꽤 유용하지만 보안을 어느정도 신경써야 하는 회사면 사용하는 것을 추천하지 않습니다.

그래서 저희회사 제 부서도 이걸 안써여... 아니 못쓰는거죠ㅎㅎ

 

출처: https://www.reddit.com/r/linuxquestions/comments/b5ba8t/nfs_vs_samba_whats_the_trend_nowadays/

2019년도에 NFS랑 삼바중에 뭘 많이쓰는지 물어본 글이 있길래 다른 사람들의 의견이 궁금하면 한 번 읽고 넘어가도 좋은 것 같아요 (사진 누르면 해당 페이지 이동)

NFS 개념 정리

NFS는 컴퓨터 사용자가 원격지 컴퓨터에 있는 파일을 마치 자신의 컴퓨터에 있는 것처럼 검색하고, 마음대로 저장하거나 수정하도록 해주는 클라이언트/서버형 응용프로그램입니다. 사용자 시스템에는 NFS 클라이언트가 있어야하며 원격지 컴퓨터에는 NFS 서버가 설치되어 있어야 해요. 

 

NFS는 1984년 썬마이크로시스템 사에서 개발한 프로토콜로 TCP/IP네트워크 상에서 다른 컴퓨터의 파일 시스템을 마운트하고 공유하여 상대방의 파일 시스템 일부를 마치 자기 자신의 디렉터리인 것처럼 사용할 수 있게 해줍니다. 

 

뭐 결론은 저장 공간을 공유할 수 있도록 해주는 서비스가 NFS라는거~

NFS 패키지 설치하기 (서버)

NFS 패키지가 설치되어있나 확인하고 없다면 설치해줄게요.

ubuntu일 경우
dpkg -l | grep nfs --nfs관련 설치된 패키지가 있는지 확인
apt-get -y install nfs-kernel-server

CentOS일 경우
rpm -qa | grep nfs --nfs관련 설치된 패키지가 있는지 확인
yum -y install nfs-utils

우분투의 경우 nfs-kernel-server 패키지를 설치하시면 이 패키지에 nfs구축에 필요한 nfs-common패키지라던가 rpcbind 패키지를 다 포함하고 있어서 번거롭게 따로 따로 두번 설치할 필요가 없습니다. 

우분투 18버전에서 설치중

설치가 다 완료되었다면 확인해볼게요.

설치전에 dpkg -l | grep nfs했을땐 아무것도 안나왔었는데..! 설치하니까 뭐가 막 이렇게 나와요 ㅎㅎ

설치된 패키지를 확인했을 때 이렇게 nfs-common과 nfs-kernel-server 그리고 rpcbind는 꼭 들어가있어야 합니다. (우분투일 경우)

CentOS일 경우

nfs-utils와 rpcbind가 잘 설치된 것을 확인할 수 있어요 (CentOS의 경우)

NFS로 파일공유 해보기 - 먼저 서버측 작업

먼저 사용법을 흝기 위해 간단하게,

NFS서버를 설치한 '가상머신1' 외에 '가상머신2' 한 개를 더 켜준 후, 이 가상머신2가 가상머신1의 nfsdir디렉터리를 공유하도록 해볼게요 

서버측 작업 순서
0. NFS 서버 패키지 설치 (앞에서 했음)
1. 공유할 디렉터리 만들기 
2. 허용할 호스트 ip알기
3. exports 설정
4. 방화벽 해제
5. NFS서비스 시작
6. 확인작업

▶1. 공유할 디렉터리 만들기

먼저 서버에 다른 클라이언트들과 파일공유를 진행할 디렉터리와 파일을 만들어줄게요. 

디렉터리 명운 nfsdir로 만들었어요. 그리고 삼바때처럼 그 안에 nfstest파일을 하나 만들고 파일에 HELLO NFS를 써줬습니다. 

아 모든 사람들이 읽고 쓰고 다 하게 해주려면 파일권한도 변경해줘야 하는걸 잊지 말아요!

chmod 777 /nfsdir/*

원래는 w(쓰기)가 안됐는데 이제 소유자뿐만 아니라 다른 사용자들도 w가 가능하도록 변경되었어요 ㅎㅎ

사진에서 nfsdir 디렉터리내에 이미 생성된 파일들까지 권한을 변경해주려면 chmod 777 /nfsdir이 아닌 chmod 777 /nfsdir/* 해줘야해요! (오타)

▶ 2. 클라이언트 IP주소 알기 

일단 저는 가상머신2가 가상머신1의 저장공간을 공유하게 설정해볼거니까 가상머신2의 IP주소를 알아야합니다. 가상머신1의 nfs서버 설정에다가 얘가 접근을 허용하도록 써줄거거든요 

hostname -I

요렇게 하면 간단하게 IP주소를 확인할 수 있어요.

▶ 3. 공유할 디렉터리 설정 (exports 파일 수정) 

유닉스나 리눅스는 윈도우와 다르게 파일시스템을 사용하려면 마운트가 필수적인거 아시죻? 마운트가 뭔지 잘 모르시는 분들은 아래 포스팅을 먼저 읽고 오세요!

- 마운트 뜻 - https://jhnyang.tistory.com/12

 

마운트(mount) 뜻, 관련 명령어 & 문제 (fdisk, df, mkfs,디스크마운트)

리눅스 완전 정복 : 리눅스 목차 아마 마운트라는게 윈도우 운영체제에서는 우리가 실감할 일이 없기 때문에 리눅스를 처음 접하시는 분들은 헷갈릴 수 있는 개념이예요. 오늘은 마운트에 대해서 끄적여보도록 하..

jhnyang.tistory.com

다른 컴퓨터에서 사용가능하게 할, 즉 마운트 가능하게 할 디렉터리를 설정해줘야 합니다.

 

이 설정 파일은 '/etc/exports'예요'

이렇게 앞에 10줄을 출력해서 확인해보면 'the access control list for filesystems~' NFS클라이언트에게 exported될 파일시스템 접근통제 리스트라는 설명이 나와있어요 ㅎㅎ

vi /etc/exports

vi 편집기로 이 파일을 열어서 아래처럼 추가해줍시다.

/nfsdir 192.168.30.129(rw,sync)

이 부분이 추가했어요. 저기 IP주소는 2번에서 얻은 IP주소랍니다 ㅎㅎ

여러 옵션이 있는데 rw는 '읽기 쓰기 가능' 하게 하는 옵션이에요. 

sync는 디폴트이긴 한대 동기화옵션으로 NFS가 쓰기 작업을 완료할때마다 디스크를 동기화해줍니다. 더 많은 옵션은 밑에서 차근차근 알아보도록 합시다.

/nfsdir *(rw, sync)

이렇게 IP대신 *를 써주면 모든 머신이 접근 가능하게 돼요 ㅎㅎ

▶ 4. 방화벽 해제 

방화벽이 설정되어 있으면 클라이언트에서 마운트 시키려고 하는데 HOST를 못찾는 경우가 발생합니다.

(설정안되어있음 안해도됨) 실습동안은 잠깐 꺼주도록 합시당

방화벽 잠깐 끄는 법
systemctl stop firewalld

▶ 5. NFS서비스 시작

이제 NFS서버 과정은 다 끝났어요 ㅎㅎ NFS서비스를 시작해주면 됩니다. 

# systemctl restart nfs-kernel-server 

재시작 해주세요 ㅎㅎ

# system enable nfs-kernel-server

위 명령어를 입력하면 nfs가 상시 가동됩니다.

▶ 6. 확인 (showmount, exportfs)

showmount는 NFS 서버의 마운트 관련 정보를 출력하는 명령입니다. -e 옵션을 사용하면 익스포트된 리스트를 보여줘요 

exportfs 명령어는 NFS 서버에 익스포트 된 디렉터리 정보를 관리해주는 명령어예요.

-v 옵션으로 내가 설정했던 내용이 잘 들어갔는지 확인해볼 수 있습니다.

근데 내가 설정했던 것과 다르게 부가적인 옵션들이 보이는데요, 기본 옵션들이라 딸려온 것들이예요. 

# ps aux | grep nfs --리눅스일 경우 데몬동작 확인

마지막으로 프로세스 명령어로 nfs 데몬이 동작하고 있는지 확인해줍시다. ㅎㅎ

이것으로 서버쪽은 끝! 이제 클라이언트로 가볼게요 ㅎㅎ

NFS로 파일공유 해보기 - 클라이언트측 작업

클라이언트로 사용할 가상머신2로 들어가줄게요.

NFS 클라이언트 구축 순서
1. NFS 패키지 설치
2. 서버IP확인, NFS서버 공유디렉터리 정보 확인
3. 디렉터리 생성
4. 마운트 작업
5. fstab 등록
6. 확인

▶1. nfs관련 패키지 설치 

당연히 클라이언트 쪽에도 nfs가 설치되어있어야 합니다. 

--ubuntu일 경우
dpkg -l | grep nfs --nfs관련 설치된 패키지가 있는지 확인
apt-get install -y nfs-common

--centOS일 경우
rpm -qa | grep nfs
yum -y install nfs-utils

요렇게 설치해줍시다.

우분투 클라이언트 NFS설치중...

▶2. 서버측 IP, NFS서버에 공유된 디렉터리 확인

서버측 IP로 서버에 공유된 디렉터리가 있는지 확인해줄거예요. (우리 서버측 설정에서 nfsdir export해줬으니까 당연히 있겠지만!)

hostname -I --IP주소 알기
showmound -e '서버IP' --서버측 NFS공유된 디렉터리 확인

서버측 IP는 서버 가상머신에서 확인해주고, 서버IP얻은걸로 클라이언트에서 서버측 공유정보를 확인해봅시다.

클라이언트는 192.168.30.129였는데 서버는 192.168.30.128이네요 ㅎㅎ

showmount는 NFS 서버의 마운트 관련 정보를 출력하는 명령입니다. -e 옵션을 사용하면 익스포트된 리스트를 보여줘요. 클라이언트 IP에 nfsdir이 하나 마운트 가능하도록 export된걸 확인할 수 있습니다.

▶3. NFS 공유 디렉터리 마운트할 디렉터리 생성

서버의 /nfsdir을 마운트할 디렉터리를 생성해줍시다.

디렉터리를 뭘로 만들지는 여러분 마음이예요 ㅎㅎ 저는 /mnt/server 경로에다가 /nfsdir를 마운트하려고 합니다. 

▶4. 마운트 해주기~

마운트가 기억이 안난다면 이 포스팅을 한 번 훑고 오는 것도 좋아요 ㅎㅎ

- 마운트 뜻 - https://jhnyang.tistory.com/12

 

마운트(mount) 뜻, 관련 명령어 & 문제 (fdisk, df, mkfs,디스크마운트)

리눅스 완전 정복 : 리눅스 목차 아마 마운트라는게 윈도우 운영체제에서는 우리가 실감할 일이 없기 때문에 리눅스를 처음 접하시는 분들은 헷갈릴 수 있는 개념이예요. 오늘은 마운트에 대해서 끄적여보도록 하..

jhnyang.tistory.com

nfs를 마운트 할 때에는 파일시스템을 nfs로 설정해주면 됩니다(t옵션) 디스크를 추가한게 아니기 때문에 파티셔닝 설정이나 포맷작업같은게 필요 없어요 ㅎㅎ

mount -t nfs 서버IP:/서버공유디렉터리 /클라이언트마운트할곳

즉 저의 경우 명령어는 'mount -t nfs 192.168.30.128:/nfsdir /mnt/server'가 되겠죠?

결과

▶5. fstab 등록

마운트 작업했으면 fstab 등록하면 끝입니다. 마운트는 재부팅하면 사라져요 ㅎㅎ 부팅하면 다시 마운트 명령어 쳐서 작업해줘야함. 부팅될때마다 NFS 서버의 디렉터리에 자동으로 마운트되도록 서정하고 싶으면 fstab파일에 등록해주면 됩니다. 

 

fstab파일 위치:

/etc/fstab

 

해당 파일을 열어서 빨간색 부분을 추가해주세요 

▶ 6. 확인

df 명령어로 마운트된 파일 시스템을 확인하실 수 있습니다.

짠! 맨 마지막 줄에 서버의 nfsdir디렉터리가 추가된 것이 보이시나요?ㅎㅎ

해당 디렉터리를 들어가보면 우리가 서버측작업 1번에서 생성해줬던 파일을 그대로 접근할 수 있습니다. ㅎㅎ

여기서 새로운 파일을 생성한 후, 서버측에가서 확인해보세요! 동기화도 잘 되어있는 것을 확인할 수 있어요 :) 

 

오늘은 여기까지입니다! 도움이 되셨다면 지나가시는 길이 공감으로 마음을 표현해주시는건 어떨까요? :)

사소한 표현이 큰 자극제가 됩니다 

반응형