How to Setup Disk Quota on XFS File System in Linux Servers

Channel: Linux
Abstract: after limit keyword which shows that we want to implement project quota Use below xfs_quota command to set file or inode limit on /var/log directory [

Managing Disk quota on file systems is one of the most common day to day operation tasks for Linux admins, in this article we will demonstrate how to setup disk quota on XFS file system / partition on Linux Servers like CentOS, RHEL, Ubuntu and Debian. Here Disk quota means implementing limit on disk usage and file or inode usage.

Disk quota on XFS file system is implemented as followings:

  • User Quota
  • Group Quota
  • Project Quota (or Directory Quota)

To setup disk quota on XFS file system, first we must enable quota using following mount options:

  • uquota: Enable user quota & also enforce usage limits.
  • uqnoenforce: Enable user quota and report usage but don’t enforce usage limits.
  • gquota: Enable group quota & also enforce usage limits.
  • gqnoenforce: Enable group quota and report usage, but don’t enforce usage limits.
  • prjquota / pquota:  Enable project quota & enforce usage limits.
  • pqnoenforce:  Enable project quota and report usage but don’t enforce usage limits.

In article we will implement user & group disk quota on /home partition and apart from this we will also see how to setup  inode quota on /home file system and project quota on /var file system.

[[email protected] ~]# df -Th /home /var
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/Vol-home xfs    16G   33M   16G   1% /home
/dev/mapper/Vol-var  xfs    18G   87M   18G   1% /var
[[email protected] ~]#
Enable User and Group Quota on /home

Unmount /home partition and then edit the /etc/fstab file,

[[email protected] ~]# umount /home/

Add uquota and gquota after default keyword for /home partition in /etc/fstab file, example is shown below

[[email protected] ~]# vi /etc/fstab
……………………………
/dev/mapper/Vol-home   /home    xfs    defaults,uquota,gquota   0 0 
……………………………

Now mount the /home partition using below 「mount -a」 command,

[[email protected] ~]# mount -a
[[email protected] ~]#

Verify whether quota is enabled on /home or not,

[[email protected] ~]# mount | grep  /home
/dev/mapper/Vol-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[[email protected] ~]#

Note : While umounting /home partition if you get /home is busy then edit the fstab file, add uquota and gquota keywords after default keyword for /home partition and then reboot your system. After reboot we will see that quota is enabled on /home.

Quota on XFS file system is managed by the command line tool called 「xfs_quota「. xfs_quota works in two modes:

  • Basic Mode – For this mode, simply type xfs_quota then you will enter basic mode there you can print disk usage of all file system and disk quota for users, example is show below

  • Expert Mode – This mode is invoked using 「-x」 option in 「xfs_quota」 command, as the name suggests this mode is used to configure disk and file quota for local users on xfs file system.

To print disk quota on any file system, let’s say /home, use the following command,

[[email protected] ~]# xfs_quota -x -c 'report -h' /home
User quota on /home (/dev/mapper/Vol-home)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
pkumar        12K      0      0  00 [------]

Group quota on /home (/dev/mapper/Vol-home)
                        Blocks
Group ID     Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
pkumar        12K      0      0  00 [------]
[[email protected] ~]#
Configure User Quota

Let’s assume we have a user named 「pkumar」, let’s set disk and file quota on his home directory using 「xfs_quota」 command

[[email protected] ~]# xfs_quota -x -c 'limit bsoft=4250m bhard=4550m pkumar' /home

In above command, bsoft is block soft limit in MBs and bhard is block hard limit in MBs, limit is a keyword to implement disk or file limit on a file system for a specific user.

Let’s set file or inode limit for user pkumar on his home directory,

[[email protected] ~]# xfs_quota -x -c 'limit isoft=400 ihard=500 pkumar' /home

In above command isoft is inode or file soft limit and ihard is inode or file hard limit.

Both block (disk) limit and Inode (file) limit can be applied using a single command, example is shown below,

[email protected] ~]# xfs_quota -x -c 'limit bsoft=4250m bhard=4550m isoft=400 ihard=500 pkumar' /home
[[email protected] ~]#

Now verify whether disk and inode limits are implemented on pkumar user using the following xfs_quota command,

[[email protected] ~]# xfs_quota -x -c "report -bih" /home

In above xfs_quota command, report is a keyword , b is for block report , i is for inode report and h is for to display report in human readable format,

Configure Group Quota

Let’s assume we have a group named called 「engineering」 and two local users (shashi & rakesh) whose secondary group is engineering

Now set the following quotas:

  • Soft block limit: 6 GB (or 6144 MB),
  • Hard block limit :8 GB (or 8192 MB),
  • Soft file limit: 1000
  • Hard file limit: 1200

So to configure disk and file quota on engineering group, use the beneath xfs_quota command,

[[email protected] ~]# xfs_quota -x -c 'limit -g bsoft=6144m bhard=8192m isoft=1000 ihard=1200 engineering' /home
[[email protected] ~]#

Note: In xfs_quota we can also specify the block limit size in GB like 「bsoft=6g and bhard=8g」

Now verify the Quota details for group engineering using the following command,

[[email protected] ~]# xfs_quota -x -c "report -gbih" /home
Group quota on /home (/dev/mapper/Vol-home)
                        Blocks                            Inodes
Group ID     Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root            0      0      0  00 [------]      3      0      0  00 [------]
pkumar        12K      0      0  00 [------]      4      0      0  00 [------]
engineering      0     6G     8G  00 [------]      0   1000   1.2k  00 [------]
shashi        12K      0      0  00 [------]      4      0      0  00 [------]
rakesh        12K      0      0  00 [------]      4      0      0  00 [------]
[[email protected] ~]#

As we can see above command output, disk and file quota is implemented on engineering group and under the engineering group, we have two users.

Configure Project (or Directory) Quota

Let’s assume we want to set project quota or directory Quota on 「/var/log「, So first enable project quota(prjquota) on /var file system, edit the /etc/fstab file, add 「prjquota」 after default keyword for /var file system, example is shown below,

[[email protected] ~]# vi /etc/fstab
……………………………….
/dev/mapper/Vol-var     /var     xfs     defaults,prjquota        0 0
…………………………………

Save & exit the file

To make the above changes into the effect, we must reboot our system,

[[email protected] ~]# init 6

After reboot, we can verify whether project quota is enabled or not on /var file system using below mount command

[[email protected] ~]# mount | grep /var
/dev/mapper/Vol-var on /var type xfs (rw,relatime,seclabel,attr2,inode64,prjquota)
[[email protected] ~]#

As we can see in above output, project quota is enabled now, so to configure quota /var/log directory, first we must define directory path and its unique id in the file /etc/projects ( In my case i am taking 151 as unique id for /var/log)

[[email protected] ~]# vi /etc/projects
51:/var/log

Save & exit the file

Now associate the above id 「151」 to a project called 「Logs」, create a file /etc/projid and add the following content to it,

[[email protected] ~]# vi /etc/projid
Logs:151

Save & exit the file

Initialize 「Logs」 project directory using the xfs_quota command,

Syntax: #  xfs_quota -x -c ‘project -s project_name’ project_directory

[[email protected] ~]# xfs_quota -x -c 'project -s Logs' /var
Setting up project Logs (path /var/log)...
Processed 1 (/etc/projects and cmdline) paths for project Logs with recursion depth infinite (-1).
[[email protected] ~]#

Let’s suppose we want to implement 10 GB hard disk limit and 8 GB soft limit on /var/log directory, run the following xfs_quota command,

[[email protected] ~]# xfs_quota -x -c 'limit -p bsoft=8g bhard=10g Logs' /var
[[email protected] ~]#

In above command we have used 「-p」 after limit keyword which shows that we want to implement project quota

Use below xfs_quota command to set file or inode limit on /var/log directory

[[email protected] ~]# xfs_quota -x -c 'limit -p isoft=1800 ihard=2000 Logs' /var
[[email protected] ~]#

Use below command to print Project quota details

[[email protected] ~]# xfs_quota -xc 'report -pbih' /var
Project quota on /var (/dev/mapper/Vol-var)
                        Blocks                            Inodes
Project ID   Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
#0         137.6M      0      0  00 [------]   1.5k      0      0  00 [------]
Logs         3.1M     8G    10G  00 [------]     33   1.8k     2k  00 [------]
[[email protected] ~]#

Test Project quota by creating big files under /var/log folder and see whether you can cross 10GB block limit,

[[email protected] ~]# cd /var/log/
[[email protected] log]# dd if=/dev/zero of=big_file bs=1G count=9
9+0 records in
9+0 records out
9663676416 bytes (9.7 GB) copied, 37.8915 s, 255 MB/s
[[email protected] log]# dd if=/dev/zero of=big_file2 bs=1G count=5
dd: error writing ‘big_file2’: No space left on device
1+0 records in
0+0 records out
1069219840 bytes (1.1 GB) copied, 3.90945 s, 273 MB/s
[[email protected] log]#

Above dd error command confirms that configured project quota is working fine, we can also confirm the same from xfs_quota command,

That’s all from this tutorial, I hope these steps helps you to understand about quota on XFS file system, please do share your feedback and comments in the comments section below.

Ref From: linuxtechi

Related articles