블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.5
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 31

공지사항

최근에 올라온 글

 

http://blog.sdnkorea.com/blog/category
http://www.solanara.net/

svcadm disable svc:/network/nfs/server

svcadm disable svc:/network/nfs/status:default

svcadm disable svc:/network/nfs/mapid:default

svcadm disable svc:/network/nfs/client:default

svcadm disable svc:/network/nfs/nlockmgr:default

svcadm disable svc:/network/nfs/cbd:default


NFS란?

  • NFS(Network File System)은 유닉스에서 파일을 공유하기 위해 만든 시스템이다. 리눅스, BSD에서도 지원하며, 윈도우에서도 Windows Services for UNIX를 설치하면 NFS를 지원해준다. 솔라리스 10에서는 가장 최신 버전인 NFSv4(RFC3530)까지 지원한다.

    NFSv1: 썬에서 내부적으로 개발됨. 공개되지는 않음.
    NFSv2: UDP를 이용해 최초의 NFS공개.
    NFSv3: 4GB이상의 파일 지원. 쓰기 성능 향상.
    NFSv4: 파일 락 지원

    이 문서에서는 두대의 서버를 가정한다. 호스트명이 wl, wl2 가 그것으로 wl은 NFS서버로써, wl2는 NFS클라이언트로써 사용할 것이다.
  • 참고: System Administration Guide: Network Services - Part II Accessing Network File Systems Topics

기본적인 공유방법

  • 서버(wl)

    서버의 /export/home/share 디렉토리를 공유하도록 만든다.
    root@wl ~ # vi /etc/hosts
    192.168.0.11    wl2
    root@wl ~ # vi /etc/dfs/dfstab
    share -F nfs -o rw=wl2 -d "WL2 SHARE" /export/home/share 1)
    root@wl ~ # shareall 2)
    root@wl ~ # share 3)
    -               /export/home/share   rw=wl2   "WL2 SHARE"
    root@wl ~ #
    
    1) -F는 파일 시스템을 지정하는 것으로 nfs로 고정되어있다. -o 에는 옵션을 써준다. rw=wl2의 의미는 wl2서버에서 접속시 rw(읽기/쓰기)가 가능하도록 한다는 뜻이다. -d의 문자는 단순한 설명문이다. 마지막은 공유할 디렉토리를 전체경로로 입려한다. NFS서버를 세팅하는 가장 단순한 방법이다. 다른 옵션에 대한 설명은 [man share_nfs]를 참조한다.
    2) shareall은 /etc/dfs/dfstab 파일을 읽어 실행하는 명령이다. 바꿔말하면 1)의 [share ~]를 커맨드에서 실행시켜도 된다. (파일에 넣어두어야 시스템 재부팅시 자동으로 실행된다)
    3) 공유된 내역을 확인할 수 있다.
  • 클라이언트(wl2)

    서버의 /export/home/share 에 접속해 파일을 가져올 수 있도록 마운트 한다.
    root@wl2 ~ # mkdir /root/share
    root@wl2 ~ # vi /etc/hosts
    192.168.0.3     wl
    root@wl2 ~ # mount -F nfs wl:/export/home/share /root/share 1)
    root@wl2 ~ #
    
    1) wl2에서, wl에서 공유한 /export/home/share 디렉토리를 /root/share 에 마운트한다.
  • 시스템 재시작시 자동으로 마운트하기

    클라이언트에서 마운트 정보를 vfstab파일에 등록하고, nfs client 관련 서비스가 부팅시에도 시작되어있어야 한다. 만약 서버가 다운되어있으면, 클라이언트 부팅이 조금 느려진다.
    root@wl2 ~ # vi /etc/vfstab
    ...
    wl:/export/home/share   -       /root/share     nfs     -       yes     -
    ...
    root@wl2 ~ # svcs | grep nfs
    online          3:46:12 svc:/network/nfs/cbd:default
    online          3:46:12 svc:/network/nfs/mapid:default
    online          3:46:12 svc:/network/nfs/status:default
    online          3:46:12 svc:/network/nfs/nlockmgr:default
    online          3:46:21 svc:/network/nfs/client:default
    root@wl2 ~ #
    
    서버는 해야할 필요 없다. (이미 되어있다)
  • 주의사항

    • wl2에서 wl의 파일 시스템을 NFS를 이용해 공유했을때 권한 문제가 발생할 수 있다. 특히 클라이언트에서 서버에 접근할때, 클라이언트의 root 권한 사용자는 (NFS서버에서 특별한 설정이 없다면) nobody의 UID값을, 일반 계정은 해당 계정의 UID값으로 NFS 서버에 접근한다.
      • 예1) wl에서 /export/home/share 에 nobody 로 파일 생성 권한이 없다면, wl2에서 root로 /root/share 에 파일을 생성할 수 없을 것이다.
      • 예2) wl에서 /export/home/share 에 windy 로 파일 생성 권한이 있다면, wl2에서 windy로 /root/share 에 파일을 생성할 수 있을 것이다.
      예2에서 전제조건이 하나 있다. wl의 windy가 가진 UID값과, wl2의 windy가 가진 UID값이 같아야 한다. NFS에서 파일 접근은 UID값을 사용하기 때문에 wl과 wl2에서 같은 계정명의 UID가 서로 다른 경우, 다른 아이디로 보일 것이다. 간혹 계정명은 같은데 UID값이 달라 권한설정에 어려움을 겪는 경우를 많이 봐서 강조하는 것이다. useradd 명령을 사용할때 -u xxx를 반드시 정해주어 같은 UID를 가지도록 하자.
      계정의 UID, GID가 같아야 함
      NFS서버와 NFS클라이언트에서 사용자를 생성할 때, 같은 이름의 사용자는 UID와 GID가 같아야 혼란을 방지할 수 있다.
    • 부모 디렉토리가 공유되면 그 서브 디렉토리는 공유되지 않는다. NFS스펙상 안된다.
      root@wl ~ # mkdir /nfs
      root@wl ~ # mkdir /nfs/share
      root@wl ~ # share -F nfs -o ro /nfs
      root@wl ~ # share -F nfs -o rw /nfs/share
      share_nfs: /nfs/share: 부모 디렉토리(/nfs)가 이미 공유되었습니다
      root@wl ~ #
      
      단 예외가 있는데, 마운트 지점이 다른 경우는 공유가 된다. ZFS를 사용하는 경우 아래와 같이 생성하면 된다.
      root@wl ~ # mkdir /nfs
      root@wl ~ # mkdir /nfs/share
      root@wl ~ # zfs create rpool/nfssample
      root@wl ~ # zfs set mountpoint=/nfs/share rpool/nfssample
      root@wl ~ # share -F nfs /nfs
      root@wl ~ # share -F nfs /nfs/share
      root@wl ~ # share
      -               /nfs/share   rw   ""
      -               /nfs   rw   ""
      root@wl ~ #
      

automount 사용하기

  • automount 란?

    솔라리스10에는 automountd 라는 데몬이 있다. 요청이 들어오면 자동적으로 NFS파일 시스템을 마운트 해 주고 사용하지 않으면 일정 시간(기본값은 10분)이 지나면 접속을 끊는 것이다. 솔라리스는 리눅스와는 달리 /export/home 이 사용자의 기본 홈 베이스 디렉토리인데, 이는 /home 디렉토리는 automountd에 의해 사용되기 때문이기도 하다. /home 외에 /net 도 automountd 에 의해 사용된다. (/home, /net에 디렉토리에 일반 파일을 생성하려면, automountd를 종료해야 한다. 하지만 추천하지 않는다)
    root@wl2 ~ # ps -ef | grep auto
        root  2202     1   0   10월 1 ?           0:00 /usr/lib/autofs/automountd
        root  2203  2202   0   10월 1 ?           0:30 /usr/lib/autofs/automountd
    root@wl2 ~ # svcs | grep autofs
    online         10월_10 svc:/system/filesystem/autofs:default
    root@wl2 ~ #
    
    automound 는 /etc/auto_master 파일로 설정한다. 솔라리스를 설치하고 별다른 수정사항이 없다면 아래와 같이 되어있을 것이다.
    root@wl2 ~ # cat /etc/auto_master
    +auto_master
    /net            -hosts          -nosuid,nobrowse
    /home           auto_home       -nobrowse
    root@wl2 ~ #
    
    또한 /etc/auto_home 파일도 확인해보자. 이 파일에서 auto_home 이란 이름은 /etc/auto_master 파일에서 /home으로 시작하는 컬럼에 지정된 이름과 같은 것이다.
    root@wl2 ~ # cat /etc/auto_home
    +auto_home
    root@wl2 ~ #
    
  • /home 디렉토리(홈 디렉토리 공유)

    wl2 서버의 windy 사용자는 wl서버의 홈 디렉토리와 디렉토리를 공유하려 한다. 이때는 아래와 같이 하면 된다.
    root@wl ~ # useradd -d /export/home/windy -c "윈디하나" -g staff -m -u 101 -s /bin/bash windy
    root@wl ~ # vi /etc/dfs/dfstab
    share -F nfs -o rw=wl2 -d "windy share" /export/home/windy
    root@wl ~ # shareall
    root@wl ~ #
    
    서버는 통상적인 NFS 공유 설정과 다를 것이 없다.
    root@wl2 ~ # vi /etc/auto_home
    windy   wl:/export/home/windy
    root@wl2 ~ # useradd -d /home/windy -c "윈디하나" -g staff -u 101 -s /bin/bash windy
    root@wl2 ~ # su - windy
    windy@wl2 ~ $ pwd
    /home/windy
    windy@wl2 ~ $
    
    클라이언트는 automountd 를 위해 /etc/auto_home를 수정하고 홈 디렉토리를 automountd 가 관리하는 /home/windy를 가리키도록 한다. 평상시에는 마운트되지 않다가 windy 가 wl2에 로그인 해서 홈 디렉토리로 현재 디렉토리를 옮길 때 자동으로 마운트 될 것이다.
    • NFS서버 다운되면 로그인이 안된다. 홈 디렉토리가 없기 때문이다.
    • 루트는 nobody의 UID를 사용해 NFS서버에 접근하기 때문에 위와같이 해서는 안된다.
    • NFS에 접속할 때 옵션이 필요한 경우 (예를 들면 NFS 3로 접속해야 하는 경우) auto_home 파일에 [windy -proto=tcp,vers=3 wl:/export/home/windy] 처럼 설정하면 된다.
  • /net 디렉토리

    윈도우에서 네트워크 환경을 들어가보면 공유된 서버와 공유된 디렉토리들이 보일 것이다. 솔라리스에서 이와 비슷한 역할을 하는 것이 /net 디렉토리다. (공유된 서버의 목록은 안 보인다) [/net/주소] 디렉토리에 가보면 현재 공유되는 자원을 확인할 수 있다.
    root@wl2 ~ # cd /net
    root@wl2 /net # ls -alF
    총 4
    dr-xr-xr-x   1 root     root           1 11월  6일  14:59 ./
    drwxr-xr-x  25 root     root          26 11월  6일  14:59 ../
    root@wl2 /net # cd /net/wl 1)
    root@wl2 /net/wl # ls -alF
    총 3
    dr-xr-xr-x   2 root     root           2 11월  6일  15:08 ./
    dr-xr-xr-x   2 root     root           2 11월  6일  14:59 ../
    dr-xr-xr-x   1 root     root           1 11월  6일  15:08 export/
    root@wl2 /net/wl # cd ./export/home
    root@wl2 /net/wl/export/home # ls -al
    ...
    dr-xr-xr-x   1 root     root           1 11월  3일  15:49 share
    dr-xr-xr-x   1 root     root           1 11월  3일  15:49 windy
    root@wl2 /net/wl/export/home #
    
    1) [/net/wl] 대신 [/net/192.168.0.3]과 같이 wl의 IP를 써줄 수도 있고 도메인 명을 써줄수도 있다. [/net/wl2]와 같이 자신의 호스트로 접속할 수도 있다.

NFS 고급

share 명령의 옵션

  • share 명령에서, anon 과 root 옵션에 대해 설명한다. 위에서 root 사용자는 [NFS서버에서 특별한 설정이 없다면] nobody의 uid를 사용한다고 했는데, 그 특별한 설정에 대해 설명하려한다.
  • anon 옵션은 [알 수 없는 사용자]에 대한 기본 uid 값을 정해준다. 기본값으로 nobody의 uid를 사용하도록 되어있다. 만약 이 값이 -1로 설정되어있다면 [알 수 없는 사용자]에 대해 접근을 거부한다. 알 수 없는 사용자란, nfs서버에 uid가 등록되어있지 않은 사용자를 말한다.
  • root 옵션은 root 사용자로 접근할 수 있는 호스트들을 설정한다. access-list 에 정의된 호스트의 root 사용자는 root 접근 권한을 가진다. 따라서 chown과 같은 루트 전용 명령도 사용할 수 있다.
  • anon 옵션 예제

    root@wl ~ # share -F nfs -o anon=101 /nfs
    root@wl ~ # share
    -               /nfs   anon=101   ""
    root@wl ~ # chmod 777 /nfs
    
    root@wl2 ~ # mount -F nfs wl:/nfs /nfs
    root@wl2 ~ # touch /nfs/sample
    root@wl2 ~ # ls -al /nfs/sample
    -rw-r--r--   1 windy      101            0 11월 24일  10:23 /nfs/sample
    
    101은 windy 사용자의 uid 이다. /nfs/sample 파일의 소유자가 windy 로 된 것을 확인할 수 있다.
    root@wl2 ~ # umount /nfs
    
    root@wl ~ # unshare /nfs
    
  • root 옵션 예제

    root@wl ~ # share -F nfs -o root=wl2 /nfs
    
    root@wl2 ~ # mount -F nfs wl:/nfs /nfs
    root@wl2 ~ # touch /nfs/sample
    root@wl2 ~ # ls -al /nfs/sample
    -rw-r--r--   1 root     root           0 11월 24일  10:27 sample
    root@wl2 ~ # chown windy /nfs/sample
    root@wl2 ~ # ls -al /nfs/sample
    -rw-r--r--   1 windy    root           0 11월 24일  10:27 sample
    
    소유자가 root 로 생성되었고, chown명령을 이용해 소유자를 바꿀 수 있다.
    root@wl2 ~ # umount /nfs
    
    root@wl ~ # unshare /nfs
    

NFS 로깅

NFS서버에서 무슨일이 일어나고 있는지 로깅할 수 있다. /etc/default/nfslogd 파일과 /etc/nfs/nfslog.conf 파일로 설정할 수 있다. 아래는 이 두개의 파일을 그대로 두고 로그를 사용하는 방법에 대해 설명한다.

root@wl ~ # vi /etc/dfs/dfstab
share -F nfs -o rw=wl2,log=global -d "WL2 SHARE" /export/home/share
root@wl ~ # shareall
root@wl ~ # share
-               /export/home/share   rw=wl2,log=global   "WL2 SHARE"
root@wl ~ # svcadm restart network/nfs/server:default 1)
root@wl2 ~ # mount -F nfs -o vers=3 wl:/export/home/share /root/share 2)
root@wl ~ # cat /var/nfs/nfslog 3)
메시지 생략
Mon Nov  3 17:13:05 2008 0 wl2 0 /export/home/share/source/top-3.7/m_sunos5.o b _ remove r 60001 nfs3-tcp 0 *
메시지 생략

1)/etc/nfs/nfslogtab 파일이 있어야 nfslogd 데몬이 실행된다. 없다면 shareall부터 다시하자.
2)현재의 솔라리스 10 버전(u6)는 NFSv4 인 경우 로그가 쌓이지 않는다. (nfslogd MAN페이지에 나와있다) 따라서 NFSv3를 사용한다.
3)FTP로그 쌓이듯 로그가 저장된다. 그런데 처음에는 아마 안 보일 것이다. 일정한 양이 쌓여야 파일에 쓰기 때문이고, 파일이 전송된것만 보이기 때문이다. 디렉토리를 만드는 것은 안 보인다. 이를 해결하려면 nfslogd 의 설정을 바꿔야 한다. (버퍼 파일이 없거나, 버퍼 값이 너무 작으면 NFS 성능이 매우 많이 떨어진다. 테스트할 목적으로만 사용하자)

root@wl ~ # vi /etc/nfs/nfslog.conf
global  defaultdir=/var/nfs \
        log=nfslog fhtable=fhtable buffer=nfslog_workbuffer logformat=extended
root@wl ~ # vi /etc/default/nfslogd
MIN_PROCESSING_SIZE=1024
root@wl ~ # svcadm restart network/nfs/server:default

NFS 마운트 옵션

  • 클라이언트에서 mount 시 -o 뒤에 들어가는 NFS용 옵션이 있다. 모든 목록은 [man mount_nfs]에 나와있으며 여기서는 자주 사용되는 몇가지 옵션에 대해 설명하고자 한다.
  • actimeo
    NFS 성능 튜닝에서 가장 많이 설정하는 것이 actimeo 값이다. 이는 nfs 로 마운트된 곳의 파일 어트리뷰트를 캐시하는 시간을 일괄적으로 지정한다. 일괄적이라는 것은 acdirmax, acdirmin, acregmax, acregmin 값을 각각 지정하는 번거로움없이 actimeo 를 적어주면 앞의 4가지 값이 모두 동일하게 변경된다. 단위는 초이다. 4가지 속성의 기본값은 [acdirmax=60,acdirmin=30,acregmax=60,acregmin=3] 이다.
    예를 들어 actimeo=30 으로 하면, 4가지 속성 모두 30(초)으로 세팅된다. 즉 [acdirmax=30,acdirmin=30,acregmax=30,acregmin=30] 과 같다.
  • forcedirectio
    directio를 강제로 사용고자 할때 옵션을 주면 된다. 버퍼링 없이 클라이언트/서버간에 데이터가 전송된다. actimeo=0 옵션과 같이 DBMS의 데이터 파일처럼 큰 파일을 핸들링 할때 주로 사용된다.
  • rsize, wsize 최대 읽기버퍼(rsize), 최대 쓰기버퍼(wsize)의 크기 지정. 단위는 바이트. 기본값은 NFSv3, NFSv4에서 1048576
  • bg, fg 마운트 실패시 background로 재시도, foreground로 재시도. 기본값은 fg
  • noac, nointr 데이터및 파일 속성 캐시 안함(noac), [hard]옵션으로 마운트된 파일 시스템에서 행이 걸렸을 경우 프로세스를 죽이기 위해 키보드 인터럽트를 허용하지 않음(nointr). 기본값은 캐시함, 허용함.
  • soft, hard NFS서버에서 응답이 없는 경우, 서버 응답하거나 타임아웃될때까지 재시도하거나(hard), 에러를 발생하고 마운트 프로세스 종료(soft). NFSv4에서는 soft를 지원하지 않는다. 기본값은 hard.
  • vers 사용할 NFS 프로토콜을 정의함. vers=3 인경우 NFSv3. 기본값은 4
  • 마운트 옵션 예
    root@wl2 ~ # mount -F nfs -o ro=@192.168.0:@xxx.xxx.xxx.xxx,rw=wl:wl2:.solanara.net,actimeo=0,forcedirectio wl:/export/home/share /root/share
    
    root@wl2 ~ # mount -F nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,vers=3,noac,forcedirectio wl:/export/home/share /root/share
    

NFS Replication

  • NFS도 리플리케이션이 지원된다. 클라이언트에서 지원되는 페일오버 정도로 생각하면 된다. (클러스터링 정도는 아니다) 아래의 컨셉을 따라하면 된다.
    • 서버: 읽기 전용으로 파일 시스템을 공유한다
    • 클라이언트: # mount -o ro server1:/export/home/share,server2:/export/home/share /root/share
  • 아래의 예는 1대의 NFS서버에 디렉토리를 달리해 NFS Replication을 구현한 예제이다. (서버가 같으니 실무에서는 달리 구현해야 한다)
    root@wl ~ # vi /etc/dfs/dfstab
    share -F nfs -o ro -d "windy share2" /export/home/windy2
    share -F nfs -o ro -d "windy share" /export/home/windy
    root@wl ~ # shareall
    
    root@wl2 ~ # mount -o ro wl:/export/home/windy2,wl:/export/home/windy /root/share
    root@wl2 ~ # df -k /root/share
    파일시스템           K바이트    사용    가용   용량    설치지점
    wl:/export/home/windy2,wl:/export/home/windy
                         62907203 17956504 44321627    29%    /root/share
    root@wl2 ~ # nfsstat -m
    /root/share from wl:/export/home/windy2,wl:/export/home/windy
     Flags:         vers=4,proto=tcp,sec=sys,hard,intr,llock,link,symlink,acl,rsize=1048576,wsize=1048576,retrans=5,timeo=600
     Attr cache:    acregmin=3,acregmax=60,acdirmin=30,acdirmax=60
     Failover:      noresponse=0,failover=0,remap=0,currserver=wl
    root@wl2 ~ #
    

nfsstat 명령

NFS 서버 및 클라이언트의 상태를 보여주는 명령이다. 각 항목의 자세한 의미는nfsstat(1M)을 참고하자.

  • 서버

    root@wl ~ # nfsstat -s
    
    Server rpc:
    Connection oriented:
    calls      badcalls   nullrecv   badlen     xdrcall    dupchecks  dupreqs
    0          0          0          0          0          0          0
    Connectionless:
    calls      badcalls   nullrecv   badlen     xdrcall    dupchecks  dupreqs
    0          0          0          0          0          0          0
    
    Server nfs:
    calls     badcalls
    0         0
    Version 2: (0 calls)
    null     getattr  setattr  root     lookup   readlink read     wrcache
    0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%
    write    create   remove   rename   link     symlink  mkdir    rmdir
    0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%
    readdir  statfs
    0 0%     0 0%
    Version 3: (0 calls)
    null        getattr     setattr     lookup      access      readlink
    0 0%        0 0%        0 0%        0 0%        0 0%        0 0%
    read        write       create      mkdir       symlink     mknod
    0 0%        0 0%        0 0%        0 0%        0 0%        0 0%
    remove      rmdir       rename      link        readdir     readdirplus
    0 0%        0 0%        0 0%        0 0%        0 0%        0 0%
    fsstat      fsinfo      pathconf    commit
    0 0%        0 0%        0 0%        0 0%
    Version 4: (0 calls)
    null                compound
    0 0%                0 0%
    Version 4: (0 operations)
    reserved            access              close               commit
    0 0%                0 0%                0 0%                0 0%
    create              delegpurge          delegreturn         getattr
    0 0%                0 0%                0 0%                0 0%
    getfh               link                lock                lockt
    0 0%                0 0%                0 0%                0 0%
    locku               lookup              lookupp             nverify
    0 0%                0 0%                0 0%                0 0%
    open                openattr            open_confirm        open_downgrade
    0 0%                0 0%                0 0%                0 0%
    putfh               putpubfh            putrootfh           read
    0 0%                0 0%                0 0%                0 0%
    readdir             readlink            remove              rename
    0 0%                0 0%                0 0%                0 0%
    renew               restorefh           savefh              secinfo
    0 0%                0 0%                0 0%                0 0%
    setattr             setclientid         setclientid_confirm verify
    0 0%                0 0%                0 0%                0 0%
    write               release_lockowner   illegal
    0 0%                0 0%                0 0%
    
    Server nfs_acl:
    Version 2: (0 calls)
    null        getacl      setacl      getattr     access      getxattrdir
    0 0%        0 0%        0 0%        0 0%        0 0%        0 0%
    Version 3: (0 calls)
    null        getacl      setacl      getxattrdir
    0 0%        0 0%        0 0%        0 0%
    
  • 클라이언트

    root@wl2 ~ # nfsstat -c
    
    Client rpc:
    Connection oriented:
    calls      badcalls   badxids    timeouts   newcreds   badverfs   timers
    1229652    3          2          0          0          0          0
    cantconn   nomem      interrupts
    0          0          2
    Connectionless:
    calls      badcalls   retrans    badxids    timeouts   newcreds   badverfs
    0          0          0          0          0          0          0
    timers     nomem      cantsend
    0          0          0
    
    Client nfs:
    calls     badcalls  clgets    cltoomany
    1219703   3         1218231   53
    Version 2: (0 calls)
    null     getattr  setattr  root     lookup   readlink read     wrcache
    0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%
    write    create   remove   rename   link     symlink  mkdir    rmdir
    0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%     0 0%
    readdir  statfs
    0 0%     0 0%
    Version 3: (1218930 calls)
    null        getattr     setattr     lookup      access      readlink
    0 0%        7567 0%     239 0%      24540 2%    3433 0%     0 0%
    read        write       create      mkdir       symlink     mknod
    743 0%      1150738 94% 47 0%       21 0%       0 0%        0 0%
    remove      rmdir       rename      link        readdir     readdirplus
    25352 2%    1162 0%     2 0%        0 0%        0 0%        3113 0%
    fsstat      fsinfo      pathconf    commit
    6 0%        5 0%        0 0%        1962 0%
    Version 4: (0 calls)
    null                compound
    0 0%                0 0%
    Version 4: (0 operations)
    reserved            access              close               commit
    0 0%                0 0%                0 0%                0 0%
    create              delegpurge          delegreturn         getattr
    0 0%                0 0%                0 0%                0 0%
    getfh               link                lock                lockt
    0 0%                0 0%                0 0%                0 0%
    locku               lookup              lookupp             nverify
    0 0%                0 0%                0 0%                0 0%
    open                openattr            open_confirm        open_downgrade
    0 0%                0 0%                0 0%                0 0%
    putfh               putpubfh            putrootfh           read
    0 0%                0 0%                0 0%                0 0%
    readdir             readlink            remove              rename
    0 0%                0 0%                0 0%                0 0%
    renew               restorefh           savefh              secinfo
    0 0%                0 0%                0 0%                0 0%
    setattr             setclientid         setclientid_confirm verify
    0 0%                0 0%                0 0%                0 0%
    write
    0 0%
    
    Client nfs_acl:
    Version 2: (0 calls)
    null        getacl      setacl      getattr     access      getxattrdir
    0 0%        0 0%        0 0%        0 0%        0 0%        0 0%
    Version 3: (709 calls)
    null        getacl      setacl      getxattrdir
    0 0%        708 99%     0 0%        1 0%
    
  • 마운트 지점 지정

    root@wl ~ # nfsstat -m /home/windy
    /home/windy from wl2:/export/home/windy
     Flags:         vers=3,proto=tcp,sec=none,hard,intr,link,symlink,acl,rsize=32768,wsize=32768,retrans=5,timeo=600
     Attr cache:    acregmin=3,acregmax=60,acdirmin=30,acdirmax=60
    
  • 옵션을 주지않으면 모두 표시되기 때문에, 특정한 프로토콜만 본다거나(-v 옵션 사용), 마운트 위치를 지정(-m 옵션 사용)해 보는 것이 더 편할 것이다.
  • RPC 설명

    calls           RPC 콜 회수
    badcalls        RPC 계층에서 거절된 콜 회수(badlen 과 xdrcall 의 합)
    nullrecv        유효하지 않은 RPC콜 회수
    badlen          최소한의 RPC콜 길이보다 짧은 RPC콜 회수
    xdrcall         XDR 디코드 할 수 없는 RPC 콜 회수
    dupchecks       이중 요청 캐시에서 발견된 RPC 콜 개수
    dupreqs         이중 요청 회수
    
  • NFS 설명

    calls           RPC 콜이 만들어진 회수
    badcalls        RPC 계층에서 거절된 콜 회수
    badxids         The number of times a reply  from  a  server
                         was received which did not correspond to any
                         outstanding call.
    timeouts        서버로부터 응답이 없어 타임아웃된 회수
    newcreds        인증정보가 갱신된 회수
    badverfs        The number of times the call failed due to a
                         bad verifier in the response.
    timers          The number of times the calculated  time-out
                         value  was  greater  than  or  equal  to the
                         minimum specified time-out value for a call.
    cantconn        The number of times the call failed due to a
                         failure to make a connection to the server.
    nomem           메모리 할당 실패로 인한 호출 실패 회수
    interrupts      처리가 완료되기전 시그널에 의해 중단된 콜 회수
    retrans         클라이어늩에서 서버로부터 응답을 기다리는 도중 타임아웃되어 재전송한 회수. (connection-less인 경우)
    cantsend        클라이언트에서 RPC 요청을 보낼 수 없는 회수. (connection-less인 경우)
    

솔라리스의 NFS 기본 소개

솔라리스 2009/08/27 13:51 Posted by Sun
솔라리스의 NFS 기본 소개
Vishal Padwal, 2008년 8월

네트워크 파일 시스템 (NFS) 은 클라이언트-서버 어플리케이션으로 유저들이 원격 시스템이 있는 파일들을 마치 로컬 시스템이 있는 것들 처럼 보고 수정하고 저장할 수 있습니다.

참고: 이 팁에서의 정보들은 비록 가끔 NFSv2 와 NFSv3 에 대해 다루기도 하지만 일반적으로 솔라리스9 혹은 10 그리고 NFS 버전 4(NFSv4) 와 관련되어 있습니다.

NFS 환경

NFS 환경은 두가지 컴포넌트들로 구성되어 있습니다:

  • NFS 서버, 다른 시스템들과 공유될 파일 리소스들을 가지고 있음
  • NFS 클라이언트, 네트워크를 통하여 공유된 파일 리소스들을 마운트 함으로써 로컬 시스템에 있는 것 처럼 사용함

NFS 서버 파일

  • /etc/dfs/dfstab 은 부팅시에 공유될 자원들의 목록을 가지고 있음.
  • /etc/nfs/nfslogd.conf NFS 서버 로깅을 위해 사용되는 로그들의 설정 정보들을 정의함.
  • /etc/dfs/sharetab NFS 서버에 의해 현재 공유되는 로컬 리소스들의 목록.
  • /etc/rmtab NFS 클라이언트에 의해 마운트 되는 파일 시스템들의 목록. 절대 수정하지 말것.
  • /etc/nfs/nfslog.conf NFS 서버 로깅을 위해 사용되는 로그들의 설정 정보들에 대한 정보 목록.

dfstab 파일의 포맷

 
# cat /etc/dfs/dfstab
# Place share(1M) commands here for automatic execution
# on entering init state 3.
#
# Issue the command 'svcadm enable network/nfs/server' to
# run the NFS daemon processes and the share commands, after adding
# the very first entry to this file.
#
# share [-F fstype] [-o options] [-d "<text>"] <pathname> [resource]
# .e.g,
# share -F nfs -o rw=engineering -d "home dirs" /export/home2

예를 들어, 읽기 전용 모드로 공유된 /export/home/<dir_name> 홈디렉토리를 가지려고 한다면:

 
share -o ro /export/home/<dir_name>

솔라리스10 에서의 NFS 서버 데몬들

데몬들에 대한 설명:

  • mountd 는 원격 시스템에서의 파일 시스템 마운트 요청을 처리하고 접근 제어 권한을 제공함. NFSv4 에서는 사용되지 않음.
  • nfsmapid 는 NFS 유저 및 그룹 ID 매핑 데몬이고 NFSv4 에서 사용 됨.
  • nfsd 은 NFSv4 에서 사용되고 클라이언트 파일 시스템 요청을 처리함.
  • statdlockd 데몬과 같이 동작하여 크래시 복구 및 락 메니저를 위한 기능들을 제공함.
  • lockd 은 NFS 파일들의 락 작업을 지원함.
  • nfslogd 은 NFSv2 및 v3 에 대한 작업 로깅 기능을 제공함.

솔라리스10 및 NFSv4 에서는 NFS 지원을 위해서 오직 두개의 데몬만이 필요 합니다: nfsmapidnfsd. mountdlockd 데몬은 합쳐 졌고, nfsmapidnfsd 는 NFSv4 내에서 포트 2049 를 통해서 지원되고 이를 통해서 파이어월을 사용하는 환경에서의 NFS 지원을 향상 시켰습니다.

만약 솔라리스10에서 NFSv2 혹은 v3 를 사용하기를 원한다면 모든 데몬들은 지원 됩니다.

NFS 서버 서비스 시작 및 중지 시키기

svc:/network/nfs/server 서비스는 시스템이 런레벨 3에 진입했을때 NFS 서버 데몬을 시작시킵니다.

NFS 서버 데몬을 수동으로 시작시키려고 한다면, 아래의 커맨드를 이용합니다:

 
# svcadm enable svc:/network/nfs/server

NFS 서버 데몬을 수동으로 정지시키려고 한다면, 아래의 커맨드를 이용합니다:

 
# svcadm disable svc:/network/nfs/server

NFS 의존성 확인하기

svcs 커맨드를 이용해서 의존성을 확인합니다:

 
# svcs | grep nfs
# svcs -l nfs/server

NFS 서버 커맨드들

  • shareall/etc/dfs/dfstab 의 구문들을 읽어내서 실행함..
  • shares 는 NFS 서버상의 로컬 디렉토리가 마운트 될 수 있도록 함.
  • dfshares 는 매개변수 없이 실행되면 현재 공유된 리소스들을 보여 줌.
  • dfmount 는 현재 마운트된 NFS 서버상의 디렉토리들의 목록을 보여 줌.
  • unshare 는 파일 리소스들이 더이상 마운트되지 않도록 함.

NFS 서버 설정하기

구문:

 
# share [-F <FSType>] [-o <option>] [<pathname>]

여기서 각각의 옵션은:

  • -F <FSType> 파일 시스템의 종류 지정.
  • -o <option> 공유될 리소스들에 대한 접근 제어 옵션들 지정, 예를 들어 읽기-전용 접근 등.
  • <pathname> 공유하고자 하는 리소스의 절대 경로 이름 지정.

예를 들어 여러분이 /export/home/<dir_name> 디렉토리를 공유하고자 한다면, /etc/dfs/dfstab 파일에 다음과 같은 항목을 생성합니다:

 
#share -F nfs -o ro /export/home/<dir_name>

이 예제에서, -F 는 NFS 파일 시스템을, , -o ro 는 공유된 리소스에 대한 접근이 읽기 전용임을 지정하고, /export/home/<dir_name> 는 해당 리소스의 절대 경로를 나타 냅니다.

유사하게 -o rw 옵션을 이용하고, <pathname> 을 지정함으로써 읽기/쓰기 권한을 모든 클라이언트들에 줄 수 있으며, 또한 -o root=<dir_name> 를 통해서 <dir_name> 디렉토리의 루트 권한을 활성화 시킬 수 있습니다.

파일 리소스 마운트 해제 하기

구문:

 
# unshare [-F <FSType>] [<pathname>]

예를 들어:

 
#unshare -F nfs /export/home/<dir_name>

리모트 파일 시스템 마운트하기

구문:

 
mount [-F <FSType>] [-o <options>] <server>:<pathname> [<mount_point>]

예를 들어:

 
# mount -F nfs -o ro  gladiator:/export/home/<dir_name> /mymountpoint

여기서 각각의 옵션은:

  • Gladiator 는 원격 서버의 이름.
  • /export/home/<dir_name> 은 원격 파일 리소스.
  • /mymountpoint 는 마운트 포인트 이고 /export/home/<dir_name> 은 공유된 리소스임.

또 다른 예제로는:

 
# mount -o ro Gladiator,Sun,Moon :/Central_data /mymountpoint

두번째 예제에서, 만약 Gladiator 시스템에 접근이 불가능하다면, 요청이 Sun 이라고 하는 두번째 시스템으로 자연스럽게 넘어갈 것입니다.

클라이언트에서 원격 파일 시스템 언마운트 하기

구문:

 
umount [<mount_point>]

예를 들어:

 
# umount /mymountpoint

부트 시에 원격 리소스 마운트 하기

원격 파일 시스템을 부트 시에 마운트 하기 위해서, /etc/vfstab 에 항목을 만듭니다.

예를 들어 다음의 항목을 /etc/dfstab 파일에 추가합니다:

 
Gladiator:/export/home/<dir_name>  - /mymountpoint nfs - yes bg

여기서 각각의 옵션은:

  • 마운트 할 디바이스는Gladiator:/export/home/<dir_name>
  • fsck 를 수행할 디바이스는 -
  • 마운트 포인트는 /mymountpoint
  • FS 종류는 nfs
  • fsck pass-
  • 부팅시에 마운트에 대한 여부는yes
  • 마운트 옵션은bg (백그라운드)
Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함