티스토리 뷰
How to set up a network file system on CentOS 8
클라이언트 / 서버 파일 시스템이라고도 부르는 NFS (Network File System)는 클라이언트가 네트워크를 통해 다른 사용자와 디렉토리 및 파일을 공유하고 상호 작용할 수 있도록 마치 로컬에 마운트된 것 처럼 네트워크를 통해 로컬 파일 시스템을 내보내는데 널리 사용되는 교차 플랫폼 및 분산 파일 시스템 프로토콜이다.
두 대의 머신에 CentOS 8을 설치하고 NFS 설정을 통해서 클라이언트 / 서버간의 파일 공유를 검증해 본다.
NFS Server 구성
NFS (Network File System)는 네트워크 상의 다른 머신에서 파일 시스템으로 마운트하여 사용할 수 있도록 공유하는 방법이다.
NFS 서버 패키지 설치
# 이미 설치되어 있는 경우는 최신 버전으로 업그레이드 된다. (nfs-utils-1:2.3.3-35.el8.x86_64) $ sudo dnf install -y nfs-utils
NFS 서버 Exports 설정
공유할 디렉터리를 구성한다.
$ sudo mkdir /data/NFS
NFS 서버의 특정 IP 호스트 접속을 허용하는 설정을 구성한다. (/etc/exports)
$ sudo vi /etc/exports /data/NFS 10.0.1.*(rw,sync,no_root_squash)
주의
- 위의 /etc/exports 파일 내에 옵션을 설정할 때는 빈 공백이 없이 붙여서 작성해야 한다.
- 10.0.1.* 는 10.0.1.0/24 와 같은 의미로 어떤 것을 사용해도 좋다.
사용할 수 있는 옵션들은 다음과 같다.
- rw: 읽기 및 쓰기 가능
- ro: 읽기만 가능
- secure: 클라이언트 마운트 요청시 포트를 1024 이하로 지정
- noaccess: 액세스 거부
- root_squash: 클라이언트의 root 사용자가 서버의 root 권한을 획득하는 것을 방지
- no_root_squach: 클라이언트의 root 사용자와 서버의 root를 동일하게 설정
- sync: 파일 시스템이 변경되면 즉시 동기화
- all_sqash: root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정
- no_all_sqash: root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정
NFS 실행
# NFS Server 서비스 시작 $ sudo systemctl start nfs-server.service # NFS Server 서비스가 재 부팅시 자동으로 시작될 수 있도록 설정 $ sudo systemctl enable nfs-server.service Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service. # NFS Server 서비스 상태 확인 $ sudo systemctl status nfs-server.service ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled) Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Wed 2020-12-30 10:04:37 UTC; 1min 21s ago Main PID: 13041 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 23978) Memory: 0B CGroup: /system.slice/nfs-server.service 12월 30 10:04:37 ccambo-nfs systemd[1]: Starting NFS server and services... 12월 30 10:04:37 ccambo-nfs systemd[1]: Started NFS server and services.
위의 명령을 통해서 NFS 서버 서비스를 실행하거나 NFS 공유를 마운트하는데 필요한 다른 서비스들 (nfsd, nfs-idmapd, rpcbind, rpc.mountd, lockd, rpc.startd, rpc.rquotad, rpc.idmapd)은 자동으로 시작된다.
NFS 서버의 구성 파일들은 아래와 같다.
- /etc/nfs.conf: NFS Daemon 및 도구에 대한 기본 구성 파일
- /etc/nfsmount.conf: NFS 마운트 구성 파일
NFS 공유 디렉터리 정상 동작 확인
NFS로 공유할 디렉터리들이 정상적으로 동작하는지 확인은 아래와 같이 수행한다.
$ sudo exportfs -v /data/NFS 10.0.1.*(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash) $ sudo exportfs -arv exporting 10.0.1.*:/data/NFS $ sudo exportfs -s /data/NFS 10.0.1.*(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
옵션은 다음과 같다.
- a: 모든 공유 디렉터리를 내보내거나 내보내지 않는다.
- r: 모든 공유 디렉터리를 다시 내보내고, /var/lib/nfs/etab과 /etc/exports 파일, 그리고 /etc/exports.d 디렉터리 밑의 모든 파일들에 대한 동기화 한다.
- v: 자세한 출력
- s: 현재 내보내기 대상 리스트 출력
방화벽 처리
firewalld 서비스가 동작 중이라면 NFS 서버 서비스에 필요한 포트들 (mountd, nfs, rpc-bind)을 열어 주어야 한다. (CentOS 8에는 기본 설치되어 있지 않다)
$ sudo firewall-cmd --permanent --add-service=nfs $ sudo firewall-cmd --permanent --add-service=rpc-bind $ sudo firewall-cmd --permanent --add-service=mountd $ sudo firewall-cmd --reload
참고
실제 여러 가지 환경에서 NFS 서버에 연결을 하다보면 (예를 들면 Kubernetes NFS Dynamic Provisiner 설정 등) 다양한 오류가 발생할 수 있다.
- 접근 권한 관련:
sudo chmod 666 <nsf directory>
로 권한을 지정해 준다.
여기까지 작업으로 NFS 서버 설정은 완료되었다. 이제 클라이언트를 구성해서 접속 여부를 검증하면 된다.
NFS 클라이언트 구성
NFS 패키지 설치
$ sudo dnf install -y nfs-utils nfs4-acl-tools
Mount 후 정상 동작 확인
아래의 명령으로 NFS 서버의 공유 가능한 정보를 확인한다.
# NFS Server에 내보내기된 목록 확인 $ showmount -e 10.0.1.20
아래의 명령으로 공유된 NFS 디렉터리를 마운트 한다.
# 로컬 마운트 경로 생성 $ sudo mkdir -p /data/mountNFS # NFS 공유 디렉터리를 로컬 경로로 마운트 $ sudo mount -t nfs 10.0.1.20:/data/NFS /data/mountNFS # 마운트 확인 $ mount | grep nfs sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) 10.0.1.20:/data/NFS on /data/mountNFS type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.1.117,local_lock=none,addr=10.0.1.20) # NFS 서버에서 파일 생성 $ sudo touch /data/NFS/file-created-on-server.txt # 클라이언트에서 파일 생성 확인 $ ls -l /data/mountNFS 합계 0 -rw-r--r--. 1 root root 0 12월 30 10:53 file-created-on-server.txt # 클라이언트에서 파일 생성 $ sudo touch /data/mountNFS/fil-created-on-client.txt # NFS 서버에서 파일 생성 확인 $ ls -l /data/NFS 합계 0 -rw-r--r--. 1 root root 0 12월 30 10:55 file-create-on-client.txt -rw-r--r--. 1 root root 0 12월 30 10:53 file-created-on-server.txt
참고
마운트를 하는 중에
mount.nfs: access denied by server while mounting 10.0.1.20:/data/NFS
와 같은 오류가 발생할 수 있다.
이 오류를 확인하기 위해서는 NFS 서버에서sudo tail -f /var/log/messages
명령을 수행하면rpc.mountd[13025]: refused mount request from 10.0.1.117 for /data/NFS (/data/NFS): unmatched host
라는 오류를 확인할 수 있다.
이 경우는 NFS도 도메인 이름과 관련이 있기 때문에/etc/hosts
파일에 요청한 IP에 대한 도메인 설정이 있는지를 확인하고 도메인 설정된 호스트 명을 /etc/exports 파일에 추가해 주면 된다.
도메인 이름도 없는데 동일한 오류가 계속된다면10.0.1.* 설정을 10.0.1.0/24로
변경하고 다시exportfs -a
명령을 수행하면 된다.재 부팅시 마운트 설정
/etc/fstab
에 마운트에 대한 설정을 추가해서 재 부팅해도 동작할 수 있도록 설정한다.# fstab 등록 $ echo "10.0.1.20:/data/NFS /data/mountNFS nfs defaults 0 0">>/etc/fstab # 등록 확인 $ cat /etc/fstab
Unmount 처리
$ unmount /data/mountNFS
주의
위의 명령을 /data/mountNFS 경로에서 실행하면
/data/mountNFS: device is busy
라는 메시지가 출력되고 처리되지 않는다. 따라서 다른 경로로 이동해서 처리하면 된다.
참고 자료
'개발 > 기타공통' 카테고리의 다른 글
[MacOS] Terminal 에서 zsh compinit: insecure directories 문구가 발생하는 경우 대처하기 (0) | 2021.01.21 |
---|---|
[MacOS,Git] ._, .DS_Store 등 숨김파일 정리 및 .gitignore 처리하기 (0) | 2021.01.21 |
[Git] macOS에서 현재 상태로 원격 저장소 재 구성하기 (0) | 2020.12.29 |
[Git] macOS에서 여러 개의 Github.com 계정 사용하기 (2) | 2020.12.28 |
[Yarn] Yarn 과 Npm 비교 (0) | 2020.12.20 |
- Total
- Today
- Yesterday
- galera
- operator framework
- Cluster
- 쿠버네티스
- GIT
- Replica
- leader
- zookeeper
- CentOS
- docker
- NFS
- k8s
- collection
- SolrCloud
- terrminating
- CentOS 8
- kudo-cli
- Node
- custom resource
- provisioner
- KUBECTL
- Kubernetes
- ssh
- Kudo
- Galera Cluster
- Packages
- operator
- dynamic nfs client provisioner
- opencensus
- macos
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |