NFS
TCP/IP 네트워크상에서 다른 컴퓨터의 파일 시스템을 마운트하고 공유하여 상대방의 파일 시스템 일부를 마치 자기 자신의 디렉토리인 것처럼 사용 할 수 있게 한다 즉, 네트워크로 연결된 서로 다른 컴퓨터의 디스크 공간을 하나로 묶어 하나의 디렉토리 구조로 파일을 공유하는 방식
설정파일 /etc/exports
설정할 때는 줄 단위로 외부에 공유할 디렉토리를 입력하고 공백으로 구분한 뒤에 허가할 호스트를 지정 및 옵션을 기입
설정법
공유할 디렉토리 허가할 호스트 허가할 호스트 옵션
/nfs 192.168.20.74 (rw)
* 호스트ip에 *을 입력하면 모든 호스트에게 허용
호스트 옵션
옵션 | 설명 |
ro | 읽기 전용으로 지정하는 옵션 |
rw | 읽기 및 쓰기가 가능하도록 지정 |
root_squash | NFS 클라이언트에서 접근하는 root를 무시하고 서버상의 nobody로 매핑시키는 옵션 |
no_root_squash | root사용자를 무시하지않고 인정한다 |
no_subtree_Check | 하위 디렉토리를 검사하지 못하도록 설정정 |
all_squash | root를 포함하여 모든 사용자의 권한을 nobody로 매핑핑 |
secure | 포트 번호가 1024이하인 요청만 허가 (기본값) |
sync | 변경사항이 안정적일때만 허가 (기본값) |
async | 데이터 변경에 비동기적 처리할때 사용 쓰기가 설정된 디스크 스토리지에 사용하면 유용하다 |
anonuid | 접근 하는 사용자 권한을 지정하는 uid로 매핑 시키는 설정 |
anongid | 접근 하는 그룹 권한을 지정하는 gid로 매핑시키는 설정 |
1. showmount
NFS 서버의 마운트 관련 정보를 출력하는 명령
사용법
showmount [option] [호스트명] |
옵션
옵션 | 설명 |
-a | 호스트명:디렉토리 형태로 출력 |
-e [호스트명] | export된 리스트 출력 |
-d | NFS 클라이언트에 의해 마운트된 디렉토리 정보 출력 |
2. exportfs
nfs 서버에 export된 디렉토리 정보를 관리 해준다
옵션
옵션 | 설명 |
-a | 모든 export된 디렉토리 출력 |
-v | 설정된 내용을 자세히 출력 |
-r | /etc/exports에 설정된 내용을 다시 읽음 |
-u | export된 디렉토리 해제 |
3. NFS 서버 설정
nfs-utils 패키지 설치
[root@Linux ~]# dnf install nfs-utils ... Complete! |
nfs-server 데몬 실행
[root@Linux ~]# systemctl enable --now nfs-server Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service. |
4. 서버측에서 해야할 일
- 공유할 디렉토리, 설정 등을 지정
[root@Linux ~]# mkdir /nfs #공유할 디렉토리 생성 [root@Linux ~]# vi /etc/exports # vi 편집창 /nfs 192.168.20.49(rw) # 클라이언트의 ip # /nfs 디렉토리를 192.168.20.49에게 rw권한으로 공유 [root@Linux ~]# exportfs -r # vi 편집기에서 작성한 설정을 reload |
- firewall을 종료 후 nfs 데몬 재시작
[root@Linux ~]# systemctl stop firewalld [root@Linux ~]# systemctl restart nfs-server [root@Linux ~]# chmod 777 /nfs #nfs 폴더에 권한을 설정 |
5. 클라이언트에서 접속
서버pc와 연결 설정(재부팅시에도 마운트를 유지하기 위해)
[root@rocky2 ~]# vi /etc/fstab /192.168.20.29:/nfs /nfs_client nfs _netdev 0 0 |
서버pc에서 공유한 디렉토리 확인
[root@rocky2 /]# showmount -e 192.168.20.29 #접속할 서버의 ip Export list for 192.168.20.29: /nfs 192.168.20.49 # 서버pc에서 공유한 디렉토리와 공유한 대상의 ip가 se출력 |
서버에서 지정한 디렉토리를 자신의 디렉토리로 마운트
[root@rocky2 ~]# mount -t nfs 192.168.20.29:/nfs /nfs_client # 192.168.20.29의 /nfs디렉토리를 자신의 /nfs_client디렉토리에 마운트 |
6. 연결 확인
클라이언트 디렉토리에 파일 생성
[root@rocky2 ~]# cd /nfs_client [root@rocky2 nfs_client]# touch Hi.txt |
서버pc에서 확인
[root@Linux ~]# exportfs # 현재 연결되어있는 pc 확인 /nfs 192.168.20.49 [root@Linux ~]# cd /nfs [root@Linux nfs]# ls Hi.txt # 클라이언트에서 만든 Hi.txt파일이 서버에서도 적용되어있음 |
서버pc에서 연결 종료
[root@Linux nfs]# exportfs -au # 연결된 디렉토리를 모두 종료 [root@Linux nfs]# exportfs # 확인해도 표시되지 않음. 재연결시 -r옵션 사용 |
클라이언트에서 확인
[root@rocky2 nfs_client]# ls ls: cannot open directory '.': Permission denied # 서버에서 연결을 종료해 접근할 수 없음 [root@rocky2 nfs_client]# cd .. [root@rocky2 /]# umount /nfs_client # 클라이언트에서 마운트 해제 |