본문으로 바로가기

[CentOS] Quota 사용자 용량 제한

category 리눅스/CentOS 2013. 6. 7. 02:52

쿼터를 설정하기전에 자신의 파일시스템이 어떻게 구성되었는지 알아야 합니다. 호스팅을 위한 대부분의 서버구성에서는 사용자의 홈디렉토리(/home)를 파티션을 따로 설정해두기 때문에 /home 에 대한 사용자별 용량 제한이 가능합니다.

쿼터(Quota)

파일시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것

쿼터 설치

CentOS 6.4 Minimal 버전에는 Quota 가 설치되어 있지 않다.

쿼터 설치 확인

rpm -qa quota

쿼터 설치

yum -y install quota

  Dependencies Resolved
  ================================================================================
   Package              Arch           Version                 Repository    Size
  ================================================================================

  Installing:

   quota                x86_64         1:3.17-18.el6           base         198 k


  Installing for dependencies:

   libnl                x86_64         1.1-14.el6              base         121 k

   tcp_wrappers         x86_64         7.6-57.el6              base          61 k


  Transaction Summary
  ================================================================================
  Install       3 Package(s)

어디서 많이 들은 tcp_wrappers가 의존성 문제로 인해 같이 설치된다.

설치 확인

rpm -qa quota

  quota-3.17-18.el6.x86_64

쿼터 설정

쿼터는 유저별 제한, 그룹별 제한이 가능하다.

1) 파일시스템에 제한여부 설정

vi /etc/fstab

  UUID=216e88e1-ae53... /home                   ext4    defaults,usrquota        1 2

/home 을 찾아 유저별 제한을 위해 usrquota 를 추가했다. 그룹별 제한을 위해서는 grpquota 를 추가하면 된다. 아래는 /etc/fstab에 할당할 수 있는 옵션들이다.

옵션 적용대상 용도
usrquota 모든 유형 사용자 할당량 사용
usrjquota=filename vfsv0 저널 사용자 할당량 사용(jqfmt 옵션의 스펙 및 할당량 데이터베이스 파일 이름(일반적으로 aquota.user)이 필요함)
uquota xfs usrquota와 동등
grpquota 모든 유형 그룹 할당량 사용
grpjquota=filename vfsv0 저널 그룹 할당량 사용(jqfmt 옵션의 스펙 및 할당량 데이터베이스 파일 이름(일반적으로 aquota.group)이 필요함)
gquota xfs grpquota와 동등
prjquota xfs 프로젝트 할당량 사용
pquota xfs prjquota와 동등
jqfmt=format vfsv0 usrjquota 또는 grpjquota가 지정될 때 사용된 할당량의 형식(현재는 vfsv0가 유일하게 지원되는 형식임)
quota vfsold, vfsv0 usrquota와 동등
noquota vfsold, vfsv0 할당량을 사용하지 않음
uqnoenforce xfs 사용자 할당량 계산을 사용하지만 적용하지는 않음
gqnoenforce xfs 그룹 할당량 계산을 사용하지만 적용하지는 않음
pqnoenforce xfs 프로젝트 할당량 계산을 사용하지만 적용하지는 않음

2) 설정 적용을 위해 재부팅하거나 다시 마운트한다.

mount -o remount /home

마운트 확인

mount

  /dev/sda1 on /home type ext4 (rw,usrquota)

3) 쿼터 DB 생성

쿼터를 사용하기 위해서는 쿼터 DB가 필요한데 이를 위해 aquota.user(유저별 제한) 파일을 해당 파일시스템의 루트 디렉토리에 생성해야 한다. 그룹별 쿼터설정 파일은 aquota.group 이다.

cd /home && touch aquota.user

보안을 위해 소유자(root)외에는 접근하지 못하도록 한다.

chmod 600 aquota.user

쿼터의 적용을 위해 현재 상태를 체크한다.

quotacheck -avug

옵션은 아래와 같다.

  • a : /etc/mtab에 있는 모든 마운트된 파일 시스템 검사(NFS 파일 시스템 제외)
  • v : 상세 출력
  • u : 사용자 할당량 검사(기본값 임)
  • g : 그룹 할당량 검사
  • c : 기존 할당량(ex.aquota.user) 파일 무시(새로운 스캔을 실행하여 결과를 디스크에 씀)

* 쿼터체크를 실행시 아래와 같은 에러 메세지가 나온다면 주의하자
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.

에러 해결) /dev/sda1에 있는 ext4 파일 시스템에 대해 /etc/fstab의 옵션을 defaults,usrquota에서 defaults,usrjquota=aquota.user,jqfmt=vfsv0로 변경하여 이를 수행한다. 그룹은 grpjquota=aquota.group로 추가

4) 쿼터 시작

quotaon -avug

  /dev/sda1 [/home]: user quotas turned on

쿼터 종료

quotaoff -avug or guotaoff /home

5) 쿼터 현재 상황

repquota -a 

  *** Report for user quotas on device /dev/sda1
  Block grace time: 7days; Inode grace time: 7days
                          Block limits                File limits
  User            used    soft    hard  grace    used  soft  hard  grace
  ----------------------------------------------------------------------
  root      --      20       0       0              2     0     0
  nestgoer  --      40       0       0             10     0     0
  • used : 현재 사용량
  • soft : 현재 설정된 soft limit
  • hard : 현재 설정된 hard limit
  • grace : soft limit에 지정된 용량 초과시 남은 유예 기간 표시

아래와 같이 특정 시스템파일을 지정할 수 도 있다.

repquota /home

특정 사용자의 quota설정을 확인

quota -v nestgoer

  Disk quotas for user nestgoer (uid 500):

     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace

     /dev/sda1      40       0       0             10       0       0

quota(=soft), limit(=hard)

quota를 넘는 양의 용량을 사용하면 grace 에 남은 날짜를 표기하게 되며 quota를 넘어선 용량은 grace 기간동안만 사용할 수 있게 된다. 기간이 지나면 quota를 넘어선 용량은 자동 삭제된다.

6) 쿼터 설정

쿼터를 설정하는 명령어는 edquota 이다.

유예기간 설정

edquota -t

  Grace period before enforcing soft limits for users:

    Time units may be: days, hours, minutes, or seconds

    Filesystem             Block grace period     Inode grace period

    /dev/sda1                     7days                  7days

단위는 second, minutes, hours, days를 사용한다.

사용자의 용량 제한

edquota -u nestgoer 

  Disk quotas for user nestgoer (uid 500):

    Filesystem                   blocks       soft       hard     inodes     soft     hard

    /dev/sda1                      40          0           0         10        0        0

단위는 기본 kbytes 이다.

  • Filesystem : quota를 적용할 파일 시스템
  • blocks : 현재 유저의 총 사용량
  • soft : blocks이 지정한 용량을 초과하면 경고 (0일때는 제한이 없다는 것)
  • hard : blocks이 지정한 용량을 초과하면 쓰기 금지 (0일때는 제한이 없다는 것)
  • inodes : 현재 유저의 파일의 갯수
  • soft : inodes가 지정한 파일수를 초과하면 경고 (0일때는 제한이 없다는 것)
  • hard : inodes가 지정한 파일수를 초과하면 쓰기 금지 (0일때는 제한이 없다는 것)

편집 방법은 vi를 사용하듯 사용하면 되고 10240kb(10mb)와 같은 값을 넣어주면 된다.

qroup에 quota를 설정하는 방법은 다음과 같이 한다.

edquota -g 그룹이름

* 웹호스팅시에 유저들을 매번 설정하기 힘드니 각 상황별 몇명의 기준이 되는 유저를 생성해서 quota를 설정해 두고

edquota -p nestgoer -u user10

위와 같은 명령어로 quota를 복사해 새로 추가하는 사용자들의 quota를 설정할 수 있다.

edquota -p nestgoer user1 user2 user3 ... 

위와 같은 명령어는 여러명을 동시에 설정한다.

7) 시스템 재부팅시에 쿼터 체크

vi /etc/rc.d/rc.local

  #quotaon을 하기전에 quotacheck로 체크를 합니다.

  if [-x/usr/sbin/quotacheck]

  then

    echo "Checking quotas. This may take some time."

    /usr/sbin/quotacheck-avug

    echo "Done."

  fi

  #quotacheck를 마치고나서 quotaon을 합니다.

  if [-x/usr/sbin/quotaon]

  then

    echo "Turning on quota."

    /usr/sbin/quotaon-avug

  fi

부팅 시 vfsv0 할당량 검사하기

quotacheck 및 quotaon 명령은 일반적으로 초기화 스크립트에 포함되어 있기 때문에 시스템을 다시 부팅할 때마다 할당량이 활성화된다.  저널 할당량을 사용하는 경우에는 부팅 시 quotacheck를 실행하지 않아도 된다.

8) cron 시스템 예약

우선 실행파일 하나를 하나 만든다.

vi /root/crons/quotachk.sh

  #!/bin/bash
  /sbin/quotaoff -auvg
  /sbin/quotacheck -auvg
  /sbin/quotaon -auvg

crontab에 등록한다.

crontab -e

  # quota weekly check
  0 5 * * 1 /root/crons/quotachk.sh

크론 등록 확인

crontab -l

9) 사용자에게 경고하기

warnquota 명령은 할당량을 초과하는 사용자에게 이메일 경고를 전송하는 데 시용된다. 그룹이 할당량을 초과하면 /etc/quotagrpadmins에 지정된 해당 그룹의 사용자에게 이메일이 전송된다. 이메일의 형식은 /etc/warnquota.conf 파일에 의해 제어된다. /etc/quotatab 파일은 /dev/sda1과 같은 이름을 "Shared EXT3 filesystem"과 같이 사용자에게 더 친숙한 설명에 맵핑하는 데 사용된다. 일반적으로 warnquota는 cron 작업으로 주기적으로 실행된다. 

warnquota는 soft에 해당하는 제한사항을 넘어섰을때 작동한다.

vi /etc/warnquota.conf