How To Enable Quota on Linux

Last updated: Sat Jul 27 21:04:38 PDT 1996

Preamble: This document is copylefted by Albert M.C. Tam (bertie@scn.org).
Permission to use, copy, distribute this document for non-commerical
purposes is hereby granted, provided that the author's / editor's name and
this notice appear in all copies and/or supporting documents; that this
document is not modified. This document is distributed in hope that it will
be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While
every effort has been taken to ensure the accuracy of the information
documented herein, the author / editor / maintainer assumes NO
RESPONSIBILITY for errors, or for damages results for the use of the
information documented herein.

This document describes how to enable file system quota on a Linux host,
assigning quota for users, as well as the usage of miscellaneous quota
commands. It is intended for users running kernel 2.x (tested on 2.0.7).
Users with older kernels are recommended to upgrade.

Feel free to send any feedback or comments to bertie@scn.org if you find an
error, or if any information is missing. I appreciate it!

----------------------------------------------------------------------------

What is Quota?

Quota allows you to specify limits on two aspects of disk storage: the
number of inodes a user may possess; and the number of disk blocks that may
be allocated to a user.

The idea behind quota is that users are forced to stay under their disk
comsumption limit most of the time, taking away their ability to comsume
unlimited disk space on a system.

Current Status of Quota on Linux

Quota support has been integrated into since kernel version 1.3.8x I heard,
and it is in the 2.0 release of the kernel as well. If your system doesn't
support quota, I recommend an upgrade.

Currently, quota works for ext2 type file system only.

Requirements for Using Quota on Linux

Kernel

The 2.x kernel source is available from

     ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0/

Quota software

Depending on the Linux distribution you have, you may, or may not have the
quota softwares installed on your system. The quota software source is
available from

     ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz.

----------------------------------------------------------------------------

Quota Setup on Linux - Part I: The Configuration

1. Reconfigure your kernel

Reconfigure your kernel and add quota support by typing y to:

     Quota support (CONFIG_QUOTA) [n] y

2. Compile and install the quota softwares

The quota software source is available from

     ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz

While the quota software package I mentioned earlier has already been ported
to Linux, and should compile on all Linux systems running 2.x kernels; you
may run into problems where the C compiler complains about some undefined
MNTOPT constants. If that happens, you will need to copy its mntent.h over
to /usr/include/mntent.h to get quota to compile.

3. Modify your system init script to check quota and turn on quota at boot
time

Here's an example:

        # 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

The golden rule is that *always* turn quota on *after* your file systems in
/etc/fstab have been mounted, or quota will fail to work. I recommend
turning quota on at the end of your system init script, or, if you like,
right after the part where file systems are mounted in your system init
script.

4. Modify /etc/fstab

Partitions that you have not yet enabled quota normally look something like:

        /dev/hda1       /       ext2    defaults        1       1
        /dev/hda2       /usr    ext2    defaults        1       1

To add quota to the file system, add "usrquota" to the fourth field
containing the word "defaults".

        /dev/hda1       /       ext2    defaults        1       1
        /dev/hda2       /usr    ext2    defaults,usrquota       1       1

5. Create quota record "quota.user"

This quota record file, quota.user, should be owned by root, and read-write
permission for root and none for anybody else.

Login as root. Go to the base of the partition you wish to enable quota, and
create quota.user by doing:

        touch /partition/quota.user
        chmod 600 /partition/quota.user

6. Reboot

Now reboot system for the changes you have made to take effect.

Also note that subsequent partitions you wish to enable quota in the future
only require step 4, 5, and 6.

Quota Setup on Linux - Part II: Assigning Quota for Users

This operation is performed with the edquota command. For example, the
command "edquota bob" will take you into vi (or editor specified in your
$EDITOR environment variable) to edit quota for user "bob" on each partition
that has quota enabled:

        Quotas for user bob:
        /dev/hda2: blocks in use: 2594, limits (soft = 5120, hard = 6400)
                inodes in use: 356, limits (soft = 1000, hard = 1500)

"blocks in use" is the total number of blocks (in kilobytes) a user has
comsumed on a partition.

"inodes in use" is the total number of files a user has on a partition.

In addition to edquota, there are 3 others terms which you should
familiarize yourself with: Soft Limit, Hard Limit, and Grace Period.

Soft Limit

Normally, soft limit indicates the maximum amount of disk usage a quota user
has on a partition. But when combined with the grace period, it acts as the
border line, which a quota user is issued warnings about his impending quota
violation when passed.

Hard Limit

The hard limit only works, when a grace period is set. It specifies the
absolute limit on the disk usage, which a quota user can't go beyond his
hard limit.

Grace Period

Executed with the command "edquota -t", the grace period is a time limit
before the soft limit is enforced for a quota user. Time units of sec(onds),
min(utes), hour(s), day(s), week(s), and month(s) can be used. This is what
you'll see with the command "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

Change the 0 days part to any length of time you feel reasonable. I
personally would choose 7 days (or 1 week).

----------------------------------------------------------------------------

Miscellaneous Quota Commands

Quotacheck

Quotacheck is used to scan a file system for disk usages, and updates the
quota record file "quota.user" to the most recent state. I recommend running
quotacheck periodically at system bootup, or via cronjob every once in a
while (say, 1 week?).

Repquota

Repquota produces a summarized quota information for a file system. Here is
a sample output repquota gives:

        # 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

Quotaon and Quotaoff

Quotaon is used to turn on quota accouting; quotaoff to turn it off.
Actually both files are similar. They are executed at system startup and
shutdown.