NFS 를 이용한 파일 공유
- NFS 는 Network File System 의 약자이다. 1980년대 Sun Microsystems 에서 처음으로 유닉스에서 파일을 공유하기 위해 개발되었다.
- 다른 서버에서 공유해 놓은 디렉토리를 자신의 디렉토리처럼 사용할 수 있다.
- RPC(Remote Procedure Call) 기반 시스템을 사용한다. 한 프로그램이 네트워크 상의 다른 컴퓨터에 위치하고 있는 프로그램에 서비스를 요청하는데 사용되는 프로토콜이다.
외부 저장장치를 리눅스의 파일 시스템에 연결하는 것을 마운트라고 합니다.
마운트는 직접 혹은 네트워크를 통해 연결될 수 있습니다.
직접 연결 저장장치(Direct-attached storage, DAS)와 같은 경우는 네트워크를 거치지 않고 직접 연결되는 형태이며,
네트워크 연결 저장장치(Network-attached storage, NAS)는 네트워크를 거쳐 연결되는 형태입니다.
이러한 상황들에서의 리눅스의 mount
명령을 이용하여 마운트를 하는 방법을 알아봅니다.
다음은 원격 시스템에 존재하는 nfs 파일 형식의 저장장치를 마운트하는 기본 명령어이다.
# mount -t nfs 192.168.1.240:/extdata1 /extdata1
마운트 해제: umount
마운트 해제
umount /extdata1
강제로 마운트 해제
umount -l /extdata1
환경 설정: /etc/exports
마운트가 가능하게 하려면 해당 저장장치를 갖고 있는 원격 서버의 exports 파일에 정보를 기입해주어야 한다. 다음은 두 폴더를 마운트할 수 있게 허락하되, 하나는 읽고 쓰기가 가능하도록(rw) 하고, 다른 하나는 읽기만 가능하도록(ro) 권한을 준 예시 내용이다.
/extdata1 *(rw)
/extdata2 *(ro)
궁금증1: exports 파일이 없으면 어떻게 될까?
NTFS 설치
외장 하드디스크의 마운트가 되지 않을 때 리눅스에 ntfs 라는 파일 시스템에 대한 커널이 설치되어 있지 않은 경우가 있다. 이 때에는 ntfs 를 다음과 같이 설치해 주면 된다. (출처: http://toofasttosee.blogspot.com/2011/01/centos-5-ntfs.html)
# su root
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# yum install fuse fuse-ntfs-3g
자주 접하는 에러들
Could not resolve hostname: Name or service not known
아예 호스트 이름에 매핑된 IP 주소를 찾을 수 없는 경우
[lab@sirna1 ~]$ ssh unknownserver
ssh: Could not resolve hostname unknownserver: Name or service not known
No route to host
찾을 수 없는 IP 주소로 접속하려고 하는 경우
[lab@sirna1 ~]$ ssh 192.168.0.234
ssh: connect to host 192.168.0.234 port 22: No route to host
Buffer I/O error on device
큰 용량의 파일들을 옮길 일이 있어서 외장하드를 mirna3 에 USB 포트로 연결하였더니 자동으로 마운트가 되지 않았다.
그래서 디바이스의 메시지를 확인할 수 있는 dmesg
명령어를 입력하였더니 다음과 같았다.
[lab@mirna3 ~]# dmesg
Buffer I/O error on device sde1, logical block 44
Buffer I/O error on device sde1, logical block 45
Buffer I/O error on device sde1, logical block 46
...
Buffer I/O error on device sde1, logical block 786433
디바이스 이름이 sde1 이라고 잡힌 것은 볼 수 있지만, 마운트하는 과정에서 Buffer I/O 에러가 발생한 모양이었다.
mirna3 에 있는 로그 파일인 /var/log/messages
의 내용도 살펴보면, ntfs 에 관련된 에러가 있음을 확인할 수 있었다.
[lab@mirna3 ~]# less /var/log/messages
Jun 4 12:52:37 mirna3 ntfs-3g[36300]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jun 4 12:52:37 mirna3 ntfs-3g[36300]: Failed to read of MFT, mft=5 count=1 br=-1: Input/output error
Jun 4 12:52:37 mirna3 kernel: Buffer I/O error on device sde1, logical block 786433
알아보니 mirna3 에 ntfs 가 설치되어 있지 않아 발생한 에러였다. 다음과 같이 ntfs 를 설치한 후 ntfs 서비스가 제대로 작동하는지 확인한다.
[lab@mirna3 ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
[lab@mirna3 ~]# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
[lab@mirna3 ~]# yum install fuse fuse-ntfs-3g
[lab@mirna3 ~]# service nfs status
rpc.svcgssd is stopped
rpc.mountd (pid 26763) is running...
nfsd (pid 26779 26778 26777 26776 26775 26774 26773 26772) is running...
rpc.rquotad (pid 26747) is running...
다시 마운트를 시도해 보니 문제없이 잘 되는 것을 확인할 수 있었다.
[lab@mirna3 ~]# mount -t ntfs /dev/sde1 /usbdata
RPC Error: Program not registered
마운트를 제공하는 서버 측 컴퓨터의 nfs 서비스가 작동중이지 않아서 에러가 나는 경우이다. 다음과 같이 상태를 확인할 후 시작 해주면 된다.
service nfs status
service nfs start
Device is busy
마운트 오류로 인해 마운트 해제도 되지 않을 때에는 어떻게 해야 하나? 아래와 같이 -l
옵션을 사용하자.
umount -l /extdata1
Access denied by server
IP 주소가 192.168.10.253
인 컴퓨터의 /external
폴더를 마운트 하려고 했는데, 다음과 같은 에러가 발생했습니다.
# mount -t nfs 192.168.10.253:/external /mnt/external
mount.nfs: access denied by server while mounting 192.168.10.253:/external
서버로부터 접근이 허가되지 않아 접속이 불가능한 경우입니다. 데이터를 제공하는 서버 컴퓨터 192.168.10.253
에서의
/etc/exports
파일에 해당 폴더에 대한 접근 권한을 설정하지 않았을 경우 발생합니다. 관리자 권한으로 exports
파일을
열어 다음과 같이 해당 폴더에 대한 접근 권한을 설정합니다.
# /etc/exports
/external *(rw,no_root_squash,async)
세 가지의 항목을 설정할 수 있습니다: (1) 공유할 디렉토리명, (2) 접근을 허용할 IP 주소, (3) 공유 옵션. exports
파일에는
디렉토리 별로 한 줄씩 내용을 추가하면 됩니다. 파일을 수정하였으면 저장하고 exportfs -a
을 실행하여 적용합니다.
rpc.statd is not running but is required for remote locking.
kt-hpc 클러스터의 master 노드에서 isilon 을 마운트 하려고 할 경우 다음과 같은 에러 메시지가 나타났다.
[root@master lab]# mount -t nfs 192.168.1.102:/ifs/isilon1 /extdata6
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
방화벽 문제로 추정된다. /etc/hosts.allow
파일에 마지막 줄을 추가하여 해결하였다.
[root@master /]# cat /etc/hosts.allow
#
# hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
ALL: 123.45.
ALL: 123.46.
ALL: 192.168.1.
ALL: 10.1.
rpcbind: ALL