  Quota mini-HOWTO
  Ralf van Dooren r.vdooren@snow.nl
  v0.3, April 2002

  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 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 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.17).

  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?

  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.

  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.


  3.  Requirements for Using Quota on Linux


  3.1.  Kernel


  The 2.x kernel source is available from

  ______________________________________________________________________
  http://www.kernel.org
  ______________________________________________________________________



  3.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
  ______________________________________________________________________



  4.  Quota Setup on Linux - Part I: The Configuration


  4.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. Patch your kernel
  with the 'patch' command.


  4.2.  Reconfigure your kernel


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

  ______________________________________________________________________
  Quota support (CONFIG_QUOTA) [n] y
  ______________________________________________________________________



  Via `make menuconfig` of `make xconfig` you can find the option to
  support quota under the Filesystems-menu.

  Make sure the new kernel will be used when rebooting the system.


  4.3.  Compile and install the quota softwares

  If the quota package is already in your Linux distribution, you don't
  have to install the quota software. If the quota package is not
  available in your Linux distribution, or if you wan't to install the
  most recent version, you can download the latest version of the quota
  software source from the location mentioned above.

  When downloaded do:

  ______________________________________________________________________
  $ gzip -dc <downloaded file> | tar xvf
  $ cd quota-tools  (or whatever directory the software is put in)
  $ ./configure
  $ make
  $ su
  # make install
  ______________________________________________________________________



  4.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.


  4.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
  ______________________________________________________________________



  4.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.

  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
  ______________________________________________________________________



  5.  Quota Setup on Linux - Part II: Assigning Quota for Users and
  Groups


  This operation is performed with the edquota command (`man edquota`
  for details).


  5.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.

  5.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)
  ______________________________________________________________________



  5.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.

  5.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.

  5.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.

  5.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).

  6.  Miscellaneous Quota Commands


  6.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?).

  6.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
  ______________________________________________________________________



  6.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.



