메뉴 건너뛰기

GREATUSER

tech

/etc/fstab 설정하기

위대한유저 2009.01.29 07:29 조회 수 : 234318

1 /etc/fstab 파일에 대하여

아마 이 글을 보시는 리눅스 관리자 분들께서는 다들 익숙한 파일입니다만..

음.. 일본에서 뭔가 하던 와중에 문득 생각이 나서..
뭐 새로 들어오신(실) 분들을 위해서 초큼 정리를...


2 필드의 설명

자../etc/fstab 파일은 총 6개의 필드로 구성이 되어있습니다.
요즘 설치하는 데비안4의 경우는 fstab 파일의 최상단에 각 필드명이 미리 기재되어있지요.
허나.. CentOS는 이러한 친절함을 배풀지는 못했습니다.. 애석하게도..

참.. /etc/fstab 파일은 장치(뭐 대략 저장공간이라고 합시다)들이 부팅시에 자동으로 마운트 되도록 해주는 기능에 관여합니다.

자~ 그럼 하나씩 살펴보도록 해봅시다~

[root@ns1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2    6.7G  5.2G  1.2G  83% /
/dev/sda1    99M   22M   73M  23% /boot
tmpfs     1011M  0 1011M   0% /dev/shm
/dev/sda5    1.9G   36M  1.8G   3% /tmp
/dev/sda6    9.2G  3.2G  5.6G  36% /var
/dev/sda7    49G   41G  5.1G  90% /home
/dev/sdb1    19G   15G  3.3G  82% /vpopmail
/dev/sdb2    49G   35G   13G  74% /home2


자~ 이것은 제가 사용하는 서버를 기꺼이 예제로 제공한 모습입니다.
뭐.. "df -h" 라는 명령어를 이용해서 운영중인 시스템의 마운트 상황을 보는것이죠~

그럼 뭐.. 가따부따 필요없이 /home 을 먼저 살펴보겠습니다.

이것을 부팅될 때마다 자동마운트 시켜주길 원한다면 /etc/fstab에 기록을 하게 되고, 내용은 아래와 같습니다.
/dev/sda7    /home  ext3  defaults 1 2

처음 설명한대로 총 6개의 필드로 구성되어 있는것을 볼 수 있습니다.

자~ 이제 각 항목별로 어떤 내용인지 살펴봅시다.

2.1 1번필드 : /dev/sda7

요것은 마운트될 장치를 선언하는 부분입니다.
왜 그렇게 되냐구요?
df 명령의 결과값중 /home 파티션이 /dev/sda7 을 사용하고 있으니 그런거라는...
물론 /etc/fstab에 그렇게 기록되었으니
/dev/sda7     49G   41G  5.1G  90% /home
이런식으로 보이는 것이겠지만..
애초부터 이걸 결정하는것은 관리자 자신입니다..
뭐... 닭이 먼저냐.. 달걀이 먼저냐를 따지면 ㄷㅈ...
고로 /vpopmail 파티션을 마운트하기 위해서 fstab에 기록한다면 당근 /dev/sdb1 이지요...
이해가 안됐다고?... 휴.. 그럼 다른일을 찾는게...
어차피 니 적성에는 안맞는거야 이건...

2.2 2번필드 : /home

요것은 마운트포지션을 선언하는 부분입니다.
/dev/sda7 장치를 /home 디렉토리의 공간으로 사용하겠다는 의미지요.
1번필드와 이해수준이 별반 다를게 없습니다..
간단한 논리 아닙니까...?
/dev/sda7장치를 /home 디렉토리로 이용하겠다... 라는...
더 간단하게 얘기하자면... 대체 이 장치는 어디에 쓸꺼니? 라고 말하고 싶군요..

2.3 3.번필드 : ext3

파일시스템의 타입(종류)를 선언하는 부분입니다.
사실 1,2번 필드는 웬만한 바보가 아닌이상 처음 열어보더라도 "아.. 이런게 아닐까?"라는 감이옵니다.
중요한것은 바로 이 3번필드부터...

일반적으로 에서 리눅스 파일시스템을 만들때 가장 많이 사용하는것은 무엇일까요?
또는 최근 나온 리눅스 배포본을 설치할때 기본적으로 정의되는 파일시스템 타입은 무엇일까요?
바로 EXT3 타입입니다. (최근에는 EXT4 를 사용하는 사례가 많기도... )
EXT3 가 무엇인지는 별도로 찾아보도록 하시고...
뭐 윈도우의 FAT16, FAT32, NTFS 등등과 같이... 파일시스템이 구성된 타입을 선언하는 것입니다.

만약 마운트 하려는 장치(여기서는 /dev/sda7)가 XFS라는 타입으로 생성되어있다면?
당연히 3번 필드에는 ext3가 아닌 xfs 라고 넣으면 되는겁니다..
어때요.. 쉽죠?
파일시스템의 종류가 존나 많기 때문에 man페이지에서 vfstype 이라고 검색하면 알 수 있을듯~
만약 이 글을 보고나서도 파일시스템의 타입에 상관없이 책에서 봤던대로 걍 ext3를 쓰고싶은 사람은..
역시 이런일이 적성에 안맞는 시키가 되겠습니다..

2.4 4번필드 : defaults

파일시스템의 속성(?)을 선언하는 부분입니다.
그러니까... 예를들면..
파일시스템을 마운트할때 일반적으로 "읽기/쓰기"가 모두 가능하게 한다던가..
"쓰기"는 할 수 없고 "읽기"만 가능하도록 한다던가 하는...
일단은 여기서는 각 속성에따른 결과만을 설명하고 뒤에가서 응용을 해보겠습니다.

* 기본속성 (아마 리눅스를 새로 설치하고 본다면 대부분 이렇게 설정이 되어있...)
default : 뭐.. 일반적인 사용에 무리가 없이 대부분의 긍정적인 성격의 기능을 할 수 있습니다.
읽고쓰기는 기본이고 실행이니 기타등등을 모두는 아니고 대부분 가능하게 해주는 형태입니다.

* 긍정적인 성격의 속성
rw : 마운트 했을때(이하생략) 파일을 읽기, 쓰기가 가능하게함
suid : 뭐.. 말그대로.. SetUID, SetGID 등의 사용이 가능하게함
exec : 실행권한을 가진 파일들의 실행이 가능하게함
quota : 유저별 용량제한 기능(quata)을 사용할 수 있도록함
이외에 옵션이 무지 많지만 굳이 여기에 다 넣을 필요가 없습니다.
우리가 사용하는것들중 대표적인것들만.. 물론 어떤 내용들이 있는지는 알고 있어야 합니다.

* 부정적인 성격의 속성
ro : 오로지 읽기만 가능하게..
nosuid : suid의 반대 -_-;
noexec : noexec의 반대 -_-;
noquota : 또 설명할까....? ㄷㅈ?

아무튼 이런 속성을 선언하게 되는데...
여러가지 옵션을 한번에 줄수도 있습니다.
예를 들어
/dev/hda6  /tmp  ext3  defaults,noexec,nosuid 0 0
이런식으로 말이죠...
4번 필드를 살펴보니 옵션이 세개나 붙어있지요?
defaults 속성이 갖는 내용이되, 실행파일의 실행과 suid를 사용하지는 못하게 한다는 의미입니다.

2.5 5번째 필드 : 0

0 입니다.. -_-;;;;
여기서부터는 기재된 내용만 가지구서는 뭔지 알길이 없죠.. 휴..
찍기의 달인이라 불리는 저도 당췌 이것만은 내용만보구서 감을 잡을수가 없었습니다.
정확한 명칭이 데비안은 아마도 <dump> 로 되어있었던가? -_-;;;
아무튼 dump 사용 여부를 결정하는 필드로서..
선언이 가능한 값은 0 과 1 뿐입니다.
네/아니오 가 되겠습니다.
그럼 이건 뭘 하겠다는거냐??
mysqldump가 가능해지는 파일시스템... 이 아니구...
리눅스의 백업툴중 dump 라는 명령어가 있습니다.
우리가 사용하는 백업관련 명령어는 cp, rsync 정도가 되겠지만서두..
dump 명령에대한 사용은 각자 해보기로 하시고...
우리가 많이 사용했던 cp, rsync가 파일단위의 컨트롤을 한다면..
이 dump라는 명령어는 파일시스템 자체를 컨트롤 할 수 있다는것입니다.

예를들면 /dev/sda7 장치의 파일시스템 자체를 다른곳에 예를들면 뭐 이미지형태(?)로 복사하는것이 가능합니다.
바로 이 dump 명령을 이용한 백업컨트롤을 가능하도록 해주는 옵션으로서..
우리는 걍 "0" 으로 해놓고 사용해도 무방합니다~

2.6 6번째 필드

후... 이것도 0이네요....
사실 5번째 필드는 관리자의 운영 스타일에 따라서 설정을 해도그만, 안해도 그만인 부분입니다만..
이것은 상황에 따라서 좀 거시기한 옵션입니다.
존나 오래켜놓은 서버를 리부팅하거나, 파일시스템에 오류가 박박 뜨면서 뒤진서버들 리부팅 했을때..
그리고 그 서버가 벌건 대낮에 뒤졌을때.. 우리는 서버룸에 뛰어가면서 무슨생각들을 할까요?
그중엔 "이거 파일시스템 체킹을 하는거 아냐?" 라는 질문이 반드시 포함되어 있을것입니다.
공포의 파일시스템 체킹...
바로 마운트시에 파일시스템 체킹여부를 선언하는 부분입니다.
선언이 가능한 값은 0,1,2 가 있습니다.
0 : 체크하지 않음
1 : 존나 먼저 체크
2 : 1로 선언된 항목의 체크가 완료된 이후에 체크

바로 위에 소개한 서버가 뒤졌을때... fstab에 0으로 기록되었다면.. 체크를 하지 않고 바로 넘어갑니다~
문제는 1,2 를 가질때인데..
파일시스템을 체크하는 순서를 나타내줍니다.
이 항목이 1로 선언되어있는 장치를 가장먼저 체크하구...
2로 선언된 장치는 1로 선언된 장치들의 체크가 끝난 다음 하겠다는 의미입니다.
참고로 우리가 사용하는 리눅스 배포본들은..
기본적으로 "/" 장치의 경우 대부분 "1"을 선언하고..
나머지 장치들에 대해서는 "2" 내지는 "0"을 줘버립니다...
본 항목은 어떤 수치로 설정 하더라도 운영상의 영향을 미치지는 않습니다.

아까 공포의 파일시스템체크 라고는 했습니다만..
파일시스템체크 자체가 나쁜것은 아닙니다.. 부팅시에 시간을 많이 잡아먹을 수 있고..
이건 곧 시스템이 부팅완료시점이 늦어지면서 서비스 중지시간이 길어지기 때문에 그렇게 설명을 한 것 뿐입니다.
나중에 누가 파일시스템 체킹을 한다고 할 때, 괜히 옆에서 "야 공포의 파일시스템체크를 왜하니?" 라고 묻는 어처구니 없는 사태가 오지 않도록 합시다.
참고로 파일시스템 체킹은 fsck라는 명령어로 하는건데... 역시 이번내용과는 크게 상관이 없으니 각자 알아서;;;

3 예제

소개했던 제 서버의 /etc/fstab 파일 전체내용입니다.

/dev/sda2  /          ext3    defaults        1 1
/dev/sda1  /boot      ext3    defaults        1 2
devpts     /dev/pts   devpts  gid=5,mode=620  0 0
tmpfs      /dev/shm   tmpfs   defaults,noexec,nosuid 0 0
proc       /proc      proc    defaults        0 0
sysfs      /sys       sysfs   defaults        0 0
/dev/sda3  swap       swap    defaults        0 0
/dev/sda5  /tmp       ext3    defaults,noexec,nosuid 0 0
/dev/sda6  /var       ext3    defaults        0 0
/dev/sda7  /home      ext3    defaults        0 0
/dev/sdb1  /vpopmail  ext3    defaults        1 2
/dev/sdb2  /home2     ext3    defaults        1 2

음... 이제 각 항목의 설명도 했으니 대충 뭔내용인지는 알겠는데..
4번 필드가 남들과 다르게(?) 설정되어 있는것들이 보일 것입니다.
각 옵션들에대한 부분은 알아서들 찾으시고.. 너무 많아서.. ㅋ
그중 noexec, nosuid 라는 부정적인 옵션을 왜 굳이 줬느냐 라고 물으실 수 있겠습니다.
좀 다른 장치들 중에서.. /dev/shm, /tmp 에 걸려있...

말그대로.. 실행파일 실행불가, setuid사용불가 인데... 왜 필요 할까요?
바로 보안을 위해서 입니다.
나중에 확인을 해보시면 알겠지만 저 두개의 권한은 모두 "읽기/쓰기/실행하기"가 가능한 상태입니다.
그리고 널리 알려진 위치입니다.

그래서?
누구나 파일을 쓰는것이 가능하기 때문에 상당수 서버에 기본적으로 OPEN되어있는 80번포트(웹서버)를 이용한 공격성 스크립트의 업로드가 가능합니다.
이렇게 올린 파일은 분명 서버에 좋지못한 행위를 목적으로 제작이 되었기 때문에.. 때로는 치명적으로 작용할 수 있는것이지요..
저렇게 마운트를 해놓으면 공격성 스크립트를 올려놓더라도, 실행하는 것은 불가능합니다.
물론 다른 꼼수를 이용해서 실행이 가능합니다만...
저렇게라도 해놓으면 악의적인 시도가 발생할때 그중 일부는 사전에 차단할 수 도 있는겁니다.

그렇게 보안에 도움이 되는거라면 다른 디렉토리도 다 그렇게하지? 라고 반문하신다면..
니가 운영하는 서버의 모든 장치에 다 저렇게 걸어놓고 다시 얘기하자....
라고 답변을 하고 싶군요..
한번 해보세요~



4 mount의 확인

설정된 /etc/fstab을 이용해서 mount 여부 확인
[root@ns1 tmp]#mount -a
[root@ns1 tmp]#
요것은 fstab에 정의된 모든 장치의 마운트를 한다는 의미입니다.
실행이자 곧 설정상황의 체크를 할 수 있습니다.

왜그런고하니...
정상적으로 설정을 잘~ 한경우에는 위의 결과처럼 아무런 반응이 없이 프롬프트가 떨어집니다..

그런데 혹시 잘못입력했다면?

예를들어서 /home2에 사용될 장치가 /dev/sdb2 인데 오타를 내는바람에 sd2 라고 잘못 썼다고 가정해봅시다..
그리고 나서 실행해 보았다면..

[root@ns1 tmp]# mount -a
mount: special device /dev/sd2 does not exist

라고 에러를 출력합니다..
이건 절대로 그냥 넘어가면 안됩니다.

이상태에서 혹시라도 서버가 리부팅이 된다면... 살지 않습니다.. -_-;;;
장치를 마운트 해야하는데 그 장치를 찾을 수 없기 때문입니다.
물론 이런 경우에 대처를 할 수 있는 방법이 있지만서두... 지금 이글을 여기까지 읽는 너라면..
알려줘도 모르니까.. 시키는대로 하는게 좋아! OK?
반드시 수정을 해서 바로잡도록 합시다.

5 마무리

자.. 이걸로 fstab의 설명이 끝났습니다...
존나 잼있었는지... ??
원래 본 내용은 짧고 간단하게 설명이 가능했는데..
쓰다보니.. 이렇게 길어졌네요..
방금 쓰면서도 내가 왜 이렇게 썼지? 하는 생각이 들곤 했습니다.
암튼 리눅스 설치도 덜덜 떨리시는 분들에게는 도움이 되었으면 좋겠네요...
위로