리눅스 사용자 용량 제한 quota 사용 방법

리눅스 서버를 운영하는 웹 호스팅 사이트가 많이 존재한다. 대체로 사이트를 만들어주고 월 일정요금을 받으며, 사용자에게 서비스를 제공하는 역할을 하는곳이다.

하지만 가끔식 특정 사이트의 사용자들이 무분별하게 데이터를 업로드 하는걸 보고, 사용자 용량 제한을 설정할 필요성을 경험한적도 있다. 리눅스 서버에서 사용자 별로 용량 제한 하는 방법에 대해 설명하겠다.

리눅스에는 quota 라는 툴이 존재한다. 파일시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것이며, 리눅스 시스템 사용자의 용량을 설정할 수 있는 아주 좋은 툴이다.

Quota 설치

일반적으로 레드헷 기반의 centos 운영체제가 설치된 환경에서 quota가 설치되어있는지 확인해 보자.

rpm -qa quota

설치된 파일 리스트가 보이면 별도로 설치 안해도 되며, 아무런 메시지가 나오지 않는다면 설치를 해야된다.

yum -y install quota

필자의 경우 quota가 이미 설치된 상태이다.

quota 설정

쿼터는 유저별 제한, 그룹별 제한이 가능하다. 여기서 파일시스템에 제한 여부를 확인해 본다.

vi /etc/fstab

quota로 설정할 파일시스템을 선택하여, usrquota 라는 명령줄을 추가해 준다. 여기서 중요한부분이, defaults,usrquota 라고 중간에 , 를 붙여줘야 된다. 혹시나 그룹별 제한을 위해서는 grpquota 를 추가하면 된다.

아래는 /etc/fstab 에 할당할수 있는 옵션들이다.

옵션적용대상용도
usrquota모든 유형사용자 할당량 사용
usrjquota=filenamevfsv0저널 사용자 할당량 사용(jqfmt 옵션의 스펙 및 할당량 데이터베이스 파일 이름(일반적으로aquota.user)이 필요함)
uquotaxfsusrquota와 동등
grpquota모든 유형그룹 할당량 사용
grpjquota=filename        vfsv0저널 그룹 할당량 사용(jqfmt 옵션의 스펙 및 할당량 데이터베이스 파일 이름(일반적으로 aquota.group)이 필요함)
gquotaxfsgrpquota와 동등
prjquotaxfs프로젝트 할당량 사용
pquotaxfsprjquota와 동등
jqfmt=formatvfsv0usrjquota 또는 grpjquota가 지정될 때 사용된 할당량의 형식(현재는 vfsv0가 유일하게 지원되는 형식임)
quotavfsold, vfsv0usrquota와 동등
noquotavfsold, vfsv0할당량을 사용하지 않음
uqnoenforcexfs사용자 할당량 계산을 사용하지만 적용하지는 않음
gqnoenforcexfs그룹 할당량 계산을 사용하지만 적용하지는 않음
pqnoenforcexfs프로젝트 할당량 계산을 사용하지만 적용하지는 않음

설정 적용을 위해서는 재부팅하거나 다시 마운트를 해야되는데, 리마운트 명령어를 입력해서 바로 적용하는 방법도 있다.

mount -o remount /data

화면과 같이 리마운트 된 모습을 확인할 수 있다. 명령어 입력을 통해 리눅스 프롬프트 상에서 아무런 반응이 없으면 정상인 것이다.

mount

명령어를 이용해서 정상적으로 마운트가 되었는지 최종 확인 한다.

시스템 사용자 용량 제한

사용자 용량 제한을 하기 위해서는 quota 를 사용할 파일 생성 및 계정별 용량을 설정해야 된다.

cd /data
touch aquota.user

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

chmod 600 aquota.user

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

quotacheck -avug

쿼타 시작

quotaon -avug

모든 쿼타 설정을 확인한다.

repquota -a

*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      -- 3175360       0       0           7846     0     0    
mysql     --  496044       0       0          37185     0     0    
dong      --      16  400000  400000              4     0     0    
#500      --    1836       0       0            123     0     0    
#501      --   39408       0       0           2614     0     0    
#1169     --    7644       0       0            299     0     0    
#7161     --  289400       0       0          15454     0     0

repquota 옵션 설명

used : 현재 사용량
soft : 현재 설정된 soft limit
hard : 현재 설정된 hard limit
grace : soft limit에 지정된 용량 초과시 남은 유예 기간 표시

사용자 용량 설정

edquota -u dong

Disk quotas for user dong (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                        16     400000     400000          4        0        0

edquota 옵션 설명

단위는 기본 kbytes 이다.

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

편집 방법은 vi를 사용하듯 사용하면 되고 10240kb(10MB)와 같은 값을 입력해주면 된다.

사용자 용량 제한인 quota 설정이 완료되었다. quota 설정이 적용 된 계정들은 ftp 파일업로드 및 기타방법등으로 업로드를 할 경우 제한된 설정값 까지만 업로드가 가능해지게 되었다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다