Chapter 23. 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. 23.1. Installing the quota tool You must install the quota RPM package to implement disk quotas. Procedure Install the quota package: 23.2. Enabling quota feature on file system creation Enable quotas on file system creation. Procedure Enable quotas on file system creation: Note Only user and group quotas are enabled and initialized by default. Change the defaults on file system creation: Mount the file system: Additional resources ext4(5) man page on your system. 23.3. Enabling quota feature on existing file systems Enable the quota feature on existing file system by using the tune2fs command. Procedure Unmount the file system: Enable quotas on existing file system: Note Only user and group quotas are initialized by default. Change the defaults: Mount the file system: Additional resources ext4(5) man page on your system. 23.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. Prerequisites Quota feature is enabled and the default quotas are initialized. Procedure Enable quota enforcement by quotaon for the user quota: Note The quota enforcement can be enabled at mount time using usrquota , grpquota , or prjquota mount options. Enable user, group, and project quotas for all file systems: If neither of the -u , -g , or -P options are specified, only the user quotas are enabled. If only -g option is specified, only group quotas are enabled. If only -P option is specified, only project quotas are enabled. Enable quotas for a specific file system, such as /home : Additional resources quotaon(8) man page on your system 23.5. Assigning quotas per user The disk quotas are assigned to users with the edquota command. Note 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. Prerequisites User must exist prior to setting the user quota. Procedure Assign the quota for a user: Replace username with the user to which you want to assign the quotas. For example, if you enable a quota for the /dev/sda partition and execute the command edquota testuser , the following is displayed in the default editor configured on the system: 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. 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 two columns are used to set soft and hard block limits for the user on the file system. The inodes column 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. Verification Verify that the quota for the user has been set: 23.6. Assigning quotas per group You can assign quotas on a per-group basis. Prerequisites Group must exist prior to setting the group quota. Procedure Set a group quota: For example, to set a group quota for the devel group: This command displays the existing quota for the group in the text editor: Modify the limits and save the file. Verification Verify that the group quota is set: 23.7. Assigning quotas per project You can assign quotas per project. Prerequisites Project quota is enabled on your file system. Procedure Add the project-controlled directories to /etc/projects . For example, the following adds the /var/log path with a unique ID of 11 to /etc/projects . Your project ID can be any numerical value mapped to your project. Add project names to /etc/projid to map project IDs to project names. For example, the following associates a project called Logs with the project ID of 11 as defined in the step. Set the desired limits: Note You can choose the project either by its project ID ( 11 in this case), or by its name ( Logs in this case). Using quotaon , enable quota enforcement: See Enabling quota enforcement . Verification Verify that the project quota is set: Note You can verify either by the project ID, or by the project name. Additional resources edquota(8) , projid(5) , and projects(5) man pages on your system 23.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. Procedure Edit the grace period: Important While other edquota commands operate on quotas for a particular user, group, or project, the -t option operates on every file system with quotas enabled. Additional resources edquota(8) man page on your system 23.9. Turning file system quotas off Use quotaoff to turn disk quota enforcement off on the specified file systems. Quota accounting stays enabled after executing this command. Procedure To turn all user and group quotas off: If neither of the -u , -g , or -P options are specified, only the user quotas are disabled. If only -g option is specified, only group quotas are disabled. If only -P option is specified, only project quotas are disabled. The -v switch causes verbose status information to display as the command executes. Additional resources quotaoff(8) man page on your system 23.10. Reporting on disk quotas Create a disk quota report by using the repquota utility. Procedure Run the repquota command: For example, the command repquota /dev/sda produces this output: View the disk usage report for all quota-enabled file systems: The -- 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. The 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. Additional resources The repquota(8) man page for more information.

Commands:
dnf install quota
mkfs.ext4 -O quota /dev/sda
mkfs.ext4 -O quota -E quotatype=usrquota:grpquota:prjquota /dev/sda
mount /dev/sda
umount /dev/sda
tune2fs -O quota /dev/sda
tune2fs -Q usrquota,grpquota,prjquota /dev/sda
mount /dev/sda
mount /dev/sda /mnt
quotaon /mnt
mount -o usrquota,grpquota,prjquota /dev/sda /mnt
quotaon -vaugP
quotaon -vugP /home
edquota username
Disk quotas for user testuser (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sda 44043 0 0 37418 0 0
Disk quotas for user testuser (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sda 44043 50000 55000 37418 0 0
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
edquota -g groupname
edquota -g devel
Disk quotas for group devel (gid 505): Filesystem blocks soft hard inodes soft hard /dev/sda 440400 0 0 37418 0 0
quota -vg groupname
echo 11:/var/log >> /etc/projects
echo Logs:11 >> /etc/projid
edquota -P 11
quota -vP 11
edquota -t
quotaoff -vaugP
repquota
*** 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
repquota -augP