Last updated: Fri Aug 8 09:45:05 HKT 1997
This document describes how to enable file system quota on a Linux host, assigning quota for users and groups, as well as the usage of miscellaneous quota commands. It is intended for users running kernel 2.x (recently tested on RedHat 4.1 running kernel 2.0.27). Users running older kernels may need to upgrade to a newer kernel version in order to take advantage of quota.
Feel free to send feedbacks or comments to bertie@scn.org if you find an error, or if any information is missing. I appreciate it.
Quota allows you to specify limits on two aspects of disk storage: the number of inodes a user or a group of users may possess; and the number of disk blocks that may be allocated to a user or a group of users.
The idea behind quota is that users are forced to stay under their disk comsumption limit, taking away their ability to comsume unlimited disk space on a system.
Quota is handled on a per user, per file system basis. If there is more than one file system which a user is expected to create files, then quota must be set for each file system seperately.
Quota support has been integrated into kernel since version 1.3.8x I heard. Now it is part of the 2.0 release of the Linux kernel. If your system doesn't support quota, I really recommend an upgrade.
Currently, quota works for ext2 type file system only.
Kernel
The 2.x kernel source is available from
Quota software
Depending on the Linux distribution you have, you may, or may not have the quota softwares installed on your system. If you don't, then download the quota software source from
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
3. Modify your system init script to check quota and turn quota on 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, otherwise 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 enable user quota support on a file system, add "usrquota" to the fourth field containing the word "defaults" (man fstab for details).
/dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,usrquota 1 1
Replace "usrquota" with "grpquota", should you need group quota support on a file system.
/dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,grpquota 1 1
Need both user quota and group quota support on a file system?
/dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,usrquota,grpquota 1 1
5. Create quota record "quota.user" and "quota.group"
Both quota record files, quota.user and quota.group, should be owned by root, and read-write permission for root and none for anybody else.
Login as root. Go to the root of the partition you wish to enable quota, then create quota.user and quota.group by doing:
touch /partition/quota.user touch /partition/quota.group chmod 600 /partition/quota.user chmod 600 /partition/quota.group
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.
This operation is performed with the edquota command (man edquota for details).
I would normally run quotacheck with the flags -avug to obtain the most updated filesystems usage prior to editing quota. This is just a personal habit, and not a required step however.
Assigning quota for a particular user
Here's an example. I have a user with the login id bob on my system. The command "edquota -u bob" takes me into vi (or editor specified in my $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 = 5000, hard = 6500) 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.
Assigning quota for a particular group
Now I have a group games on my system. "edquota -g games" takes me into the vi editor again to edit quota for the group 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)
Assigning quota for a bunch of users with the same value
To rapidly set quotas for, say 100 users, on my system to the same value as my user bob, I would first edit bob's quota information by hand, then execute:
edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
assuming that you are using csh, and that you assign your user UID's starting with 500.
In addition to edquota, there are 3 terms which you should familiarize yourself with: Soft Limit, Hard Limit, and Grace Period.
Soft Limit
Soft limit indicates the maximum amount of disk usage a quota user has on a partition. When combined with grace period, it acts as the border line, which a quota user is issued warnings about his impending quota violation when passed.
Hard Limit
Hard limit works only when 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", grace period is a time limit before the soft limit is enforced for a file system with quota enabled. 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).
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 at system bootup, or via cronjob periodically (say, every 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.