다음 이전 차례

6. NFS 서비스

여러분은 Network File System 이라는 것을 들어본 적이 있는지 모르겠다. 유닉스에 관심이 많은 사람들은 이미 들어본 적이 있는 유명한 네트워크 서비스 중 하나이다. 바로 상대방의 파일 시스템 일부를 마치 자기 자신의 디렉토리인 것처럼 사용할 수 있게 해주는 것이 NFS이다. NFS 가 중요한 이유는 엄청난 고용량 하드 디스크를 탑재하고 있는 몇 대의 워크스테이션이 네트워크의 다른 컴퓨터들에게 파일 시스템 서비스를 해줌으로써 모든 컴퓨터들이 필요 이상의 자원을 가질 필요도 없고 소프트웨어를 이리 저리 깔아둘 필요도 없어지게 된다. 생각해보라. 사무실 곳곳 그리고 학교 사무실 곳곳에 아래한글을 설치했다고 치자. 종종 경험해보았을 것이다. 각 사무실에서 아래한글이 지워졌다고 다시 깔아달라고 요청하는 경우가 많다. 일일이 모든 PC에 설치를 한다는 것은 정말로 시간낭비이다. 차라리 한글과 컴퓨터사에 사용인원에 따른 라이센스료를 지불한 다음 중앙 호스트 2-3대 정도의 파티션에다가 아래한글을 설치해둔다. 그리고 그것을 NFS 로 내부 사용자들에게 개방해주는 것이다. 물론 충분한 속도가 제공되어야 할 것이다. 그래서 현재로는 손수 일일이 PC에 아래한글을 하나씩 설치하는 수고를 하고 있을 따름이다. 우선은 클라이언트 관점에서 NFS 마운트를 어떻게 할 것인지를 알아보기로 한다.

6.1 클라이언트로서 NFS 마운트하기

만약 여러분이 속한 랜 환경에서 또는 인터네트에서 누군가 여러분에게 그들의 특정 디렉토리를 NFS로 마운트할 수 있게 허가해주었다고 하자. nfs-host.xxx.co.kr라는 호스트가 자신의 /usr/local 디렉토리를 마운트하도록 허가해주었다고 가정한다. 여러분이 랜이든 PPP 든 간에 TCP/IP 접속을 이루어 냈다면 다음과 같이 하면 된다.

# mount -t nfs nfs-host.xxx.co.kr:/usr/local /usr/local

위 명령은 상대편 nfs-host.xxx.co.kr의 /usr/local 디렉토리를 자신의 /usr/local 디렉토리로 NFS 방식으로 마운트하는 것이다. 리눅스에서는 마운트 옵션 -o rsize=8192, wsize=8192을 주면 더 효율적인 속도를 얻어낼 수 있다고 한다. 이렇게 하고 나서 cd /usr/local 하면 얼마든지 여러분이 디렉토리인 것처럼 사용할 수 있다. 하지만 대부분의 경우 파일을 지우거나 변경할 수는 없도록 읽기 전용으로만 허가해줄 것이다. 여러분이 윈도95와 같은 것을 사용하고 있다면 셰어웨어나 정품 NFS 클라이언트를 구입해야 할 것이다.

6.2 NFS 서버로서의 준비

여러분이 알짜웨어 또는 대부분의 배포판으로 설치를 하면 이미 NFS 데몬들 이라고 부르는 것들이 그 즉시 사용 가능하도록 되어 있다. 단지 /etc/rc.d/rc.inet2를 약간 수정하면 그만이다.

# # Start the various SUN RPC servers.
if [ -f ${NET}/rpc.portmap ]; then
#  # Start the NFS server daemons.
if [ -f ${NET}/rpc.mountd ]; then
  echo -n " mountd"
  ${NET}/rpc.mountd
  fi
if [ -f ${NET}/rpc.nfsd ]; then
  echo -n " nfsd"
  ${NET}/rpc.nfsd
  fi
     .
     .
     .

이런 부분을 찾았는가? rpc.mountd와 rpc.nfsd가 작동할 수 있도록 주석문 처 리를 없애도록 한다. 전자는 NFS 마운트 데몬이고 후자는 NFS 파일 서버 데 몬이다. 그 다음은 여러분의 어느 디렉토리를 누구에게 어떤 옵션으로 제공할 것인지를 결정하는 일이 남았다. 여기서 중요한 파일은 바로 /etc/exports라는 파일이다.

# See exports(5) for a description.
# This file contains a list of all directories exported to other computers.
# It is used by rpc.nfsd and rpc.mountd.
/home/alzza2    168.126.124.228(ro)
/home/alzza2    206.48.168.180(ro)
/home/yong      localhost(ro)

# sample /etc/exports file
       /               master(rw) trusty(rw,no_root_squash)
/projects       proj*.local.domain(rw)
       /usr            *.local.domain(ro) @trusted(rw)
/home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
       /pub            (ro,insecure,all_quash)

man exports 해보면 나오는 예제 exports 파일의 내용이다. 호스트별로 그리고 사용자별로 괄호 안에 친 옵션을 주고 허가할 수 있도록 해주고 있다. 여러분이 일단 알아두어야 할 옵션은 바로 ro, rw 정도일 것이다. 맨 먼저 master, trusty라는 호스트에 대해서는 루트 디렉토리 / 자체를 읽기/쓰기로 허용하고 있다. 도메인명이 local.domain이고 호스명이 proj로 시작하는 호스트에 대해서는 /projects라는 디렉토리를 읽기/쓰기로 허용하고 있다. 맨 마지막을 보면 모든 호스트에 대하여 /pub 디렉토리를 읽기 전용으로 허용해주고 있다. 보는 바와 같이 / 디렉토리는 다른 호스트에 그리고 그 하부 디렉토리에 해당하는 /pub는 일반인들에게 허용하는 식으로 각 파티션이 따로 분리되지 않아도 중복해서 어떤 디렉토리와 그 하부디렉토리를 별도로 마운트를 허용할 수 있다. 너무 간단하지 않은가?


다음 이전 차례