[SULINUX 강좌#14] NFS(네트워크 파일 시스템) 사용하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 7,844 조회
- 0 추천
- 목록
본문
[SULINUX 강좌#14] NFS(네트워크 파일 시스템) 사용하기
NFS(네트워크 파일 시스템)
NFS(Network File System)를 사용하여 원격지에 있는 자원(Disk, CD-ROM등)을 마치 로컬에 있는 자원처럼 마운트(Mount)하여 사용할 수 있습니다. 리눅스나 유닉스에서 사용하는 소유자, 권한 등을 완벽하게 사용할 수 있어 스토리지 공유등의 다양한 분야에 사용됩니다. NFS는 지속적인 발전을 거듭하여 왔습니다. 현재 NFS v4.1까지 있으며 SULinux는 v3, v4, v4.1을 지원합니다. NFS v3에서 여러 가지 기능을 제공해 왔으며, v4는 복잡한 인터넷 환경을 고려하여 가변포트를 사용하지 않고, 보안요소가 많이 고려되었습니다. NFS v3까지는 UDP포트를사용하여 데이터를 전송하였습니다. 이는 신뢰성이 뛰어난 네트워크에서는 효율적이지만, 인터넷 환경에는 적합하지 않습니다. NFS v4는 TCP만 사용하므로 보다 신뢰성 있는 전송이 가능합니다. SULinux는 다양한 버전의 NFS를 사용할 수 있습니다.
NFS는 RPC(Remote Procedure Calls)를 사용합니다. RPC를 이용하여 mount, read등의 명령을 전달합니다. NFS클라이언트는 NFS서버로부터 파일핸들의 받아 이 핸들을 사용하여 파일에 접근합니다.
주요 서비스 설명
서비스 | 설 명 |
nfs | NFS 메인 서비스, RPC 콜이 있으면 작동 |
nfslock | NFS클라이언트가 서버의 파일을 잠금 때 필요한 데몬 |
rpcbind | RPC요청에 의해 포트를 결정하기 위한 데몬. (예전 portmap 역할) |
관련 프로그램
프로그램 | 설 명 | NFSv4 |
rpc.mountd | NFS클라이언트로부터 마운트 요청을 받았을 검증 및 마운트 진행 | 불필요 |
rpc.nfsd | NFS프로그램 | 필요 |
rpc.lockd | 클라이언트 요청으로 파일을 잠그는 기능인 NLM(Network Lock Manager)의 구현 | 불필요 |
rpc.statd | NFS상태를 전달. NSM(Network Status Monitor)의 구현 | 불필요 |
rpc.rquotad | 사용자 쿼타 정보를 제공하는 데몬 | 필요 |
rpc.idmapd | NFSv4의 이름을 제공하는 데몬 | 필요 |
주 의 |
|
SULinux는 보안을 위해 서버의 최소한의 포트만을 열어두었습니다. 열려있지 않은 포트는 리눅스 방화벽인 iptables를 사용하여 차단 해 두었습니다. NFS를 사용하는 경우 여러 TCP 및 UDP포트를 사용합니다. NFS클라이언트 서버의 IP를 등록하여 모든 TCP, UDP포트를 허용하시기 바랍니다. |
NFS의 동작구조
(1) NFSv3 동작 구조
NFS서버는 RPC(Remote Procedure Calls)를 사용하여 동작합니다. 먼저 NFS클라이언트가 NFS서버의 특정 디렉토리를 마운트 하기 위해서는 다음 과정을 거치게 됩니다.
① NFS서버의 rpcbind에 접속하여 get_port 라는 RPC요청을 하고 NFS서버는 마운트포트번호를 NFS클라이언트에게 전달합니다.
② NFS클라이언트는 마운트포트번호를 통하여 rpc.mountd에 접속하고 RPC마운트 요청합니다. NFS서버는 클라이언트를 확인하고, /etc/exports파일을 참조하여 파일시스템의 파일핸들을 NFS클라이언트에게 전달합니다. NFS클라이언트는 이 파일핸들을 마운트합니다.
위와 같은 과정으로 마운트를 하였다면, 파일을 읽을 때는 마운트 된 최상위 디렉토리부터 속성을 읽어 오고, 하위 디렉토리를 찾고, 속성을 읽어오고, 파일을 찾아 읽는 과정을 거치게 됩니다. 모든 과정에서는 RPC를 사용하게 됩니다. 위 과정에서 rpc.nfsd와 접속하게 됩니다.
NFS 상태, 쿼타정보를 알기 위해서는 rpc.stated와 rpc.rquotad등을 사용합니다.
* NFS를 사용하기 위해서는 NFS클라이언트 IP에 대해서 UDP, TCP모든 포트를 오픈 하여야 원활하게 NFS를 사용할 수 있습니다.
(2) NFSv4 동작 구조
NFSv4는 이전 버전과 다르게, PORT는 TCP 2049포트만 사용합니다. rpcbind의 도움을 받지도 않으며, nfslockd 및 nfsstatd 등의 프로그램 또한 필요하지 않습니다. NFSv4를 사용한다면, 방화벽의 모든 포트를 오픈 할 필요 없이 2049포트만을 오픈하면 됩니다.
SULinux 17은 NFSv4가 기본이며, 클라이언트 상황에 따라 v3로 작동합니다.
NFS서버 시작 및 종료
NFS Server는 항상 실행하고 있는 서버 프로그램입니다. 콘솔 접속하여 nfs를 시작, 종료, 재시작 할 수 있습니다.
~]# systemctl start nfs-server ~]# systemctl restart nfs-server ~]# systemctl stop nfs-server |
위와 같이 systemctl 명령어를 사용하여 nfs를 시작, 재시작, 종료를 제어 할 수 있습니다.
주 의 |
| ||
NFS는 여러 버전이 있으며 일반적으로 많이 사용한 NFSv3는 rpcbind를 사용합니다. 그렇기 때문에 NFS를 사용하려면 위 nfs서비스만 시작 하는 것이 아닌, rpcbind 서비스도 함께 시작하여야 정상 작동합니다.
* NFS클라이언트에도 rpcbind 서비스를 시작해야 정상적으로 NFS마운트가 가능합니다. NFSv4의 경우는 서버에는 rpcbind이 필요 없으나, 클라이언트에는 rpcbind 서비스가 실행되어 있어야 정상적으로 작동합니다.
위는 systemctl 명령어로 rpcbind 서비스를 시작 및 종료하는 것이며, enable 명령어로 서버 부팅시 자동시작 되게 합니다.
enable 명령어로 서버 부팅 시 자동시작 되게 합니다.
* 예전에는 rpcbind대신 portmap이 사용되었습니다. portmap은 IPv6를 지원하지 않아 rpcbind를 여러 배포판에서 제공하고 있습니다. |
NFS서버 설정 및 접속방법
SULinux는 기본적으로 NFS서버가 설치되어 있지만, 서비스는 시작되어 있지 않습니다. NFS서버를 사용하려면 다음과 같은 설정이 필요합니다.
(1) NFS서버 설정 (NFSv3)
NFS서버의 설정파일인 /etc/exports파일에는 다음과 같이 수정합니다.
/home/sulinux 192.168.0.169(rw,sync,no_root_squash) |
위 설정은 “/home/sulinux" 디렉토리를 공유하며, 192.168.0.169 NFS클라이언트에서 접속이 가능하며, 옵션들은 다음과 같습니다.
rw : 읽기/쓰기를 허용
sync : 요청시 쓰기 작업을 동기화
no_root_squash : 원격 루트 사용자를 로컬 루트로 취급
(2) NFS 마운트(NFSv3)
NFS클라이언트에서 NFS서버에 접속합니다. NFS 클라이언트에도 rpcbind 서비스가 가동중이여야 정상적으로 NFS 마운트가 됩니다. NFS 클라이언트는 다음과 같은 방법으로 마운트 합니다.
mount -t nfs NFS서버:대상DIR 마운트DIR |
mount 명령어를 사용하여 마운트 합니다. "-t nfs" 옵션을 사용하여 파일 시스템 타입을 nfs로 지정합니다. 다음으로 NFS서버의 IP또는 도메인을 넣어 줍니다. 특별한 경우가 아니면, IP를 넣는 것이 좋습니다. 도메인을 넣으면 네임서버 질의 하는 시간을 보내게 되기 때문입니다. 다음으로 “:”을 입력하고, 대상DIR를 넣습니다. 대상DIR은 NFS서버에서 지정한 공유경로가 됩니다. 다음은 NFS클라이언트의 마운트DIR을 입력합니다.
다음은 NFS클라이언트(192.168.0.169)에서 NFS서버(192.168.0.202)에 설정된 공유 디렉토리 (/home/sulinux)를 로컬디렉토리(/nfsmount)에 마운트 하는 예제입니다.
[root@localhost ~]# mkdir /nfsmount [root@localhost ~]# mount -t nfs 192.168.0.202:/home/sulinux /nfsmount/ [root@localhost ~]# df Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup01-LogVol00 6.7G 2.2G 4.2G 34% / /dev/sda1 99M 18M 77M 19% /boot tmpfs 252M 0 252M 0% /dev/shm 192.168.0.202:/home/sulinux 56G 181M 53G 1% /nfsmount |
df명령어를 사용하여 확인 한 결과, 마운트 되어 있는 것을 확인 할 수 있습니다.
(3) NFS서버 설정 (NFSv4)
일반적인 NFS설정 법은 NFSv3를 사용한 방법입니다. 그렇지만, NFSv4를 설정하는 방법은 서버 설정 및 클라이언트 설정에 있어 조금의 변화가 있습니다. 다음과 같이 설정하면, NFSv4를 설정할 수 있습니다. NFSv4를 사용하면, NFS서버에는 rpcbind 서비스가 필요 없으며, 사용하는 포트 또한 TCP 2049만을 사용합니다.
NFS서버의 설정파일인 /etc/exports파일에는 다음과 같이 수정합니다.
/home/sulinux 192.168.0.169(rw,sync,fsid=0,no_root_squash) |
위 설정에서 NFSv3와 다른점은 "fsid=0"부분이 추가된 것을 확인 할 수 있습니다.
여기서 fsid=0 옵션은 파일시스템의 ID를 0으로 설정 한다는 옵션입니다.
(4) NFS 마운트(NFSv4)
NFS클라이언트에서 NFS서버에 접속합니다. NFSv4 클라이언트에도 rpcbind 서비스가 가동중이여야 정상적으로 NFS 마운트가 됩니다. NFS 클라이언트는 다음과 같은 방법으로 마운트 합니다.
mount -t nfs4 NFS서버:/ 마운트DIR |
mount 명령어를 사용하여 마운트 합니다. "-t nfs4" 옵션을 사용하여 파일 시스템 타입을 nfs4로 버전까지 명시하여 지정합니다. 일반적인 nfs는 NFS 버전 3를 의미합니다. 다음으로 NFS서버의 IP또는 도메인을 넣어 줍니다. 특별한 경우가 아니면, IP를 넣는 것이 좋습니다. 도메인을 넣으면 네임서버 질의 하는 시간을 보내게 되기 때문입니다. 다음으로 “:”을 입력하고, "/"를 넣습니다. 앞에서 지정한 NFS서버 옵션 “fsid=0” 때문에 /home/sulinux를 "/"인식 됩니다. 다음은 NFS클라이언트의 마운트DIR을 입력합니다.
다음은 NFS클라이언트(192.168.0.169)에서 NFS서버(192.168.0.202)에 설정된 공유 디렉토리(/home/sulinux)를 로컬디렉토리(/nfsmount)에 마운트 하는 예제입니다.
[root@localhost ~]# mkdir /nfsmount [root@localhost ~]# mount -t nfs4 192.168.0.202:/ /nfsmount/ [root@localhost ~]# df Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup01-LogVol00 6.7G 2.2G 4.2G 34% / /dev/sda1 99M 18M 77M 19% /boot tmpfs 252M 0 252M 0% /dev/shm 192.168.0.202:/ 56G 181M 53G 1% /nfsmount |
df명령어를 사용하여 확인 한 결과, 마운트 되어 있는 것을 확인 할 수 있습니다.
(5) NFS 마운트 해제
NFS클라이언트에서 NFS서버의 경로를 마운트 했다면, 마운트 해제 하는 방법은 아주 간단합니다. 일반적인 mount 명령어를 이용하여 할 수 있습니다.
umount 마운트된DIR |
앞의 예제에서 NFS서버에 마운트 했던 내용을 다음과 같이 해제 하였습니다.
[root@localhost ~]# umount /nfsmount/ [root@localhost ~]# df Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup01-LogVol00 6.7G 2.2G 4.2G 34% / /dev/sda1 99M 18M 77M 19% /boot tmpfs 252M 0 252M 0% /dev/shm |
관련자료
-
이전
-
다음