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.