Chapter 30. Limiting storage space usage on ext4 with quotas
You have to enable disk quotas on your system before you can assign them. You can assign disk quotas per user, per group or per project. However, if there is a soft limit set, you can exceed these quotas for a configurable period of time, known as the grace period.
30.1. Installing the quota tool
You must install the
quota RPM package to implement disk quotas.
# dnf install quota
30.2. Enabling quota feature on file system creation
This procedure describes how to enable quotas on file system creation.
Enable quotas on file system creation:
# mkfs.ext4 -O quota /dev/sdaNote
Only user and group quotas are enabled and initialized by default.
Change the defaults on file system creation:
# mkfs.ext4 -O quota -E quotatype=usrquota:grpquota:prjquota /dev/sda
Mount the file system:
# mount /dev/sda
30.3. Enabling quota feature on existing file systems
This procedure describes how to enable the quota feature on existing file system using the
Unmount the file system:
# umount /dev/sda
Enable quotas on existing file system:
# tune2fs -O quota /dev/sdaNote
Only user and group quotas are initialized by default.
Change the defaults:
# tune2fs -Q usrquota,grpquota,prjquota /dev/sda
Mount the file system:
# mount /dev/sda
30.4. Enabling quota enforcement
The quota accounting is enabled by default after mounting the file system without any additional options, but quota enforcement is not.
- Quota feature is enabled and the default quotas are initialized.
Enable quota enforcement by
quotaonfor the user quota:
# mount /dev/sda /mnt
# quotaon /mntNote
The quota enforcement can be enabled at mount time using
# mount -o usrquota,grpquota,prjquota /dev/sda /mnt
Enable user, group, and project quotas for all file systems:
# quotaon -vaugP
If neither of the
-Poptions are specified, only the user quotas are enabled.
-goption is specified, only group quotas are enabled.
-Poption is specified, only project quotas are enabled.
- If neither of the
Enable quotas for a specific file system, such as
# quotaon -vugP /home
30.5. Assigning quotas per user
The disk quotas are assigned to users with the
The text editor defined by the
EDITOR environment variable is used by
edquota. To change the editor, set the
EDITOR environment variable in your
~/.bash_profile file to the full path of the editor of your choice.
- User must exist prior to setting the user quota.
Assign the quota for a user:
# edquota username
Replace username with the user to which you want to assign the quotas.
For example, if you enable a quota for the
/dev/sdapartition and execute the command
edquota testuser, the following is displayed in the default editor configured on the system:
Disk quotas for user testuser (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sda 44043 0 0 37418 0 0
Change the desired limits.
If any of the values are set to 0, limit is not set. Change them in the text editor.
For example, the following shows the soft and hard block limits for the testuser have been set to 50000 and 55000 respectively.
Disk quotas for user testuser (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sda 44043 50000 55000 37418 0 0
- The first column is the name of the file system that has a quota enabled for it.
- The second column shows how many blocks the user is currently using.
- The next two columns are used to set soft and hard block limits for the user on the file system.
inodescolumn shows how many inodes the user is currently using.
The last two columns are used to set the soft and hard inode limits for the user on the file system.
- The hard block limit is the absolute maximum amount of disk space that a user or group can use. Once this limit is reached, no further disk space can be used.
- The soft block limit defines the maximum amount of disk space that can be used. However, unlike the hard limit, the soft limit can be exceeded for a certain amount of time. That time is known as the grace period. The grace period can be expressed in seconds, minutes, hours, days, weeks, or months.
Verify that the quota for the user has been set:
# quota -v testuser Disk quotas for user testuser: Filesystem blocks quota limit grace files quota limit grace /dev/sda 1000* 1000 1000 0 0 0
30.6. Assigning quotas per group
You can assign quotas on a per-group basis.
- Group must exist prior to setting the group quota.
Set a group quota:
# edquota -g groupname
For example, to set a group quota for the
# edquota -g devel
This command displays the existing quota for the group in the text editor:
Disk quotas for group devel (gid 505): Filesystem blocks soft hard inodes soft hard /dev/sda 440400 0 0 37418 0 0
- Modify the limits and save the file.
Verify that the group quota is set:
# quota -vg groupname
30.7. Assigning quotas per project
This procedure assigns quotas per project.
- Project quota is enabled on your file system.
Add the project-controlled directories to
/etc/projects. For example, the following adds the
/var/logpath with a unique ID of 11 to
/etc/projects. Your project ID can be any numerical value mapped to your project.
# echo 11:/var/log >> /etc/projects
Add project names to
/etc/projidto map project IDs to project names. For example, the following associates a project called
Logswith the project ID of 11 as defined in the previous step.
# echo Logs:11 >> /etc/projid
Set the desired limits:
# edquota -P 11Note
You can choose the project either by its project ID (
11in this case), or by its name (
Logsin this case).
quotaon, enable quota enforcement:
Verify that the project quota is set:
# quota -vP 11Note
You can verify either by the project ID, or by the project name.
30.8. Setting the grace period for soft limits
If a given quota has soft limits, you can edit the grace period, which is the amount of time for which a soft limit can be exceeded. You can set the grace period for users, groups, or projects.
Edit the grace period:
# edquota -t
edquota commands operate on quotas for a particular user, group, or project, the
-t option operates on every file system with quotas enabled.
30.9. Turning file system quotas off
quotaoff to turn disk quota enforcement off on the specified file systems. Quota accounting stays enabled after executing this command.
To turn all user and group quotas off:
# quotaoff -vaugP
If neither of the
-Poptions are specified, only the user quotas are disabled.
-goption is specified, only group quotas are disabled.
-Poption is specified, only project quotas are disabled.
-vswitch causes verbose status information to display as the command executes.
- If neither of the
30.10. Reporting on disk quotas
You can create a disk quota report using the
For example, the command
repquota /dev/sdaproduces this output:
*** Report for user quotas on device /dev/sda Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 36 0 0 4 0 0 kristin -- 540 0 0 125 0 0 testuser -- 440400 500000 550000 37418 0 0
View the disk usage report for all quota-enabled file systems:
# repquota -augP
-- symbol displayed after each user determines whether the block or inode limits have been exceeded. If either soft limit is exceeded, a
+ character appears in place of the corresponding
- character. The first
- character represents the block limit, and the second represents the inode limit.
grace columns are normally blank. If a soft limit has been exceeded, the column contains a time specification equal to the amount of time remaining on the grace period. If the grace period has expired,
none appears in its place.
repquota(8) man page for more information.