관리 메뉴

드럼치는 프로그래머

[Linux] 리눅스 디스크 쿼터 (Quota) (1) 본문

★─Programing/☆─Linux

[Linux] 리눅스 디스크 쿼터 (Quota) (1)

드럼치는한동이 2007. 8. 29. 21:42

[디스크 Quota]

다중 사용자를 환경으로 하는 Linux 환경에서 특정 사용자가 시스템의 모든 디스크를 독점하여 사용하게 된다면 큰일이다.


한 사용자에 의해서 독점되는 시스템 자원으로 인해서 다른 사용자는 하고자 하는 작업을 할 수가 없게 된다.

특히, 웹 호스팅을 하는 업체와 같은 경우에는 사용자에게 일정한 디스크 용량만을 사용할 수 있게 하는 기능이 필수적이라고 할 수 있다.

웹 호스팅을 하는 서버의 경우 보통 적게는 100명 많게는 200명의 사용자가 홈페이지를 운영하고 있기 때문에 제한된 자원을 모든 사용자가 사용할 수 있도록 해주어야 한다.

이러한 요구 사항을 충족하기 위해서 사용하는 기능이 디스크 Quota 기능이다. 쿼터 기능을 사용해서 관리자는 사용자마다 일정한 디스크 용량만을 사용할 수 있도록 할 수 있기 때문에 효율적으로 하드 디스크 공간을 사용할 수 있다.
그러면 Quota 기능을 어떻게 설정하고 사용하는지에 대해서 알아보도록 하자.


[ TIP : ]

Window NT 4.0의 경우에는 이 Quota 기능이 없어서 사실상 웹 호스팅을 하거나 많은 사람에게 디스크를 사용하게 한다는 것은 거의 불가능한 일이었다.
필자의 경우는 여러 사람에게 디스크 공간을 한정되게 주기 위해서 파티션을 나누어서 제공한 적이 있다.

그러나 윈도우 2000부터는 쿼터 기능이 지원되기 때문에 요즈음 윈도우 2000과 ASP를 사용해서 웹 호스팅을 하는 업체가 부쩍 늘고 있다.


[Quota 설정하기 configure]

레드햇 리눅스를 설치하면 기본적으로 Quota 기능이 완전히 활성화되어 있지 않다. 아무래도 시스템에 제한을 주는 기능이기 때문에 사용자가 직접 원하는 곳에 쿼터를 설정하도록 하기 위한 것이 아닌가 한다.

디스크에 쿼터를 설정하는 것을 그리 어렵지 않기 때문에 독자 여러분도 가벼운 마음으로 따라 해 보도록 하자.


쿼터를 설정하기 위해서는 일단 커널에서 쿼터를 지원해야 한다.

사용자 삽입 이미지


그러나 요즘 나오는 배포판에서는 이 옵션이 포함되어 커널이 배포되기 때문에 쿼터 때문에 다시 커널을 컴파일하는 일은 없을 것이다. 다음으로 해주어야 할 작업은 파일 시스템에 쿼터를 걸어 주는 것이다.


파일 시스템을 관리하는 파일은 /etc/fstab 파일이다.
이 파일은 시스템에 설치된 파일 시스템의 정보를 포함하고 있는 파일이다. 각각의 파일 시스템은 한 줄 단위로 이 파일에 기록되어 있다.


다음은 쿼터를 걸고자 하는 시스템의 fstab 파일의 예제이다.


[ /etc/fstab 파일의 모습 ]

사용자 삽입 이미지














Fstab 파일을 보면 일단 '/'에 LABEL=/ 디스크가 마운트되어 있다. 우리가 Quota를 걸 디스크는 /dev/hda5(LABEL=/home)이다.

요즈음 나오는 레드햇 배포판에서는 기본적으로 쿼터가 작동되어 있도록 설정되어 있기 때문에 따로 쿼터를 설정할 필요가 없다.


혹시 쿼터 프로그램이 없는 리눅스 버전을 사용하고 있다면 다음 사이트에서 소스를 다운로드 받아서 설치해도 되지만, 되도록이면 RPM을 통해서 설치하기를 바란다.


사용자 삽입 이미지


현재 쿼터 패키지가 설치되었는지의 여부에 대해서 알고자 할 때에는 rpm 명령어를 통해서 알아보도록 하자.

각각의 바이너리 파일들이 쿼터를 설정하고 모니터링하는데 유용한 기능을 하기 때문에 그 이름을 익혀 두도록 한다.

사용자 삽입 이미지

























배포판과 버전에 상관없이 quota-XXXXX.i386.rpm 형식의 RPM 파일이 배포판 시디의 RPMS 디렉토리에 패키지가 있으므로 설치하고자 하는 독자는 배포판 시디에서 rpm 명령을 사용해서 설치를 할 수 있다.


시스템이 부팅되면서 실행되는 스크립트인 /etc/rc.d/rc.sysinit 파일을 보면 다음과 같이 quota를 켜는 명령어가 있기 때문에 자동으로 시스템이 부팅되면서쿼터 기능이 활성화된다.

사용자 삽입 이미지

사용자 삽입 이미지


이렇게 설정했다고 해서 쿼터 설정이 마무리된 것은 아니다. 어떤 파일 시스템에 쿼터 기능을 사용하겠다고 명시해 주어야 한다.


그리고 각각의 사용자에 대해서 얼마만큼의 용량을 사용할 수 있게 해주겠다는 내용이 담긴 파일을 생성해야 쿼터의 설정이 완료된다.


/etc/fstab 파일은 이전에 설명했듯이 각각의 파일 시스템을 어떻게 사용하겠다고 시스템에 말하는 설정 파일이다.

따라서 이 파일에서 특정 파일 시스템은 쿼터를 사용하겠노라고 명시 해 주어야 한다.


지금 우리는 /home이라는 부분에 대해서 쿼터를 걸고자 하기 때문에 LABEL=/home로 시작하는 행에서 defaults 다음에 usrquota라는 단어를 적어 주어 파일 시스템에 쿼터가 적용된다는 것을 알린다.

만약 그룹에 대해서도 쿼터를 설정하고 싶다면 grpquota를 추가해 주면 된다.
주의할 사항은 defaults 다음에 usrquota, grpquota를 적을 때에는 공백이나 탭을 넣어서는 안 된다.

Fstab 파일을 수정해 준 다음에 시스템을 재부팅한다.


사용자 삽입 이미지



사용자 삽입 이미지








다음으로 해주어야 할 작업은 쿼터의 정보가 있는 파일을 생성하는 일이다. 쿼터가 버전 1이었을 경우에는 쿼터를 걸 파일 시스템의 최상위 디렉토리에 quota.user, quota.group 파일을 생성하면 되었지만 쿼터 버전 2에서는 aquota.user, aquota.group 파일을 생성해야 한다.


만약 이전 버전의 쿼터 정보 파일을 업그레이드한다면 convertquota 명령을 사용해서 파일을 버전 2로 업그레이드 할 수 있다.


사용자 삽입 이미지















 


사용자 삽입 이미지


우리는 /home 파일 시스템 전체에 쿼터를 걸고자 한다. 다음은 '/home' 디렉토리에 쿼터 정보 파일을 생성하는 예이다. 만약 /share와 같은 디스크에 쿼터를 건다면 /share 디렉토리에 파일을 생성하면 된다.

다만 쿼터를 걸 대상은 항상 마운트된 파일 시스템의 가장 최상위 디렉토리여야 하고 이 디렉토리에 쿼터 정보 파일을 생성해야 한다.

사용자 삽입 이미지







사용자 삽입 이미지



다음으로 quotacheck를 실행시켜 쿼터 정보 파일인 aquota.user와 aquota.group 파일을 업데이트 한다.

시스템을 재부팅했다면 쿼터가 활성화되어 있기 (quotaon) 때문에 -f 옵션을 주어서 강제로 실행을 시킨다.

Quotacheck는 현재 디스크의 사용량을 다시 스캔해서 쿼터 정보 파일에 업데이트하는 역할을 한다.


사용자 삽입 이미지


Quotacheck -vamf
만약 그룹에 대해서 쿼터를 설정했다면 그룹에 대해서 quotacheck 명령을 내린다.

Quotacheck -vgam
만약 쿼터가 활성화되어 있지 않다면 쿼터를 활성화하기 위해서는 quotaon 명령을 실행하면 된다.

Quotaon -avug /home
반대로 쿼터 기능을 비활성화하기 위해서는 quotaoff 명령을 실행한다.

Quotaoff /home
이제 사용자 별로 사용할 수 있는 디스크 용량을 설정하는 단계이다. 디스크 공간을 배분하기 전에 몇 가지 용어에 대해서 알고 넘어가야 한다.

세 가지 용어가 나오는데 Soft Limit, Hard Limit, Grace Preiod가 있다.

영어에서 어느 정도 의미 파악을 했을 독자도 있을 것이다.
Soft Limit는 사용자가 사용할 수 있는 최대의 디스크 용량이다.

그런데 Grace Period가 설정되어 있다면 약간의 메시지를 받겠지만 Grace Period에 설정된 기간 동안은 Soft Limit를 넘을 수 있다.

그러나 아무리 넘어도 Hard Limit는 결코 넘을 수 없다. 또한 시간이 지나면 다시 Soft Limit 내의 용량 내의 디스크 공간 만을 사용해야 한다.


예를 들어서 다음과 같은 디스크 공간을 할당받았다고 하자.


사용자 삽입 이미지









사용자는 기본적으로 10메가의 용량만을 사용할 수 있다. 그런데 컴파일을 하거나 이런저런 작업을 하다 보면 10메가가 잠시 넘을 수 있다.

이 사용자는 디스크 공간을 넘었다는 에러 메시지를 받더라도 하루 동안은 20메가까지 디스크를 사용할 수 있다. 그러나 하루가 넘으면 10메가가 넘는 부분에 대해서는 삭제를 해야 한다.


그러면 본격적으로 사용자에게 디스크의 사용량에 대해서 제한을 걸어 보자. 쿼터를 설정하는 파일은 edquota이다.

Edquota를 실행하면 내부적으로 VI 에디터를 부르는 형식으로 사용자가 쿼터를 설정할 수 있다. 사용자가 직접 값을 입력하면 파일을 적는 도중에 에러가 날 수 있기 때문에 반드시 edquota를 이용해서 쿼터 설정을 해야 한다.


사용자 삽입 이미지



Useradd user [일단 예제로 한 명의 사용자를 등록하였다.]
Edquota -u user [ user를 대상으로 쿼터를 걸어 보자.]
명령어를 실행하면 VI 에디터가 작동한다.

사용자 삽입 이미지


사용자 삽입 이미지

























각각의 빈칸에 원하는 설정을 해보자. 'blocks'는 한 파티션에서 사용자가 사용 중인

총 블록(kilobyte 단위)을 의미하고 'inodes'는 한 파티션에서 사용자가 사용 중인 파일의 개수이다.


다음의 예는 uid 500에 대해서 소프트 제한으로 10메가가, 하드 제한으로 20메가의 퀕터를 걸고 파일의 개수는 소프트 제한으로 1000개, 하드 제한으로 2000개의 쿼터를 거는 예이다.


참고로 '0'으로 설정하면 쿼터 제한을 가하지 않게 된다.


사용자 삽입 이미지







또한 사용자에 대한 Grace Period를 설정하기 위해서는 edquouta에 -t 옵션을 주면 된다.
여유 기간은 사용자별로 설정하지 않고 파일 시스템 단위로 설정할 수 있다. 기본값은 일주일이지만 하루로 수정을 한다.

사용자 삽입 이미지








위와 같이 설정을 하고 VI 에디터에서 'wq!' 명령을 내려서 설정을 저장한다.

이제 쿼터가 제대로 작동을 하는지 테스트를 해보도록 하자. 12메가가 되는 파일을 복사하다 보면 아래와 같이 경고 메시지가 뜬다.

사용자 삽입 이미지





Comments