10.7. 디스크 쿼터

쿼터는 운영체제가 지원하는 선택적인 특성으로서, 한 명의 사용자 또는 한 사용자 모임(group)이 사용할 수 있는 디스크 공간의 양이나 파일의 수에 제한을 두는 것입니다. 이것은 사용자나 사용자 모임이 사용할 수 있는 자원량에 제한을 두고자하는 대부분의 시분할 시스템에서 사용됩니다. 이 방법으로 한 사용자가 디스크 공간을 모두 사용해 버리는 것을 막을 수 있습니다.

10.7.1. 디스크 쿼터를 사용하기 위한 설정

디스크 쿼터를 사용하기 전에 커널에 쿼터 사용 옵션이 설정되어 있는지 확인해야 합니다. 커널 설정 파일에 다음과 같은 줄을 추가해야 합니다.

     options QUOTA

기본 GENERIC 커널은 이 옵션이 설정되어있지 않으므로 디스크 쿼터를 사용하기 위해서는 커널을 새로 빌드해야 합니다. 커널 설정에 관한 더 많은 정보를 원하시면 FreeBSD 커널 설정을 참고하시기 바랍니다.

그 다음에는 /etc/rc.conf 파일에서 디스크 쿼터를 사용가능하게 해야 합니다. 다음과 같은 줄을 추가합니다.

    enable_quotas="YES"

좀더 나은 관리를 위해서 사용할 수 있는 변수들이 더 있습니다. 보통 부트과정에서 quotacheck프로그램이 각 파일 시스템이 쿼터의 제한을 제대로 지키고 있는지 검사합니다. quotacheck 프로그램은 쿼터 데이터베이스에 있는 정보가 실제 파일 시스템의 정보를 올바르게 반영하고 있음을 보장합니다. 이것은 꽤 많은 시간을 소모하는 일이므로 시스템 부팅시간을 느리게 할 것입니다. 이 과정을 건너뛰고 싶다면 다음과 같은 설정을 추가합니다.

    check_quotas="NO"

3.2-릴리즈보다 이전 버전의 FreeBSD를 사용한다면 설정은 더 쉬워서, 단지 하나의 변수로만 구성됩니다. 여러분의 /etc/rc.conf 파일에 다음을 추가하십시오.

    check_quotas="YES"

마지막으로 /etc/fstab파일을 편집해야 합니다. 이 파일에서 유저쿼터만 적용하거나 그룹쿼터만 적용할 지 아니면 둘 모두 적용할 지 결정할 수 있습니다.

각 사용자에 대한 쿼터를 적용시키려면 /etc/fstab 파일에서 원하는 파일 시스템의 옵션 필드에 userquota 옵션을 추가하십시오. 예를 들자면 다음과 같습니다.

    /dev/da1s2g   /home    ufs rw,userquota 1 2

그룹 쿼터를 적용시키려면 앞에서와 비슷하게 groupquota 옵션을 사용하면 됩니다. 유저쿼터와 그룹쿼터를 모두 적용하려면 /etc/fstab에 다음과 같이 쓰면 됩니다.

    /dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

기본으로 디스크 쿼터에 관련된 파일은 루트 디렉토리에 quota.user와 quota.group로 저장됩니다. 두 파일은 각각 유저쿼터와 그룹쿼터에 대한 파일입니다. 더 많은 정보를 원하면 man fstab을 참고하십시오. 비록 매뉴얼 페이지에는 이 파일들을 저장하는 위치를 다르게 지정해 줄 수 있다는 말이 있더라도, 쿼터 파일들을 다른 곳에 저장하는 것은 좋지 않습니다. 쿼터 유틸리티 중에는 쿼터 파일이 루트 디렉토리에 저장되어 있지 않으면 제대로 작동하지 않는 것도 있기 때문입니다.

이제는 시스템을 새 커널로 부팅하십시오. /etc/rc 는 /etc/fstab 파일을 읽고 쿼터 파일을 만들기 위한 적절한 명령을 자동으로 실행합니다.

보통은 quotacheck, quotaon, quotaoff 같은 명령들을 수동으로 실행시킬 필요는 없습니다. 그러나 쿼터 시스템과 좀더 친숙해 지기 위해서는 이 명령들의 매뉴얼 페이지를 읽어보는 것이 좋을지도 모릅니다.

10.7.2. Setting Quota Limits

시스템에 쿼터를 설정한 다음에, 정말로 디스크 쿼터가 적용되었는지 확인하는 간단한 방법은 다음 명령을 실행하는 것입니다.

    # quota -v

각각의 디스크 사용량과 현재 설정된 디스크 쿼터 제한사항(limits) 을 볼 수 있을 것입니다.

이제 여러분은 edquota 명령으로 쿼터 제한사항을 편집할 준비가 끝났습니다.

사용자나 사용자 그룹이 사용할 수 있는 디스크 사용량에 제한(block quotas)을 두거나 만들 수 있는 파일 개수에 제한(inode quotas)을 둘 수 있는 여러가지 옵션이 있습니다. 혹은 두 가지를 혼합해서 제한을 둘 수도 있습니다. 이런 각각의 제한 사항들은 엄격한 제한(hard limits)과 덜 엄격한 제한(soft limits)으로 다시 나누어집니다.

엄격한 제한은 제한사항을 넘는 것을 허용하지 않은 것입니다. 제한에 걸린 사용자는 파일 시스템에서 새로운 공간을 사용할 수 없을 것입니다. 예를 들어 사용자에게 500블럭의 엄격한 제한이 걸려 있고, 현재 사용중인 블럭이 490개라면 더 사용할 수 있는 블럭은 10개 뿐입니다. 11개의 블럭을 사용하려고 하면 실패할 것입니다.

반면에 덜 엄격한 제한을 걸어 놓으면 일정한 시간동안은 제한사항을 넘을 수 있습니다. 그 시간을 grace period라고 하며, 기본적으로 일주일로 되어 있습니다. 사용자가 제한사항을 넘긴 상태로 주어진 grace period를 넘기면, 더 이상 새로운 공간을 사용할 수 없습니다. 그러다가 제한사항 이하로 다시 돌아가면 grace peroid는 리셋됩니다.

아래에 보이는 것은 edquota 명령을 실행한 예제 입니다. edquota 명령을 실행하면 환경변수 EDITOR에 설정된 에디터(설정되지 않았을 경우는 vi) 로 쿼터 제한사항을 편집할 수 있습니다.

    # edquota -u test
    Quotas for user test:
    /usr: blocks in use: 65, limits (soft = 50, hard = 75)
            inodes in use: 7, limits (soft = 50, hard = 60)
    /usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
            inodes in use: 0, limits (soft = 50, hard = 60)

보통 쿼터가 활성화된 파일 시스템 마다 두 줄씩 보일 것입니다. 한 줄은 블럭 제한에 대한 것이고, 한 줄은 아이노드 제한에 대한 것입니다. 간단히 원하는 값을 바꾸기만 하면 쿼터 제한을 바꿀 수 있습니다. 예를들어, 이 사용자의 블럭 제한을 soft 50, hard 75에서 soft 500, hard 600으로 바꾼 것입니다. change:

    /usr: blocks in use: 65, limits (soft = 50, hard = 75)

to:

     /usr: blocks in use: 65, limits (soft = 500, hard = 600)

새로운 쿼터 제한은 에디터를 종료한 후에 적용됩니다.

때때로 쿼터 제한을 uid의 범위로 지정하고 싶을 때가 있을 수 있습니다. 이때는 edquota 명령을 -p 옵션과 함께 사용하면 됩니다. 일단은, 원하는 제한사항을 한 사용자에게 건 다음에, edquota -p protouser startuid-enduid 명령을 실행합니다. 예를 들어, test라는 사용자에게 설정된 제한 사항을 uid 10,000부터 19,999까지의 사용자에게 똑같이 설정하고 싶다면 다음과 같습니다.

    # edquota -p test 10000-19999

더 자세한 정보를 원하시면 man edquota를 참조하십시오.

10.7.3. Checking Quota Limits and Disk Usage

쿼터 제한과 디스크 사용량을 체크하기 위해서 quota나 repquota 명령을 사용할 수 있습니다. quota 명령은 개별적인 사용자나 그룹에 대한 정보를 체크하는데 사용될 수 있습니다. 오직 수퍼유저만 다른 사용자나 자신이 소속되지 않은 그룹의 정보를 볼 수 있습니다. repquota 명령은 쿼터가 활성화된 모든 파일 시스템의 모든 쿼터 제한과 디스크 사용량을 요약해서 보여줍니다.

아래 내용은 두 파일 시스템에 쿼터 제한을 가진 사용자의 quota -v 명령의 출력 샘플입니다.

    Disk quotas for user test (uid 1002):
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
               /usr      65*     50      75   5days       7      50      60
           /usr/var       0      50      75               0      50      60

위 예제에서 이 사용자는 /usr 파일 시스템에 soft limit인 50블럭보다 15블럭을 더 사용하고 있는데, grace period는 5일 남아있습니다. 별표(*)는 사용자가 쿼터 제한을 넘었다는 것을 나타냅니다.

파일 시스템에 쿼터가 활성화되어 있더라도, 전혀 사용되지 않은 파일 시스템은 quota명령에서 보이지 않습니다. -v 옵션을 주면 위의 예에서 /usr/var 처럼 사용되지 않은 파일 시스템도 보여줍니다.

10.7.4. Quotas over NFS

쿼터는 NFS 서버에 있는 쿼터 서브시스템에 의해서 실행됩니다. rpc.rquotad(8) 데몬이 NFS 클라이언트의 quota(1) 명령과 허가된 사용자들에게 쿼터 정보를 사용가능하게 합니다.

다음과 같이 /etc/inetd.conf 파일에서 rpc.rquotad를 활성화 시킵니다.

    rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

이제 inetd를 다시 시작합니다:

    # kill -HUP `cat /var/run/inetd.pid`