리눅스에서 저장장치 마운트하기

NFS 를 이용한 파일 공유

외부 저장장치를 리눅스의 파일 시스템에 연결하는 것을 마운트라고 합니다. 마운트는 직접 혹은 네트워크를 통해 연결될 수 있습니다. 직접 연결 저장장치(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