원격에 있는 파일시스템을 사용하기 위해서 사용할 수 있는 방법 중에 가장 유명하고 대중적인 NFS.
NFS(Network File System)는 SUN에서 개발한 RPC(Remote Procedure Call) 기반 시스템이다.
NFS를 사용하는 것은 2대의 PC 사이에서 이루어지는 Server-Client 구조다.
[ Server ]
우선 Server 패키지를 설치해야 한다.
$ sudo apt-get install nfs-kernel-server
제공해줄 디렉토리를 하나 생성해준다.
디렉토리 생성을 꼭 sudo 권한으로 할 필요는 없다. 중요한 것은 777 권한을 부여해주어야 하는 것이다.
그런 다음 필요한 것은, 공유하고 싶은 내용을 환경 설정을 해줘야 한다.
※ VirtualBox 내부 통신을 위해서는 : http://nan1004au.tistory.com/18
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/srv/nfs 192.168.56.*(rw,no_root_squash,sync,no_subtree_check)
당연히 알겠지만, 위의 IP에서 *표는 각자의 실제 IP로 대체할 수 있다.
그리고 사용할 수 있는 옵션이 엄청 많지만...
필자는 (rw,no_root_squash,sync,no_subtree_check) 정도만으로도 충분한 것 같다.
온갖 인터넷 서핑을 하고, man 내용 살펴보고, 나름 발번역도 해보고 해서 아래와 같이 정리는 했지만
실제 모든 옵션을 테스트 해보지는 않아서 설명이 올바른지는 확인하지 못했다.
옵션 | 기본값 | 설명 |
ro / rw | 파일 시스템을 읽기 전용으로 하거나 read-write 가능하도록 마운트 | |
root_squash / no_root_squash |
no_root_squash | 이 옵션을 사용하면, 로컬 사용자와 원격 사용자를 모두 ID 0 즉 root로 취급한다. 따라서 원격 사용자는 파일과 디렉토리에 대한 모든 권한을 획득할 수 있다. 모든 유저를 믿을 수 있다면, 편리하게 사용할 수 있지만 보안에 취약할 수 있다. 서버와 클라이언트의 root 사용자를 같도록 설정한다. Default 값으로 루트 사용자의 사용자 ID와 그룹 ID는 모두 0 이다. 이 옵션을 사용하시면 익명 사용자의 사용자 ID와 그룹 ID에 사용자 ID 0와 그룹 ID 0를 부여하여 원격 루트 사용자를 로컬 루트로 취급한다. 따라서 클라이언트 상의 루트 사용자는 디렉토리를 내보내기할 수 있는 권한을 갖게 된다. 이 옵션을 선택하시면 시스템 보안이 매우 약해진다. 절대로 필요한 상황이 아니면 root_squash 옵션을 선택하지 마라. |
all_squash / no_all_squash |
no_all_squash | 클라이언트 사용자를 익명(anonymous) 사용자로 취급한다. 이 옵션이 선택되면 모든 사용자 ID와 그룹 ID는 익명 사용자로 취급된다. [no_all_squash] root 이외의 모든 사용자에 대해 같은 UID를 갖는 사용자는 동일한 권한을 준다. 모든 사용자는 nobody. (default) |
anonuid | 익명 사용자를 위한 사용자 ID를 지정하실 수 있다. | |
anongid | 익명 사용자를 위한 그룹 ID를 지정하실 수 있다. | |
insecure | 인증되지 않은 액세스도 가능 | |
sync / async | 파일을 쓸때 서버와 클라이언트 싱크를 맞춘다. 서버는 데이터가 저장소에 안전히 쓰였음을 확인 한 후, 응답을 보낸다. 변경 사항을 디스크에 기록하기 전에는 서버가 요청에 응답하는 것을 허용하지 않는다. [async] sync 옵션을 사용하지 않는 경우에 해당 한다. 서버는 데이터가 저장소에 안전히 저장됐는지를 확인하지 않는다. 클라이언트의 데이터 쓰기 요청이 들어오면 바로 응답을 보낸다. 데이터 curruption이 발생할 수 있지만 성능 향상을 기대할 수 있다. | |
no_subtree_check | 파일 시스템의 전체 디렉토리가 아닌 하부 디렉토리가 내보내진 경우, 서버는 내보낸 하부 디렉토리에 요청된 파일이 존재하는지를 검사한다. 이러한 검사 과정을 하부구조 검사라고 부른다. 이 옵션을 선택하시면 하부구조 검사를 사용하지 않는다. 전체 파일 시스템이 내보내진 경우에 이 옵션을 선택하면 하부구조 검사를 하지 않음으로서 전송률을 높일 수 있다. | |
no_wdelay | 즉시 쓰기 작업 동기화를 강제한다. 즉, 즉시 디스크에 기록한다. |
설정을 모두 마쳤으면, 재시작!
$ sudo service nfs-kernel-server restart
[ Client ]
NFS를 사용하기 위한 기본 패키지를 설치하자.
$ sudo apt-get install nfs-common
마운트하여 사용할 디렉토리를 생성하자.
$ sudo mkdir ./nfsclient
다시 한 번 말하지만, 꼭 sudo 권한으로 할 필요는 없다.
실제 사용할 목적에 맞춰서 적절히 권한을 설정해주면 된다.
이제 mount를 하면 된다.
$ sudo mount -t nfs -o nolock 10.89.54.*:/srv/nfs /srv/nfsclient
위와 같이 따라하면 일단, NFS를 이용해서 원격으로 접근하여 파일시스템을 사용할 수 있다.
당연히 알겠지만 위의 IP 부분은 NFS Server를 하고 있는 아이의 IP로 적어주면 된다.
하지만, 우리가 원하는 것은... 재부팅을 하여도 계속 연결되어 있는 파일시스템일 것이다.
그렇게 하기 위해서는 아래와 같이 fstab 설정을 진행하여주면 된다.
[ fstab for NFS ]
파일시스템을 관리하기 위해 종종 사용했을 것이다.
일반적인 스타일로는 아래와 같이 진행하면 된다.
< 옵션 >
옵션 | 기본값 | 설명 |
auto / noauto | auto | 부팅시 자동 마운트 여부 |
exec / no exec | exec | 실행파일이 실행되는 것을 허용 여부 |
ro / rw | rw | (read only) or (read write) |
suid / nosuid | suid | setuid, setgid의 사용 허용 여부 |
user / nouser | nouser | 일반 계정 사용자들도 마운트 할 수 있도록 하거나 root만 mount 가능 |
usrquota | 일반 사용자 quota적용 | |
grpquota | 그룹 quota 적용 |
< dump >
0 : 덤프되지 않은 파일시스템
1 : 데이터 백업을 위해 dump가능
< 파일점검 >
0 : 부팅시 fsck를 사용하지 않음
1 : 루트 파일시스템을 의미
2 : 루트 파일시스템 이외의 파일시스템을 의미
하지만, 일반적으로 fstab을 사용한다고 하면 위의 옵션들로 충분하지만,
우리는 조금 특이한 NFS를 사용을 하기에 조금 다른 옵션들을 사용할 수 있다.
하지만 아래 내용은 인터넷 짜집기와 나름의 발번역으로 정리한 것이다.
실제 옵션을 모두 확인해보지는 못했기에 보증하지는 못하겠다.
옵션 | 기본값 | 설명 |
rsize=n | The number of bytes NFS uses when reading files from an NFS server. The rsize is negotiated between the server and client to determine the largest block size that both can support. The value specified by this option is the maximum size that could be used; however, the actual size used may be smaller. Note: Setting this size to a value less than the largest supported block size will adversely affect performance. | |
wsize=n | The number of bytes NFS uses when writing files to an NFS server. The wsize is negotiated between the server and client to determine the largest block size that both can support. The value specified by this option is the maximum size that could be used; however, the actual size used may be smaller. Note: Setting this size to a value less than the largest supported block size will adversely affect performance. | |
timeo=n | The value in tenths of a second before sending the first retransmission after an RPC timeout. The default value is 7 tenths of a second. After the first timeout, the timeout is doubled after each successive timeout until a maximum timeout of 60 seconds is reached or the enough retransmissions have occured to cause a major timeout. Then, if the filesystem is hard mounted, each new time-out cascade restarts at twice the initial value of the previous cascade, again doubling at each retransmission. The maximum timeout is always 60 seconds. Better overall performance may be achieved by increasing the time-out when mounting on a busy network, to a slow server, or through several routers or gateways. | |
retrans=n | 3 | The number of minor timeouts and retransmissions that must occur before a major timeout occurs. When a major timeout occurs, the file operation is either aborted or a "server not responding" message is printed on the console. |
acregmin=n | 3 | The minimum time in seconds that attributes of a regular file should be cached before requesting fresh information from a server. |
acregmax=n | 60 | The maximum time in seconds that attributes of a regular file can be cached before requesting fresh information from a server. |
acdirmin=n | 30 | The minimum time in seconds that attributes of a directory should be cached before requesting fresh information from a server. |
acdirmax=n | 60 | The maximum time in seconds that attributes of a directory can be cached before requesting fresh information from a server. |
actimeo=n | Using actimeo sets all of acregmin, acregmax, acdirmin, and acdirmax to the same value. There is no default value. | |
retry=n | The number of minutes to retry an NFS mount operation in the foreground or background before giving up. The default value for forground mounts is 2 minutes. The default value for background mounts is 10000 minutes, which is roughly one week. | |
namlen=n | 255 | NFS 서버가 RPC 마운트 프로토콜의 버전 2를 지원하지 않을 때 원격 파일 시스템에서 지원되는 파일명의 길이를 명시한다. POSIX pathconf 함수를 지원하기 위해서 사용된다. |
port=n | The numeric value of the port to connect to the NFS server on. If the port number is 0 (the default) then query the remote host's portmapper for the port number to use. If the remote host's NFS daemon is not registered with its portmapper, the standard NFS port number 2049 is used instead. | |
proto=n | Mount the NFS filesystem using a specific network protocol instead of the default TCP protocol. Valid protocol types are udp and tcp. | |
mountport=n | mountd 포트 번호 지정하기 | |
mountprog=n | 100005 | 원격 호스트의 마운트 데몬과 접속하기 위해 사용할 수 있는 별도의 RPC 프로그램 번호를 정한다. NFS 서버를 여러 개 운영하고 있을 때 유용하다. |
mountvers=n | Use an alternate RPC version number to contact the mount daemon on the remote host. This option is useful for hosts that can run multiple NFS servers. The default value depends on which kernel you are using. | |
nfsprog=n | 100003 | 원격 호스트의 NFS 데몬과 접속하기 위해 사용하는 별도의 RPC 프로그램 번호를 정한다. NFS 서버를 여러 개 운영하고 있을 때 사용한다. |
nfsvers=n | 원격 호스트의 NFS 데몬과 접속하기 위해 사용하는 별도의 RPC 버전 번호를 정한다. NFS 서버를 여러 개 운영하고 있을 때 사용한다. | |
vers=n | vers is an alternative to nfsvers and is compatible with many other operating systems. | |
nolock | Disable NFS locking. Do not start lockd. This has to be used with some old NFS servers that don't support locking. | |
bg | If the first NFS mount attempt times out, retry the mount in the background. After a mount operation is backgrounded, all subsequent mounts on the same NFS server will be backgrounded immediately, without first attempting the mount. A missing mount point is treated as a timeout, to allow for nested NFS mounts. | |
fg | If the first NFS mount attempt times out, retry the mount in the foreground. This is the complement of the bg option, and also the default behavior. | |
soft | If an NFS file operation has a major timeout then report an I/O error to the calling program. The default is to continue retrying NFS file operations indefinitely. | |
hard | If an NFS file operation has a major timeout then report "server not responding" on the console and continue retrying indefinitely. This is the default. | |
intr | If an NFS file operation has a major timeout and it is hard mounted, then allow signals to interupt the file operation and cause it to return EINTR to the calling program. The default is to not allow file operations to be interrupted. | |
posix | POSIX 규칙을 사용하여 NFS 파일 시스템을 마운트한다. 파일명 최대 길이에 POSIX pathconf 함수를 제대로 지원을 위해서 사용된다. 원격 호스트는 RPC 마운트 프로토콜 버전 2를 지원해야 한다. 많은 NFS 서버들이 아직 버전 1만을 지원하고 있다. | |
nocto | Suppress the retrieval of new attributes when creating a file. | |
noac | Disable all forms of attribute caching entirely. This extracts a significant performance penalty but it allows two different NFS clients to get reasonable results when both clients are actively writing to a common export on the server. | |
noacl | Disables Access Control List (ACL) processing. | |
resvport/noresvport |
Specifies whether the NFS client should use a privileged source port when communicating with an NFS server for this mount point. If this option is not specified, or the resvport option is specified, the NFS client uses a privileged source port. If the noresvport option is specified, the NFS client uses a nonprivileged source port. | |
sec=mode | Set the security flavor for this mount to "mode". The default setting is sec=sys, which uses local unix uids and gids to authenticate NFS operations (AUTH_SYS). Other currently supported settings are: sec=krb5, which uses Kerberos V5 instead of local unix uids and gids to authenticate users; sec=krb5i, which uses Kerberos V5 for user authentication and performs integrity checking of NFS operations using secure checksums to prevent data tampering; and sec=krb5p, which uses Kerberos V5 for user authentication and integrity checking, and encrypts NFS traffic to prevent traffic sniffing (this is the most secure setting). Note that there is a performance penalty when using integrity or privacy. | |
tcp / udp | tcp | 많은 NFS 서버들이 UDP만을 지원하지만, TCP 프로토콜을 사용할 수도 있다. |
nordirplus | Disables NFSv3 READDIRPLUS RPCs. Use this options when mounting servers that don't support or have broken READDIRPLUS implementations. | |
nosharecache | As of kernel 2.6.18, it is no longer possible to mount the same same filesystem with different mount options to a new mountpoint. It was deemed unsafe to do so, since cached data cannot be shared between the two mountpoints. In consequence, files or directories that were common to both mountpoint subtrees could often be seen to be out of sync following an update. This option allows administrators to select the pre-2.6.18 behaviour, permitting the same filesystem to be mounted with different mount options. Beware: Use of this option is not recommended unless you are certain that there are no hard links or subtrees of this mountpoint that are mounted elsewhere. | |
lookupcache=type |
This option dictates how directories and files should be cached when they are accessed -- i.e. "looked up" -- on the server. A lookup can be either positive (directory/file was found) or negative (directory/file was not found); both types of lookups can be cached. |
특히, NFS4를 위해서는 더 다양한 옵션이 있다. 사실 그리 반갑지는 않다.
특히 전체를 테스트해보지 못했다라는 것이 개인적으로는 무언가 아쉽다.
옵션 | 기본값 | 설명 |
rsize=n | The number of bytes nfs4 uses when reading files from the server. The rsize is negotiated between the server and client to determine the largest block size that both can support. The value specified by this option is the maximum size that could be used; however, the actual size used may be smaller. Note: Setting this size to a value less than the largest supported block size will adversely affect performance. | |
wsize=n | The number of bytes nfs4 uses when writing files to the server. The wsize is negotiated between the server and client to determine the largest block size that both can support. The value specified by this option is the maximum size that could be used; however, the actual size used may be smaller. Note: Setting this size to a value less than the largest supported block size will adversely affect performance. | |
timeo=n | The value in tenths of a second before sending the first retransmission after an RPC timeout. The default value depends on whether proto=udp or proto=tcp is in effect (see below). The default value for UDP is 7 tenths of a second. The default value for TCP is 60 seconds. After the first timeout, the timeout is doubled after each successive timeout until a maximum timeout of 60 seconds is reached or the enough retransmissions have occured to cause a major timeout. Then, if the filesystem is hard mounted, each new timeout cascade restarts at twice the initial value of the previous cascade, again doubling at each retransmission. The maximum timeout is always 60 seconds. | |
retrans=n | 5 / 2 |
주 타임아웃을 발생하기 전에 부 타임아웃과 재전송 횟수를 정한다. (proto=udp)인 경우에는 5, (proto=tcp)인 경우에는 2가 기본값이다. 주 타임아웃이 일어나면 파일 작업이 중지되거나 콘솔 상에 "server not responding" 메시지가 출력된다. |
acregmin=n | 3 | 서버에게 최신 정보를 요청하기에 앞서 일반 파일의 속성이 캐쉬되어야 할 시간의 최소값을 정한다. |
acregmax=n | 60 | 서버에게 최신 정보를 요청하기에 앞서 일반 파일의 속성이 캐쉬되어야 할 시간의 최대값을 정한다. |
acdirmin=n | 30 | 서버에게 최신 정보를 요청하기에 앞서 디렉토리의 속성이 캐쉬되어야 할 시간의 최소값을 정한다. |
acdirmax=n | 60 | 서버에게 최신 정보를 요청하기에 앞서 디렉토리의 속성이 캐쉬되어야 할 시간의 최대값을 정한다. |
actimeo=n | 이 값을 다음 acregmin, acregmax, acdirmin, acdirmax에 똑같이 적용한다. | |
retry=n | 2 / 10000 | 포그라운드 또는 백그라운드에서 진행 중인 NFS 마운트 작업이 포기하기 전까지 실행할 시간(분, minutes)을 정한다. 포그라운드의 경우 2분, 백그라운드는 10000분(약 1주)이 기본값이다. |
port=n | 0 / 2049 | NFS 서버와 연결할 수 있는 포트 번호를 정한다. 만약 0이라면 원격 호스트의 portmapper에게 질의하여 알아내도록 하고, 포트매퍼에 NFS 데몬이 등록되어 있지 않은 경우에는 2049라는 표준 NFS 포트 번호가 사용된다. |
proto=n | Mount the NFS filesystem using a specific network protocol instead of the default TCP protocol. Valid protocol types are udp and tcp. Many NFS version 4 servers only support the TCP protocol. | |
clientaddr=n | On a multi-homed client, this causes the client to use a specific callback address when communicating with an NFS version 4 server. This option is currently ignored. | |
sec=mode | Same as sec=mode for the nfs filesystem type (see above). | |
bg / fg | fg | 첫번째 NFS 마운트 시도에서 타임아웃이 걸리면 포그라운드로 실행하거나 (fg), 타임아웃 걸리면 백그라운드에서 실행(bg)을 하도록 한다. bg 옵션을 보완하는 것이 fg 옵션이다. After a mount operation is backgrounded, all subsequent mounts on the same NFS server will be backgrounded immediately, without first attempting the mount. A missing mount point is treated as a timeout, to allow for nested NFS mounts. |
soft / hard | hard | NFS 파일 작업에서 주 타임아웃이 걸리면 콘솔상에 "server not responding"이라고 출력하고 무한히 재시도하하거나(hard) 프로그램에게 I/O 에러를 보고한다(soft). |
intr | (none) | 주 타임아웃이 생기고 하드 마운트된 상태라면 파일 작업을 중지하도록 시그널을 보내도록 허용하고 EINTR 시그널을 보낸다. 기본값은 파일 작업을 인터럽트하지 않는 것이다. |
nocto | 파일이 생성될 때 새로운 속성을 검색하는 것을 금한다. | |
noac | 모든 속성 캐쉬를 못하게 하고, 강제로 동기를 맞춰서 쓴다. 서버 효율을 떨어뜨리기는 하지만 두 개의 다른 NFS 클라이언트로 하여금 서버 상의 공통 파일 시스템에 쓰기 작업을 할 때 좋은 효율을 얻을 수 있게 해준다. | |
nosharecache | As of kernel 2.6.18, it is no longer possible to mount the same filesystem with different mount options to a new mountpoint. It was deemed unsafe to do so, since cached data cannot be shared between the two mountpoints. In consequence, files or directories that were common to both mountpoint subtrees could often be seen to be out of sync following an update. This option allows administrators to select the pre-2.6.18 behaviour, permitting the same filesystem to be mounted with different mount options. Beware: Use of this option is not recommended unless you are certain that there are no hard links or subtrees of this mountpoint that are mounted elsewhere. | |
lookupcache=type | This option dictates how directories and files should be cached when they are accessed -- i.e. "looked up" -- on the server. A lookup can be either positive (directory/file was found) or negative (directory/file was not found); both types of lookups can be cached. By default, both positive and negative lookups are cached (lookupcache=all ). lookupcache=pos prevents negative lookups from being cached, while lookupcache=none prevents all lookups from being cached. Note: lookupcache=none can adversely affect performance, but may be necessary if shared files created or deleted on the server need to be immediately visible to any applications running on NFS clients. |
무언가 옵션이 엄청 많고 하나 하나 설정을 해주면 좋을 것 같은데,
개인적으로 이만큼 알아보는 것만으로도 정말 많은 시간을 빼앗기다보니.... 일일이 테스트해보지를 못했다.
정말 아쉽기는 한데, 구글링을 열심히 해봐도 저 많은 옵션을 일일이 셋팅하는 경우가 많지는 않아서 안심이다.
일단 아래와 같이 정말 간단하게 해보자.
당연히 [ NFS Client ]에서 수행하는 것이다.
192.168.56.102:/srv/nfs /srv/nfsclient nfs defaults 0 0
입력을 잘하였으면 이제는 잘 동작하는지 확인을 해볼차례다. 재부팅!!!! 고고!!!
재부팅 후에 설정한 디렉토리를 살펴보자. 잘 연결되어 있으면 성공!!!
위와 같이 그대로 했을 때 필자는 성공을 했으므로
만약 여러분이 그대로 했는데 안되었다면 무언가 중간에 놓친 것이 있거나 상황이 다른 것이니 확인을 해보기 바란다.
이 외에 Firewall 환경에서의 포트 제한 등에 대해서는 다른 포스트로 설명하도록 하겠다.
'OS > Ubuntu' 카테고리의 다른 글
fcitx : 한글 입력기 (Ubuntu 14.04) (2) | 2014.08.11 |
---|---|
NFS 포트 제한하기 - 방화벽 환경 (Ubuntu 14.04) (0) | 2014.08.10 |
대용량 더미 파일 만들기 (Ubutnu 14.04 64bit) (0) | 2014.06.22 |
HDD 추가 하기 (Ubuntu 14.04 LTS 64bit) (4) | 2014.06.22 |
한글입력기 nabi 설치하기 (Ubuntu 14.04 LTS 64bit, Package) (0) | 2014.06.07 |