Quota mini-HOWTO
Ralf van Dooren r.vdooren@snow.nl
v0.5, 2003-08-09
Preamble: This document is written by Ralf van Dooren
(r.vdooren@snow.nl). Original text and setup of this document is
copyleft-ed by Albert M.C. Tam, many thanks to him for this initial
mini-HOWTO. This document is licensed under the GNU Free Documenta
tion License. Permission to use, copy, distribute this document for
non-commercial 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 dis
tributed 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 dam
ages 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 and groups, as well as the usage of
miscellaneous quota commands. It is intended for users running kernel
2.x (recently tested on kernel 2.4.21).
Feel free to send feedbacks or comments to r.vdooren@snow.nl if you
find an error, or if any information is missing. I appreciate it.
1. What is quota?
1.1. What is quota for?
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 consumption limit, taking away their ability to consume 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
separately. Various tools are available for you to administer and
automate quota policies on your system.
1.2. Current Status of Quota on Linux
Currently, there are some major changes in the way quota works. There
are two different setups. The tools works the same, but there's a
difference in used files. This document describes the setup and
operation of the _new_ quota setup. As the new setup of quota is not
in the regular kernel source, this setup needs some patching. We will
describe this patching and installation of the linuxquota package. If
you already have the quota software installed on your system, you may
or may not have to install this patch and package. You can email me if
you have any questions about this. I'll try to include a overview of
Linux distro's and it's implications in a later version of this
document.
2. Requirements for quota
2.1. Kernel
The 2.x kernel source is available from http://www.kernel.org
Please use an available mirror close to your
location to save bandwidth. If you have a recent version of tar, you
can download the .bz2 compressed file.
Untar the kernel:
______________________________________________________________________
cd /usr/src
tar jxvf /path/to/linux-2.4.21-tar.bz2 - for bzip2 kernel -
tar zxvf /path/to/linux-2.4.21-tar.gz - for gzip kernel -
ln -s /usr/src/linux-2.4.21 /usr/src/linux
______________________________________________________________________
2.2. Quota software
Depending on the Linux distribution you have, you may, or may not have
the quota softwares installed on your system. The most recent version
of quota is available through SourceForge and is in active
development. You can reach the homepage of the quota-development at
http://www.sourceforge.net/projects/linuxquota
.
3. Quota setup: installation and configuration
3.1. Patch the kernel
Download the patch for your kernel at:
ftp::/atrey.karlin.mff.cuni.cz/pub/local/jack/quota/
.
Choose your kernel version and download the patch(es). Patch your
kernel with the 'patch' command. If there is more than 1 patch for
your kernel version, be sure to apply the patches in the correct
order.
You can use this script ( I assume the downloaded patches are in
/tmp/quota/ and the kernel has been untarred to /usr/src/linux) :
______________________________________________________________________
#!/bin/sh
gunzip /tmp/quota/*.gz
cd /usr/src/linux
COUNT=`ls -1 /tmp/quota/*.diff | wc -l`
for I in `seq 1 $COUNT`
do
patch -p1 < /tmp/quota/quota-2.4.21-$I-*.diff
done
______________________________________________________________________
3.2. Reconfigure your kernel
Reconfigure your kernel and add quota support.
Via `make menuconfig` or `make xconfig` you can find the option to
support quota under the Filesystems-menu. You can specify extra
options if you need them, like 32-bit UID support.
Save the configuration and compile the kernel. Make sure the new
kernel will be used when rebooting the system.
3.3. Compile and install the quota softwares
To be able to use all the features of the new quota system, you'll
probably need to download the new quota-package. Download the new
quota software via the URL provided above.
When downloaded do:
______________________________________________________________________
$ gzip -dc | tar xvf
$ cd quota-tools (or whatever directory the software is put in)
$ ./configure
$ make
$ su
# make install
______________________________________________________________________
3.4. time Modify your system init script to check quota and turn
quota on at boot
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 right after the part where file systems are
mounted in your system init script.
3.5. 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
______________________________________________________________________
3.6. Activate the quota system
To activate the quota software you have to reboot the system for the
changes you have made to take effect. The new kernel with quota
support will be loaded and the startup scripts you've just created
will be executed. At first run, quotacheck will generate the
appropiate files to maintain the quota databases.
3.7. Add quotacheck to crontab
Although quota should work with periodical checks, it sometimes helps
to run quotacheck periodically, e.g. weekly. Add the following line to
your root's crontab:
______________________________________________________________________
0 3 * * 0 /sbin/quotacheck -avug
______________________________________________________________________
4. Quota setup: tools
This operation is performed with the edquota command (`man edquota`
for details).
4.1. 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/hda3: 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 consumed on a partition.
"inodes in use" is the total number of inodes a user has consumed on a
partition.
4.2. 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)
______________________________________________________________________
4.3. 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.
4.4. 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.
4.5. 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.
4.6. 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).
5. Miscellaneous Quota Commands
5.1. Quotacheck
Quotacheck is used to scan a file system for disk usages, and updates
the quota record file "aquota.user" to the most recent state. I
recommend running quotacheck at system bootup, and via cronjob
periodically (say, every week?).
5.2. 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
______________________________________________________________________
5.3. Quotaon and Quotaoff
Quotaon is used to turn on quota accounting; quotaoff to turn it off.
Actually both files are similar. They are executed at system startup
and shutdown.