우분투: autofs 설정 및 사용(NFS 자동 마운트)

며칠 전에 이런 글을 쓴 적이 있다.

위 글의 목적은, NFS 로 마운트 되어 있는 디렉토리를 Amarok 이 실행하면서 먼저 마운트를 하도록 하게끔 하는데 있었다. (“하도록 하게끔 하는데”?? 표현이 너무 길다. 적절한 다른 좋은 문구가 떠오르질 않는다.)

저 글에선 timeout 이란 쓸만한 명령을 이용했는데, 지금 시점에서 보면 그게 그냥 다였다.
더 좋고, 더 제대로된 방법은 바로 이 글에서 아래에 써내려갈 내용이 되겠다.


리눅스에서 마운트라하면 /etc/fstab 를 떠올린다. 사실, autofs 를 알게 되기 전까지는, 다른 방법은 알지 못했다.

** 이 글에는 NFS 에 관한 내용만 있음을 미리 밝힌다.

/etc/fstab 에 NFS 를 마운트하려면, 먼저 해당 프로그램을 설치해줘야 한다. (서버는 설치/설정돼 있다고 가정)

sudo apt install nfs-common

그리고 /etc/fstab 에 이런 내용을 추가한다.

192.168.0.55:/mnt/Video /mnt/Video-Nfs    nfs  noauto,user,wsize=262144,rsize=262144 0 0

만약, 서버가 24/7 동안 살아있다면, noauto 도 필요없고 user 도 필요없다. 그냥 일반 디스크드라이브처럼 고삐를 죄어 주면 된다.

그러나, 서버가 꺼져있을 경우, noauto 없이 fstab 에 마운트를 하면 부팅 시에 오류가 발생하고, 부팅은 실패해버린다.
그래서 noauto 를 줘야 하는데, 이렇게 되면 해당 디렉토리(nfs 로 마운트된)를 사용하기 전에, 반드시 사용자가 그 디렉토리를 마운트해줘야 하는 수고가 필요하다.
CLI 로는 mount /해당디렉토리를 해야하고, GUI 파일관리자에선, 해당 디렉토리를 클릭 해줘야 하니 어렵지는 않지만, 위 글의 Amarok 같은 문제가 생길 수도 있다.

다시 말해서, 이런 ‘귀찮은’ 상황이 생길 수도 있다.

  • NFS 서버에 음악 파일들이 모두 들어있다.
  • 클라이언트는 NFS 서버의 음악 폴더를 마운트하고(/mnt/Music)
  • Amarok 은 이 디렉토리(/mnt/Music)를 라이브러리로 사용한다.

따라서, Amarok 을 사용하기 위해선 반드시 NFS 음악 폴더를 먼저 마운트 해줘야만 한다.
만약 마운트 작업을 해주지 않고 Amarok 을 실행하면, 비어있는(또는 아예 없는) 디렉토리를 라이브러리로 생각하게 되므로, Amarok 실행을 끝내고, 마운트를 해주고 나서 다시 Amarok 을 실행해야 하는, 그야말로 귀찮은 상태가 된다. 이러는 와중에 라이브러리 DB가 날아간 적도 있었다.

이런 현상을 미연에 방지하고, 네트웍 부하도 줄이려면, Autofs 가 답이 될 수 있다.
그래서, Autofs 의 이점이 뭐냐고?

“내가 일부러 마운트를 하지 않아도, 해당 디렉토리(마운트 포인트)에 접근하기만 해도 자동으로 마운트가 이뤄진다.”
다시 말해서, /mnt/Doc 이라는 위치에 NFS 서버가 마운트 되어있고, 여기에 있는 abc.txt 라는 파일을 문서편집기가 편집하고 있었다고 한다.
PC 를 재부팅한 경우, 다시금 /mnt/Doc/abc.txt 문서를 불러오려면 /mnt/Doc 을 일단 마운트를 한 뒤, 문서편집기를 시작하여 이 문서를 다시 불러와야 한다.

그러나!
Autofs 가 작동 중이라면, 그냥 문서편집기를 연 뒤, ‘최근 문서’에서 abc.txt 를 선택하기만 하면된다.
마운트 작업은 Autofs 가 자동으로 해준다.
심지어 해당 디렉토리를 일정 시간 이상 사용하지 않을 경우, 자동으로 unmount 작업도 해준다.

그야말로 자동이다.


다음 글들에서, 내가 원하는 거의 대부분을 찾을 수 있었다.

나중에 언급하겠지만, etc/autofs.conf 의 umount_wait 설정에 관한 단서는 어디서도 찾지 못했다.
(심지어 개발자가 누구인지, 개발자가 소스코드를 어디에 공개하고 있는지도..)

autofs 는 기본 설치가 돼 있지 않으므로, 설치를 먼저 해줘야 한다.

sudo apt install autofs

설치는 늘 그렇듯 쉽다. 설정 방법이 다소 생소한데, 아래에 간략하게 정리해본다.

우분투 기준, 기본 설정파일은 다음 2개다.

  • /etc/auto.master
  • /etc/autofs.conf

/etc/auto.master : 마운트에 관한 설정. 마운트 포인트, 마운트할 서버 주소 등등.
/etc/autofs.conf : Autofs 자체 설정. 한군데를 제외하곤 딱히 바꿀 부분은 없다.

/etc/auto.master 파일엔 마운트 포인트, 즉, NFS 디렉토리가 마운트될 내 PC 의 디렉토리 위치와, 서버에 대한 설정을 할 수 있다. 이런 설정을 Map 이라 부른다.
이 맵에는 두가지 방식이 있는데, Direct and Indirect 로서, 여기서는 Indirect 방식을 따랐다.

Autofs 에서도, 다른 서비스(/etc/apt/sources.list.d 등등)와 비슷하게 직접 설정 파일을 편집하지 않고, /etc/auto.master.d/ 에 설정 파일(*.autofs)을 생성하여 내용을 추가해도 같은 결과를 낼 수 있다. 이 편이 설정파일을 보관/관리하기가 좀 더 편리하다.

/etc/auto.master 든, /etc/auto.master.d/myset.autofs 든, 아래와 유사한 설정이 필요하다.

/mnt/Music    /etc/auto.master.d/auto.nfs-Music --timeout=60
  • /mnt/Music : 서버를 마운트할 내 PC 의 디렉토리.
  • /etc/auto.master.d/auto.nfs-Music : /mnt/Music 에 마운트될 서버에 대한 설정 파일.
  • –timeout=60 : 서버에 접근이 없을 경우, 몇 초 뒤에 마운트를 끊을지. 이 설정대로라면, 60초 동안 /mnt/Music 디렉토리를 사용하지 않을 경우 자동 unmount 가 된다.

일단, /etc/auto.master.d/ 디렉토리에 생성될 파일은 확장자가 autofs 라야 한다. 즉, *.autofs 만이 자격이 있다.
이 내용은 auto.master 파일에 다음과 같이 명시되어 있다.

# Include /etc/auto.master.d/*.autofs
# The included files must conform to the format of this file.

이제 설정 내용을 보자면,

  • 첫번째는 마운트 포인트이고,
  • 두번째는 이 마운트 포인트에 마운트할 설정 내용을 ‘외부 파일’에 지정해주고 있다.
  • 마지막은 각종 선택사항이다.

설정 파일에, 또 다른 설정 파일(Map 파일)을 명시해야 한다는 게 좀 헷갈리는 점이다.

그리고, 이 Map 파일에도 이름 명명 규칙이 있는 모양이다.
이건 Ubuntu 문서에 다음과 같이 명시되어 있다.

3.2. Map Files
As indicated above, each autofs mount has its own map file. These files are usually named using the convention auto., where can be anything as long as it matches an entry in auto.master and is valid for a file-name.

‘Usually’ 라는 표현이 있는 걸로 봐선 100% 지켜야하는 규칙은 아닌 듯 하지만, 지켜주는 게 관리하는데 편하다.

따라서, Map 파일의 이름은, auto.XXXXX 식으로 붙여줘야 한다.
Map 파일 위치는 어디에 있든 상관은 없다. auto.master 파일에서 위치를 명시해줬기 때문이다.


/etc/auto.master.d/auto.nfs-Music 에는, /etc/fstab 에 들어가는 내용과 유사한 내용이 들어간다.

내용은 이런 모양으로 돼 있다.

# 한글, 또는 공백이 들어간 마운트 포인트를 주려면 따옴표를 붙여야 한다.
#"비디오-Nfs"		-soft,intr	192.168.0.55:/mnt/Video
Music-Nfs           -soft,intr,wsize=131072,rsize=131072 192.168.0.55:/mnt/Music
"Games Nfs"           -soft,intr,wsize=131072,rsize=131072 192.168.0.55:/mnt/Games

첫번째는 역시 마운트 포인트 위치를 나타낸다. 영문자는 그냥 써주면 되는데, 한글을 사용하거나, 공백이 들어갔을 경우는 따옴표로 묶어줘야 한다.
이 디렉토리들은 /etc/fstab 을 사용할 때와 달리, 미리 만들어줄 필요는 없다. (이걸 Ghost 기능이라고 하는 듯 한데, 정확한 건지는 모르겠다.)
그런데, 위의 Music-Nfs 의 위치는 어디일까?
여기는 /mnt/Music/Music-Nfs가 된다. /mnt/Music 은, auto.master 에서 설정한 위치다.
auto.master 에 설정한 최초 마운트 포인트 아래에, auto.nfs-Music 파일 내에 있는 하부 마운트 포인트 위치가 자리잡게 된다. (좀 복잡하다…)

중간 soft, intr 등등은 nfs 마운트에 관한 세부설정 사항이다. nfs 설명서 참고.

마지막엔 nfs server 주소및, 공유한 디렉토리 위치를 넣어준다. 서버:디렉토리
여기서 서버는 이름으로 넣어줘도 되는데, 개인이 사용하는 서버라면 DNS 등은 무리이므로, 그냥 각각 컴퓨터의 /etc/hosts 를 편집해서 다음과 같이 서버 이름을 부여해주는 방법을 쓴다.

$ cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	nemo-Desktop
192.168.0.55	mysilo
192.168.0.60	yoursilo

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

192.168.0.55 mysilo, 192.168.0.60 yoursilo 처럼, 해당 PC(서버)의 IP 를 적어주고, 이름을 정해준다.
그리고 나면, /etc/auto.master.d/auto.nfs-Music 을 이렇게도 쓸 수 있다.

# 한글, 또는 공백이 들어간 마운트 포인트를 주려면 따옴표를 붙여야 한다.
#"비디오-Nfs"		-soft,intr	mysilo:/mnt/Video
Music-Nfs           -soft,intr,wsize=131072,rsize=131072 mysilo:/mnt/Music
"Games Nfs"           -soft,intr,wsize=131072,rsize=131072 mysilo:/mnt/Games

설정은 이 정도면 마무리됐다.
Map 파일에 *(Wild card)를 사용할 수도 있는데, 이 부분은 위에 연결해놓은 문서들에 설명이 나와있다.


마지막으로.. (글을 한번에 끝냈어야 하는데, 며칠을 두고 너무 오래쓰다보니 집중력이 떨어졌다. 쓰고 싶었던 내용이 다 담겼는지 확인이 어려울 정도.)

중요하다고도 할 수 있는 /etc/autofs.conf 파일 설정 중, ‘browse_mode‘에 대해 간단히 설명한다.

Autofs 의 한가지 단점이라면, 해당 디렉토리를 적어도 한번은 ‘접근’해줘야 한다는 점을 들 수 있다.
예를 들어, 위에서 마운트한 /mnt/Music/Music-nfs 의 경우, 이 디렉토리를 ls 해주거나, 어떤 프로그램이든지 저 디렉토리를 열려고 할 때 자동으로 마운트가 된다.

마운트가 되지 않은 상황에서 ls /mnt/Music 을 하면 아무런 디렉토리가 보이지 않는다.
그러나 여기서, ls /mnt/Music/Music-nfs 을 하는 순간, 자동 마운트가 되고, Music-nfs 디렉토리도 자동으로 생성된다. 이게 바로 Autofs 의 장점이다.

그런데?
마운트 포인트가 Music-nfs 하나라면 기억하기가 쉽지만, 대여섯개만 넘어가도 이름을 정확히 기억하기란 쉽지 않은 일이다. 또, 매번 마운트를 하고자 할 때마다 명령어를 넣어야 하는 일도 결코 편하다곤 할 수 없다.

이를 위해서, autofs.conf 파일에 “browse_mode = yes” 를 주게 되면, 마운트 포인트들이, 마운트 전에도 보이게 된다. (그러나 이 방식은 Network 자원을 조금은 더 많이 쓰게된다는 단점도 있다고 한다.)

기본값인 “browse_mode = no” 를 그대로 두고, 위 단점을 없애려면, 다음과 같은 편법(?)을 사용해볼 수 있겠다.

  1. 일단은 browse_mode = yes 로 설정한다.
  2. 파일관리자로, nfs 를 마운트한 디렉토리로 접근한다.
  3. 마운트된 디렉토리를, 파일관리자(돌핀 등등)에서 ‘바로가기(위치에 추가하기)’로 만들어 놓는다.
  4. browse_mode = no 로 원상 복구한다.

이러고 나면, 해당 위치를 사용하려 할 때는 파일관리자에서 마운트 포인트를 클릭하여 자동 마운트를 하면 되고, Amarok 등, 해당 위치를 기억하는 프로그램들은, 따로 마운트 해줄 필요없이 프로그램만 실행시켜 주면 된다.


마지막 한가지.
NFS 를 쓸 때, 마운트 자체는 사실 큰 문제는 안된다. fstab 을 쓰든, autofs 를 쓰든, 아주 약간의 불편함(자동/수동)만 있을 뿐이다.

문제는, NFS 서버를 마운트했는데, 그 서버가 꺼졌을(Shutdown) 경우다. 이때 PC(NFS Client)를 종료하려고 하면, 종료 중 다음 문구가 나오면서 3분 정도 지체되는 현상이 발생한다.

A stop job is running for Automounts filesystems on demand (xx/3min)

종료시 3분은 꽤 긴 시간이고, 상황에 따라 저 문구가 제대로 표시되지 않을 경우도 있는데, 그럴 때는 종료되다가 PC가 얼어버렸는지(?) 착각을 할 수도 있게 된다.

이 시간을 조금이라도 줄이기 위해 여러 설정을 찾아봤는데, 확실한 답을 찾지는 못했다.
구글에서 다각도로(?) 뒤져봤으나, 마찬가지.
게다가, Autofs 는 좀 이상(수상?)한게, 개발 주체가 어디인지를 찾지 못했다. 혹자가 autofs.org 라고 해서 가봤더니 웬 태국어가 나오질 않나, Github 에 비슷한게 있어서 갔더니 자기들은 그저 사용만 할 뿐이라고 하는 글도 있었고..
오픈소스를 쓰면서 이런 경우는 거의 처음인 듯 하다. 어디 물어볼 데가 없다니!


껐다켰다를 반복하면서 시행착오를 거친 결과, 대충 이런 결론을 내려볼 수는 있었다.
/etc/autofs.conf

umount_wait = 1

이 값은 기본으로 12 로 되어있다.

만약, 마운트가 된 상황에서 서버가 종료되고, 그리고 내 PC 도 ‘끄기’에 돌입한다면, NFS 마운트를 확실하게 언마운트(Unmount)하기 못했기 때문에 위의 오류(A stop job …)가 발생한다. 3분 정도를 기다린 뒤 정상 종료가 되지만, 이 3분이 꽤나 길게 느껴지기도 하다.

umount_wait 값을 1 로 바꾸면 3분이 절반(1:30)으로 줄어든다.
그런데, 도무지 이 값이 무엇을 뜻하는지는 알 수가 없다.
몇몇 값을 실험해본 결과는 다음과 같다.
12,5,0 일때는 3분.
1,24,-10 일 때는 1:30.

…..

그리고, 정말 마지막.
Autofs 에선 수동으로 Unmount 는 불가능한 듯 하다.
자동 마운트는 되고, 일정 시간이 지나면 timeout 설정값에 의해 Unmount 는 되지만, 수동으로 마운트 해제는 안되는 듯 하다. 역시 관련 내용을 찾지 못했다. 옵션으로 user 를 붙여보기도 했지만, 아무 소용이 없었다.
안해보긴 했지만, 아마 sudo 로는 될 듯 하다.
다음 글에 비슷한 내용이 있다.


이 정도면 되려나.
뭔가 많이 부족해보이고, 다음에 읽었을 때 이해하지 못할 부분이 틀림없이 있겠지만, 더 이상 이걸 붙잡고 있지는 못하겠다.
아아아아!!

Tags:
2 Comments

안녕하세요. 글 남겨주셔서 고맙습니다.