4.6. GFS Quota Management
File-system quotas are used to limit the amount of file system space a user or group can use. A user or group does not have a quota limit until one is set. GFS keeps track of the space used by each user and group even when there are no limits in place. GFS updates quota information in a transactional way so system crashes do not require quota usages to be reconstructed.
To prevent a performance slowdown, a GFS node synchronizes updates to the quota file only periodically. The "fuzzy" quota accounting can allow users or groups to slightly exceed the set limit. To minimize this, GFS dynamically reduces the synchronization period as a "hard" quota limit is approached.
GFS uses its
gfs_quota
command to manage quotas. Other Linux quota facilities cannot be used with GFS.
4.6.1. Setting Quotas
Two quota settings are available for each user ID (UID) or group ID (GID): a hard limit and a warn limit.
A hard limit is the amount of space that can be used. The file system will not let the user or group use more than that amount of disk space. A hard limit value of zero means that no limit is enforced.
A warn limit is usually a value less than the hard limit. The file system will notify the user or group when the warn limit is reached to warn them of the amount of space they are using. A warn limit value of zero means that no limit is enforced.
Limits are set using the
gfs_quota
command. The command only needs to be run on a single node where GFS is mounted.
Usage
Setting Quotas, Hard Limit
gfs_quota limit -uUser
-lSize
-fMountPoint
gfs_quota limit -gGroup
-lSize
-fMountPoint
Setting Quotas, Warn Limit
gfs_quota warn -uUser
-lSize
-fMountPoint
gfs_quota warn -gGroup
-lSize
-fMountPoint
User
- A user ID to limit or warn. It can be either a user name from the password file or the UID number.
Group
- A group ID to limit or warn. It can be either a group name from the group file or the GID number.
Size
- Specifies the new value to limit or warn. By default, the value is in units of megabytes. The additional
-k
,-s
and-b
flags change the units to kilobytes, sectors, and file system blocks, respectively. MountPoint
- Specifies the GFS file system to which the actions apply.
Examples
This example sets the hard limit for user Bert to 1024 megabytes (1 gigabyte) on file system
/gfs
.
gfs_quota limit -u Bert -l 1024 -f /gfs
This example sets the warn limit for group ID 21 to 50 kilobytes on file system
/gfs
.
gfs_quota warn -g 21 -l 50 -k -f /gfs
4.6.2. Displaying Quota Limits and Usage
Quota limits and current usage can be displayed for a specific user or group using the
gfs_quota get
command. The entire contents of the quota file can also be displayed using the gfs_quota list
command, in which case all IDs with a non-zero hard limit, warn limit, or value are listed.
Usage
Displaying Quota Limits for a User
gfs_quota get -uUser
-fMountPoint
Displaying Quota Limits for a Group
gfs_quota get -gGroup
-fMountPoint
Displaying Entire Quota File
gfs_quota list -f MountPoint
User
- A user ID to display information about a specific user. It can be either a user name from the password file or the UID number.
Group
- A group ID to display information about a specific group. It can be either a group name from the group file or the GID number.
MountPoint
- Specifies the GFS file system to which the actions apply.
Command Output
GFS quota information from the
gfs_quota
command is displayed as follows:
userUser
: limit:LimitSize
warn:WarnSize
value:Value
groupGroup
: limit:LimitSize
warn:WarnSize
value:Value
The
LimitSize
, WarnSize
, and Value
numbers (values) are in units of megabytes by default. Adding the -k
, -s
, or -b
flags to the command line change the units to kilobytes, sectors, or file system blocks, respectively.
User
- A user name or ID to which the data is associated.
Group
- A group name or ID to which the data is associated.
LimitSize
- The hard limit set for the user or group. This value is zero if no limit has been set.
Value
- The actual amount of disk space used by the user or group.
Comments
When displaying quota information, the
gfs_quota
command does not resolve UIDs and GIDs into names if the -n
option is added to the command line.
Space allocated to GFS's hidden files can be left out of displayed values for the root UID and GID by adding the
-d
option to the command line. This is useful when trying to match the numbers from gfs_quota
with the results of a du
command.
Examples
This example displays quota information for all users and groups that have a limit set or are using any disk space on file system
/gfs
.
[root@ask-07 ~]# gfs_quota list -f /gfs
user root: limit: 0.0 warn: 0.0 value: 0.2
user moe: limit: 1024.0 warn: 0.0 value: 0.0
group root: limit: 0.0 warn: 0.0 value: 0.2
group stooges: limit: 0.0 warn: 0.0 value: 0.0
This example displays quota information in sectors for group
users
on file system /gfs
.
[root@ask-07 ~]# gfs_quota get -g users -f /gfs -s
group users: limit: 0 warn: 96 value: 0
4.6.3. Synchronizing Quotas
GFS stores all quota information in its own internal file on disk. A GFS node does not update this quota file for every file system write; rather, it updates the quota file once every 60 seconds. This is necessary to avoid contention among nodes writing to the quota file, which would cause a slowdown in performance.
As a user or group approaches their quota limit, GFS dynamically reduces the time between its quota-file updates to prevent the limit from being exceeded. The normal time period between quota synchronizations is a tunable parameter,
quota_quantum
, and can be changed using the gfs_tool
command. By default, the time period is 60 seconds. Also, the quota_quantum
parameter must be set on each node and each time the file system is mounted. (Changes to the quota_quantum
parameter are not persistent across unmounts.)
To see the current values of the GFS tunable parameters, including
quota_quantum
, you can use the gfs_tool gettune
, as described in Section 4.5, “Displaying GFS Tunable Parameters”.
You can use the
gfs_quota sync
command to synchronize the quota information from a node to the on-disk quota file between the automatic updates performed by GFS.
Usage
Synchronizing Quota Information
gfs_quota sync -f MountPoint
MountPoint
- Specifies the GFS file system to which the actions apply.
Tuning the Time Between Synchronizations
gfs_tool settuneMountPoint
quota_quantumSeconds
MountPoint
- Specifies the GFS file system to which the actions apply.
Seconds
- Specifies the new time period between regular quota-file synchronizations by GFS. Smaller values may increase contention and slow down performance.
Examples
This example synchronizes the quota information from the node it is run on to file system
/gfs
.
gfs_quota sync -f /gfs
This example changes the default time period between regular quota-file updates to one hour (3600 seconds) for file system
/gfs
on a single node.
gfs_tool settune /gfs quota_quantum 3600
4.6.4. Disabling/Enabling Quota Enforcement
Enforcement of quotas can be disabled for a file system without clearing the limits set for all users and groups. Enforcement can also be enabled. Disabling and enabling of quota enforcement is done by changing a tunable parameter,
quota_enforce
, with the gfs_tool
command. The quota_enforce
parameter must be disabled or enabled on each node where quota enforcement should be disabled/enabled. Each time the file system is mounted, enforcement is enabled by default. (Disabling is not persistent across unmounts.)
To see the current values of the GFS tunable parameters, including
quota_enforce
, you can use the gfs_tool gettune
, as described in Section 4.5, “Displaying GFS Tunable Parameters”.
Usage
gfs_tool settune MountPoint
quota_enforce {0|1}
MountPoint
- Specifies the GFS file system to which the actions apply.
quota_enforce {0|1}
- 0 = disabled1 = enabled
Comments
A value of 0 disables enforcement. Enforcement can be enabled by running the command with a value of 1 (instead of 0) as the final command line parameter. Even when GFS is not enforcing quotas, it still keeps track of the file system usage for all users and groups so that quota-usage information does not require rebuilding after re-enabling quotas.
Examples
This example disables quota enforcement on file system
/gfs
.
gfs_tool settune /gfs quota_enforce 0
This example enables quota enforcement on file system
/gfs
.
gfs_tool settune /gfs quota_enforce 1
4.6.5. Disabling/Enabling Quota Accounting
By default, quota accounting is enabled; therefore, GFS keeps track of disk usage for every user and group even when no quota limits have been set. Quota accounting incurs unnecessary overhead if quotas are not used. You can disable quota accounting completely by setting the
quota_account
tunable parameter to 0. This must be done on each node and after each mount. (The 0 setting is not persistent across unmounts.) Quota accounting can be enabled by setting the quota_account
tunable parameter to 1.
To see the current values of the GFS tunable parameters, including
quota_account
, you can use the gfs_tool gettune
, as described in Section 4.5, “Displaying GFS Tunable Parameters”.
Usage
gfs_tool settune MountPoint
quota_account {0|1}
MountPoint
- Specifies the GFS file system to which the actions apply.
quota_account {0|1}
- 0 = disabled1 = enabled
Comments
To enable quota accounting on a file system, the
quota_account
parameter must be set back to 1. Afterward, the GFS quota file must be initialized to account for all current disk usage for users and groups on the file system. The quota file is initialized by running: gfs_quota init -f MountPoint
.
Note
Initializing the quota file requires scanning the entire file system and may take a long time.
To see the current values of the GFS tunable parameters, including
quota_account
, you can use the gfs_tool gettune
, as described in Section 4.5, “Displaying GFS Tunable Parameters”.
Examples
This example disables quota accounting on file system
/gfs
on a single node.
gfs_tool settune /gfs quota_account 0
This example enables quota accounting on file system
/gfs
on a single node and initializes the quota file.
#gfs_tool settune /gfs quota_account 1
#gfs_quota init -f /gfs