XFS supports disk quotas by user, by group, and by project. Project disk quotas allow you to limit the amount of disk space on individual directory hierarchies. You can configure both hard and soft limits on the number of disk blocks (or disk space), and the number of inodes, which limit the number of files a user can create. Quotas do not apply to the root user.
You must first enable quotas for users, groups, and/or projects by using a mount option when mounting for the XFS file system. After enabling quotas, use the xfs_quota command to set limits, to view quota information.
Enabling Quotas
To enable quotas for users on an XFS file system, include the quota option in the /etc/fstab entry for the file system, or mount the file system with the quota
option:
# mount –o quota /dev/xvdb1 /xfs
To enable quotas for groups, include the gquota option in the /etc/fstab entry for the file system, or mount the file system with the gquota
option:
# mount –o gquota /dev/xvdb1 /xfs
To enable quotas for projects, include the prjquota option in the /etc/fstab entry for the file system, or mount the file system with the prjquota
option:
# mount –o prjquota /dev/xvdb1 /xfs
Alternatively, you can include the quota mount options in the /etc/fstab
file. The following example shows entries in the /etc/fstab file to enable quotas for users, groups, and projects, respectively, on an XFS file system. These examples also mount the file system with read/write permissions:
# vim /etc/fstab /dev/xvdb1 /xfs xfs rw,quota 0 0 /dev/xvdb1 /xfs xfs rw,gquota 0 0 /dev/xvdb1 /xfs xfs rw,prjquota 0 0
XFS Quota Mount Options
Other “quota” mount options for XFS file systems are available. The following is a complete list of mount options to enable user quotas on XFS file systems:
quota|uquota|usrquota
: Enable user quotas and enforce usage limits.uqnoenforce
: Enable user quotas. Report usage but do not enforce usage limits.
Group quota mount options include the following:
gquota|grpquota
: Enable group quotas and enforce usage limits.gqnoenforce
: Enable group quotas. Report usage but do not enforce usage limits.
Project quota mount options include the following:
pquota|prjquota
: Enable project quotas and enforce usage limits.pqnoenforce
: Enable project quotas. Report usage but do not enforce usage limits.
Report Quota State Information
You can use the following xfs_quota command to report the overall quota state information:
# xfs_quota -x -c state User quota state on /data (/dev/mapper/vg_test-lv_test) Accounting: ON Enforcement: ON Inode: #67 (1 blocks, 1 extents) Group quota state on /data (/dev/mapper/vg_test-lv_test) Accounting: OFF Enforcement: OFF Inode: #0 (0 blocks, 0 extents) Project quota state on /data (/dev/mapper/vg_test-lv_test) Accounting: OFF Enforcement: OFF Inode: #0 (0 blocks, 0 extents) Blocks grace time: [7 days] Inodes grace time: [7 days] Realtime Blocks grace time: [7 days]
This command reports whether user, group, and project disk quota accounting is enabled and whether limits are being enforced. The grace period for blocks and inodes is also reported. The timer for the grace period is enabled whenever the soft limit is exceeded. If soft limits continue to be exceeded after the grace period expires, no more disk space or inodes are allocated.
xfs_quota Utility
After enabling quotas by using XFS file system mount options, use the xfs_quota command to report file system quota information, set block and inode limits, enable or disable quota enforcement, modify the quota enforcement timeout information (grace period), and perform other quota management operations on XFS file systems.
The xfs_quota utility provides a number of user and administrator subcommands. These subcommands can be issued in interactive mode or included as arguments to the xfs_quota command. Enter xfs_quota without any options or arguments to enter interactive mode. An xfs_quota> prompt appears in interactive mode. Enter help or ? to view the available subcommands. You can also enter help commandname to display additional information on a specific subcommand.
# xfs_quota xfs_quota> help df [-bir] [-hn] [-f file] -- show free and used counts for blocks and inodes help [command] -- help for one or all commands print -- list known mount points and projects quit -- exit the program quota [-bir] [-g|-p|-u] [-hnNv] [-f file] [id|name]... -- show usage and limits Use 'help commandname' for extended help.
When including xfs_quota subcommands from the command line, use the –c [command]
option. Any modifications to the quota system from the command line also require the -x option (enable expert mode)
. The following example uses the limit subcommand to set a soft limit of 5 MB, and a hard limit of 6 MB on the XFS file system for user john:
# xfs_quota –x –c 'limit –u bsoft=5m bhard=6m john' /xfs
The following example sets a soft limit of 100 inodes and a hard limit of 150 inodes for the students group:
# xfs_quota –x –c 'limit –g isoft=100 ihard=150 students' /xfs
Displaying Quota Information
Use the xfs_quota command to display information about disk quotas. To list all paths with devices and identifiers:
# xfs_quota -x -c print Filesystem Pathname /data /dev/mapper/vg_test-lv_test (uquota)
To report file system usage for blocks (-b) and inodes (-i):
# xfs_quota -x -c 'free -hb' Filesystem Size Used Avail Use% Pathname /dev/mapper/vg_test-lv_test 35.5G 41.1M 35.4G 0% /data
# xfs_quota -x -c 'free -hi' Filesystem Inodes Used Free Use% Pathname /dev/mapper/vg_test-lv_test 18.6m 5 18.6m 0% /data
To report file system quota information:
# xfs_quota -x -c report /data User quota on /data (/dev/mapper/vg_test-lv_test) Blocks User ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- root 4 0 0 00 [--------]
To report quota information in human-readable form on /data:
# xfs_quota -x -c 'report -h' /data User quota on /data (/dev/mapper/vg_test-lv_test) Blocks User ID Used Soft Hard Warn/Grace ---------- --------------------------------- root 4K 0 0 00 [------]
Setting Project Quotas
XFS allows you to set quotas on individual directory hierarchies. You can create an entry in the /etc/projects file that associates the XFS file system directory hierarchy with a unique project ID. For example, the following entry in /etc/projects
associates a project ID of 50 with the /data directory:
50:/data
You can optionally use the /etc/projid file to associate a project name to a project ID. For example, the following entry in the /etc/projid file associates the project name test with the project ID 50:
test:50
After defining a project in /etc/projects, use the xfs_quota command to initialize its project directory:
# xfs_quota –x –c 'project –s test' /data
Use the xfs_quota command to set limits for projects with initialized directories. The following example sets a soft limit of 5 MB and a hard limit of 6 MB for the test project:
# xfs_quota –x –c ‘limit –p bsoft=5m bhard=6m test’ /data