1. Quota란 무엇인가?
Quota는 사용자나 혹은 그룹이 가질 수 있는 inode의 수, 혹은 사용자나 그룹에게 할당된 디스크 블럭의 수를 제한함으로써, 디스크 저장 장치의 사용을 제한할 수 있게 해준다. 즉, Quota는 사용자나 그룹의 디스크 사용량을 제한할 수 있는 방법을 제공해준다.
Quota의 기본 개념은 사용자가 그들에게 부여된 디스크의 제한 용량 이상으로 사용하지 못하게 하며, 시스템의 디스크 공간을 무제한적으로 사용하지 못하게 한다. Quota는 사용자 별, 파일 시스템 별로 동작된다. 한 사용자에 파일을 만들 수 있는 파일 시스템이 하나 이상이라면, 각각의 파일 시스템에 개별적으로 Quota를 설정해줘야 한다.
2. 리눅스에서 Quota 지원
Quota 지원은 버젼 1.3.8x에서부터 커널에 포함되었다. 지금은 리눅스 커널 2.0 릴리즈의 한 부분이다. 여러분의 시스템이 Quota를 지원하지 않는다면, 업그레이드하기 바란다.
현재 Quota는 ext2 화일 시스템에서만 동작한다.
3. 리눅스에서 Quota를 사용하기 위한 요구 사항
3.1. Kernel
커널 2.x 소스는 http://www.kernel.org에서 구할 수 있다. 서버의 자원을 아끼기 위해 가능하면 여러분의 위치에서 가까운 곳의 미러 사이트를 이용하기 바란다. 한국의 미러 사이트는 http://www.kr.kernel.org이다.
3.2. Quota 소프트웨어
여러분의 가지고 있는 리눅스 배포본에 따라, 시스템에 Quota 소프트웨어가 설치되어 있거나, 혹은 설치되어 있지 않을 수도 있다. 설치되어 있지 않다면, Quota 소프트웨어의 소스를 여기에서 다운로드할 수 있다
4. 리눅스에서 Quota 설정 - 1 장: 환경 설정
4.1. 커널 재설정
Quota를 지원할 수 있도록 다음과 같이 커널을 재설정한다.
Quota support (CONFIG_QUOTA) [n] y
4.2. Quota 소프트웨어 컴파일 및 설치
대부분의 리눅스 배포본에서는 Quota 소프트웨어가 설치되어 있거나, 쉽게 설치할 수 있다. 그렇지 않다거나, 어떻게 설치해야 하는지 모른다면, 여기에서 최신 버젼의 Quota 소프트웨어를 다운로드할 수 있다.
Quota 소프트웨어를 컴파일하고 설치하라.
4.3. Quota를 검사하고 부트 시에 Quota를 작동시키기 위해 시스템 init 스크립트 수정
다음 예를 살펴보자.
# Check quota and then turn quota on.
if [ -x /usr/sbin/quotacheck ]
then
echo "Checking quotas. This may take some time."
/usr/sbin/quotacheck -avug
echo " Done."
fi
if [ -x /usr/sbin/quotaon ]
then
echo "Turning on quota."
/usr/sbin/quotaon -avug
fi
가장 좋은 방법은 /etc/fstab에 명시된 파일 시스템이 마운트된 후 항상 Quota를 켜놓는 것이다. 시스템 init 스크립트의 끝부분 또는 파일 시스템이 마운트되는 부분의 바로 뒷부분에 Quota를 켜놓는 것을 추천한다.
4.4. /etc/fstab 수정
일반적으로 Quota가 작동되기 전의 파티션 정보는 다음과 같다.
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults 1 1
파일 시스템에 사용자 Quota 지원을 가능하게 하려면, "defaults" 단어 뒤, 즉 네번째 항에 "usrquota"를 추가한다. 더 자세한 정보는 fstab 매뉴얼 페이지(`man fstab`)를 참고하라.
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,usrquota 1 1
파일 시스템에 그룹 Quota 기능이 필요하면, "usrquota" 대신 "grpquota"를 추가하라.
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,grpquota 1 1
파일 시스템에 사용자 Quota와 그룹 Quota 둘다 필요하다면 다음과 같이 하면 될 것이다.
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,usrquota,grpquota 1 1
4.5. Quota 기록 파일 "quota.user"와 "quota.group" 생성
quota.user와 quota.group, 이 두 Quota 기록 파일은 root 소유이어야 하고, root 이외에는 어느 누구도 읽기/쓰기 권한을 줘서는 안된다.
root로 로그인한 후, Quota를 활성화시킬 파티션의 루트 디렉토리로 이동하라. 그런 후 quota.user와 quota.group 파일을 다음과 같이 만든다.
4.6. Quota 시스템 활성화시키기
Quota 소프트웨어를 활성화시키기 위해, 여러분이 수정한 것이 영향을 미칠 수 있도록 시스템을 리부트한다.
더 좋은 방법은 여러분이 만든 시스템 init 스크립트를 실행시키는 것이다. 이것은 Quota 데이타베이스를 초기화시킬 것이다. 만약 `ls -la /partition/quota.*` 명령을 실행해보면 파일 크기가 더 이상 0 이 아니라는 것을 알게 될 것이다. 이것은 Quota가 동작하고 있다는 것을 말한다.
나중에 다른 파티션에도 Quota를 가능하게 하려면 4, 5, 6번 과정을 되풀이하면 된다.
4.7. crontab에 quotacheck 추가
Quotacheck는 주기적으로, 즉 일주일마다 실행되면 될 것이다. 다음 줄을 root의 crontab에 추가하라.
(`crontab -e`) 0 3 * * 0 /sbin/quotacheck -avug
5. 리눅스에서 Quota 설정 - 2 장: 사용자와 그룹에게 할당량 배정
이것은 edquota 명령을 통해 행해진다. (자세한 것은 `man edquota`를 참고하기 바란다.)
5.1. 특정 사용자에게 디스크 할당량 배정
여기 한가지 예가 있다. 만약 시스템에 로그인 아이디 bob이라는 사용자가 있고, 이 사용자의 디스크 할당량을 배정하기 위해
"edquota -u bob"
명령을 사용함으로써 vi 에디터(또는 $EDITOR 환경변수에 설정한 에디터)로 quota가 설치된 각 파티션의 bob이라는 사용자의 할당량을 수정할 수 있다.
Quotas for user bob:
/dev/hda2: blocks in use: 2594, limits (soft = 5000, hard = 6500)
inodes in use: 356, limits (soft = 1000, hard = 1500)
"blocks in use"는 한 파티션에서 사용자가 사용 중인 총 블럭(kilobyte 단위)을 의미한다.
"inodes in use"는 한 파티션에서 사용자가 사용 중인 파일의 총합이다.
5.2. 특정 그룹에 디스크 할당량 배정
시스템에 games이라는 그룹이 있고, 이 그룹의 디스크 사용량을 제한하고 싶다면,
"edquota -g games"
명령을 사용하면 된다. 그러면 vi 에디터를 이용해 games 그룹의 할당량을 수정할 수 있다. Quotas for group games:
/dev/hda4: blocks in use: 5799, limits (soft = 8000, hard = 10000)
inodes in use: 1454, limits (soft = 3000, hard = 4000)
5.3. 일련의 사용자들에게 같은 값으로 디스크 할당량 배정
예를 들어 100명의 사용자의 할당량을 사용자 bob과 같은 값으로 빨리 설정하기 위해서는, 먼저 bob의 할당량 정보를 직접 수정한 후에 다음 명령을 수행하면 된다.
여기에서 csh을 사용하고 있다고 가정하며, 사용자의 UID가 500부터 시작한다고 가정하고 있다.
추가적으로 edquota에서는 Soft Limit, Hard Limit, 유예 기간(Grace Period)이라는 단어의 의미를 알아야 한다.
5.4. Soft Limit
Soft limit는 한 파티션에서 사용자가 쓸 수 있는 최대 용량을 가리킨다. 그러나 유예 기간(grace period) 내에 있어서는 사용자는 사용 용량 초과에 대해서 경고를 받게 되는 경계선처럼 동작한다.
5.5. Hard Limit
Hard limit는 유예 기간(grace period)이 설정되어 있을 때에만 동작한다. 이것은 디스크 사용에 있어서 절대적인 제한을 의미한다. 즉, 사용자는 hard limit 이상의 디스크 공간을 사용할 수 없다.
5.6. Grace Period
유예 기간은 사용자의 사용 용량이 soft limit 용량을 넘은 후부터 적용되는 시간 제한이다. 시간은 sec(onds), min(utes), hour(s), day(s), week(s), month(s) 단위로 사용할 수 있다.
"edquota -t"
명령을 실행하면 유예 기간을 보거나 수정할 수 있다.
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda2: block grace period: 0 days, file grace period: 0 days
"0 days" 부분을 적당한 기간으로 바꿔준다. 개인적으로는 7일("7 days" 혹은 "1 week")로 설정해 주었다.
6. 기타 Quota 명령
6.1. Quotacheck
quotacheck는 파일 시스템의 디스크 사용 상태를 검색하거나 quota 기록 파일인 "quota.user" 파일을 최근의 상태로 갱신하기 위해 사용한다. quotacheck를 시스템을 부팅할 때나 정기적으로(예를 들어, 일주일에 한번) cronjob을 통해서 실행할 것을 권한다.
ex)# quotacheck /home
6.2. Repquota
repquota는 파일 시스템의 quota를 정리해서 보여준다. 다음은 repquota가 출력하는 예제이다.
# repquota -a
Block limits File limits
User used soft hard grace used soft hard grace
root -- 175419 0 0 14679 0 0
bin -- 18000 0 0 735 0 0
uucp -- 729 0 0 23 0 0
man -- 57 0 0 10 0 0
user1 -- 13046 15360 19200 806 1500 2250
user2 -- 2838 5120 6400 377 1000 1500
cf)그릅관련정보를 보려면
"#repquota -vg -a "
6.3. Quotaon과 Quotaoff
quotaon은 quota를 가동시킬 때 사용한다. 반대로 quotaoff는 중단시킬 때 사용한다. 실제로 이 두 화일은 비슷하다. 이것들은 시스템이 부팅되거나 중단될 때 수행된다.
quota를 수정한후에는 quotaoff->quotacheck->quotaon
하는게 좋다.