The purpose of file capacity quotas (quota) is to limit the maximum number of files or the amount of storage space that a specific user or group can utilize, preventing a particular user from exhausting the available hard disk space.
Linux has the following specifications for file capacity quotas:
It only applies to Linux native file systems like ext2 , ext3/ext4, and xfs (xfs filesystem has slightly different capacity quota commands, but this article primarily focuses on ext2~ext4).
File capacity quotas are applied at the level of the entire partition.
Quotas can be set for individual users or groups and can limit the total number of files or the total storage capacity.
Only the root user can configure capacity quotas, but the root account itself is exempt from quota restrictions.
Setting up capacity quotas is straightforward, mainly involving the use of commands like quotacheck to create quota databases, edquota to edit quotas, and quotaon to enable them. However, three essential prerequisites must be met beforehand:
Verify Kernel Support
Modern Linux distributions typically support file capacity quotas (quota). You can check if quota support is enabled in the kernel configuration file "/boot/config-XXX" (where XXX is the kernel name, varying by distribution) as follows:
# cat /boot/config-$(uname -r) | grep 'QUOTA'← Check if the kernel has quota support
CONFIG_QUOTA=y
CONFIG_QUOTACTL=y
If you see "CONFIG_QUOTA=y", it means quota support is enabled. If not, it may be because quota support wasn't included during a custom kernel upgrade. You can recompile the kernel and include "Quota support" under "File systems ---> [*] Quota support".
Edit "/etc/fstab"
To enable capacity quotas for users, you need to add "usrquota" to the mount options. For groups, you should use "grpquota". Here's an example where "/home" is a separate partition, and both user and group capacity quotas are enabled:
# grep 'quota' /etc/fstab
LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 ←Enabling user and group capacity quotas for "/home" partition.
Remount /etc/fstab
After editing the quota options in "/etc/fstab", if the partition was previously unused, you can simply remount it. However, if the partition was already in use, you should remount it with mount -o remount DIR to apply the changes. Alternatively, you can reboot the system. Regardless of the method, ensure that "/etc/mtab" contains "usrquota" or "grpquota" to confirm that the configuration is correct.
# grep 'quota' /etc/mtab ←Check if "/etc/mtab" contains "usrquota" or "grpquota"
LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
Once you see "usrquota" or "grpquota" in "/etc/mtab" concerning quota mount options, you can proceed to create quota databases using quotacheck. Otherwise, revisit steps 1 to 3 for verification.
quotacheck : Create Quota Database quotacheck checks for the presence of "usrquota" or "grpquota" mount options in "/etc/mtab" . If these options are found, it generates quota database files, "[a]quota.user", and "[a]quota.group", respectively, at the top level of the filesystem. (Note that for xfs filesystems, file capacity quotas are natively supported, so quotacheck is not required.)
The syntax for quotacheck is as follows: quotacheck [OPTIONS] [FILESYSTEM] .
Commonly used options include:
-a: Scans all filesystems listed in "/etc/mtab".
-c: Ignores existing quota databases and rebuilds them (useful if quotas were previously configured but need to be rebuilt).
-g: Generates "[a]quota.group" if the "grpquota" mount option is present in "/etc/mtab".
-u: Generates "[a]quota.user" if the "usrquota" mount option is present in "/etc/mtab".
-v: Displays detailed checking status.
Examples:
# quotacheck -g /mnt←Generates "aquota.group" for the "/mnt" directory
# quotacheck -u /mnt←Generates "aquota.user" for the "/mnt" directory
Examples:
# quotacheck -gu -a ←Generates either "aquota.group" or "aquota.user" quota databases (based on `/etc/mtab`) # find / -maxdepth 2 -name 'quota.*' -o -name 'aquota.*'←Verifies the presence of quota database files
/home/aquota.user
/home/aquota.group
All commands related to quotas, such as quotacheck, repquota or quotaon, share a consistent behavior. When no options are specified, "-u" (user quotas) is the default, and you need to specify "-g" (group quotas) to set them. The -a option scans filesystems with quota options listed in "/etc/mtab". Otherwise, you can specify the filesystem or mount point directly, like quotacheck /dev/sda2 or quotacheck /home.
edquota : Edit Quotas
After generating quota database files with quotacheck, you can use edquota (edit quota) to edit quotas. The "-u" option is used to edit user quotas (the "aquota.user" file must exist), while the "-g" option is used to edit group quotas (the "aquota.group" file must exist). You cannot use both "-u" and "-g" together; you must choose one option. To edit user and group quotas, you need to perform separate actions.
(Using edquota)
# edquota -u aaa←Edit the quotas for the "aaa" user
Disk quotas for user aaa (gid 500):
Filesystem
blocks
soft
hard
inodes
soft
hard
/dev/sda3
15368
256000
512000
534
0
0
↑
↑
↑
↑
↑
↑
↑
The partition
where the
filesystem
is located
(self-generated,
no need for
editing)
The current
no. of blocks
(self-generated, no need for
editing)
Soft
limits on capacity
hard
limit on capacity
Current no.
of inodes
(self-generated,
no need for
editing)
Soft limits
for inodes
Hard limit
on inode
←meaning
1
2
3
4
5
6
7
←Number of fields
In the example above, entering edquota for editing quotas defaults to using the vi editor. There are a total of 7 fields, each with the following meanings:
filesystem:
Displays the current partition where quotas are applied, and this field is for informational purposes only; you cannot edit it.
blocks:
Displays the current partition where quotas are applied, and this field is for informational purposes only; you cannot edit it.
soft:
Represents the soft limit for disk space usage in KB. The "soft limit" allows exceeding the limit temporarily within a grace period, but exceeding it after the grace period results in an inability to save files.
hard:
Represents the hard limit for disk space usage in KB. The "hard limit" is an absolute maximum and cannot be exceeded.
inodes:
Represents the hard limit for disk space usage in KB. The "hard limit" is an absolute maximum and cannot be exceeded.
soft:
Represents the soft limit for the number of files (inodes).
hard:
Represents the hard limit for the number of files (inodes).
You can edit the "soft" or "hard" limits by entering values. Entering "0" indicates no quota limit. Fields 1, 2, and 5 are automatically generated and should not be edited; if edited accidentally, they cannot be saved.
After editing the soft and hard quotas, you can also edit the grace period (if necessary). By default, the grace period is set to 7 days. The "-t" option is used to edit the soft limit's grace period for the entire filesystem, and the "-T" option is used to edit individual user or group soft limit grace periods. The grace period units can be seconds, minutes, hours, or days.
Examples:
# edquota -u -t←Edit the soft limit grace period for the filesystem
Examples:
# edquota -g -T bbb←Edit the soft limit grace period for the "bbb" group
If you have many user accounts, it can be cumbersome to edit quotas for each one individually. In such cases, you can create a quota prototype account and then copy its settings to other accounts. To copy quotas from a prototype to other accounts, you can use the "-p" option:
Here are some examples provided in the text:
Copy the quota settings from the "morris" user account to the "sam" user account:
# edquota -u -p morris sam
Copy the quota settings from the "rd" group to the "rd1," "rd2," and "hr" groups:
# edquota -g -p rd rd1 rd2 hr
When dealing with a large number of user accounts, a smarter approach is to use filters to collectively set quotas based on the "/etc/passwd" and "/etc/group" files. Here are some examples:
Copy the quota settings from the "morris" account to all user accounts where the home directory is specified in "/etc/passwd":
These examples demonstrate how to efficiently set or copy quotas for multiple user accounts or groups based on specific criteria.
edquota : Edit Quotas
After editing quotas using edquota, you can use quota to display and check them. The usage is as follows: quota [-u|g][-s] [user]. The "-s" option automatically converts capacity units into more readable units such as megabytes or gigabytes.
Example:
# quota -us jolin←Check the quotas for the "jolin" user.
Disk quotas for user aaa (uid 550):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 15368 250M 500M 534 0 15000
Grace periods are only displayed when exceeded for soft limits. Except for the root user, regular users can also view their own quota settings. In such cases, the account name can be omitted. For instance, using quota -u allows a user to check their own quota status, while quota -g checks their group.
quota : Display User/Group Quotas quota primarily displays quotas for specific user accounts or groups, whereas repquota is used to generate quota statistics for entire filesystems (partitions). The usage is as follows: repquota [-u|g][-sv] -a|FS.
The "-s" option automatically converts capacity quota units into megabytes or gigabytes.
The "-v" option provides further details on filesystem usage, and -a lists partitions that have quotas set in the /etc/fstab file.
Example:
# repquota -a
*** Report for user quotas on device /dev/sda3
Block grace time: 3days; Inode grace time: 3days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 141336 0 0 6 0 0
aaa -- 15368 256000 512000 534 0 15000
bbb -+ 96 256000 512000 12 10 20 2days
jay -- 1372 256000 512000 137 0 15000
jolin -- 40 256000 512000 5 0 15000
guest -- 48 0 0 6 0 0
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 176216 0 0 6 0 0
aaa -- 80 0 0 10 0 0
quotaon : Enable Quotas
After configuring quotas using edquota , the final step is to enable them using quotaon. The syntax is quotaon [-u|g][-fpv] -a|FS.
The "-p" option displays whether user or group quotas are enabled on the filesystem.
Example:
# quotaon -p /home←← Check if quotas are enabled within "/home"
group quota on /home(dev/sda2) if off
user quota on /home (dev/sda2) if off
he "-v" option displays when quotas are enabled or disabled.
Example:
# quotaon -g -a←Enable group quotas (no output because `-v` option is not used)
# quotaon -uv -a←Enable user quotas and display the status
/dev/sda2 [/home]: user quotas turned on
The "-f" option is used to disable quotas.
Example:
# quotaon -ufv /home←關閉〝/home〞使用者的配額
/dev/sda2 [/home]: user quotas turned off
quotaoff : Disable Quotas
The quotaoff command is used to disable quotas, and it is equivalent to quotaon -f. The usage is the same as that of quotaon .
Example:
# quotaoff -uv -a←Disable user quotas (based on "/etc/mtab")
/dev/sda2 [/home]: user quotas turned off
These commands allow you to manage and enable/disable disk quotas for users and groups on a Linux system.