配置XFS配额(用户,组和项目配额)CentOS/RHEL 7/8

时间:2020-01-09 10:37:43  来源:igfitidea点击:

centos 7 xfs启用配额。
centos 7配额xfs。
如何在rhel/centos 7和8中配置xfs配额。
更改XFS配额的宽限期。
修改xfs配额的宽限期。
在rhel/centos 8中的文件夹上设置配额。
xfs quotacheck。
挂载xfs pquota。
rhel xfs配额。
xfs项目配额。
xfs用户配额。
xfs groupquota。
启用xfs配额。
在CentOS 7中使用示例禁用xfs配额。

XFS配额子系统管理磁盘空间(块)和文件(inode)使用的限制。
XFS配额在用户,组,目录或者项目级别控制或者报告这些项目的使用情况。
在本文中,我将分享配置xfs用户配额,xfs组guota和xfs项目配额的步骤,这些配额也可以称为xfs磁盘配额,因为该配额应用于目录级别。
与ext4文件系统配额相比,实现xfs配额的步骤和命令是不同的。

实验室环境

我正在使用Oracle VirtualBox通过CentOS 8创建虚拟机,其中我将执行所有命令来配置xfs配额。

为此,我添加了一个添加磁盘/dev/sdb并将其创建为XFS文件系统。

启用XFS配额

使用挂载选项uquota,gquota和pquota挂载文件系统/dev/sdb1,以启用xfs用户配额,xfs组配额和xfs项目配额(xfs磁盘配额)。

说明:

必须先卸载目标分区,然后才能启用xfs配额再次安装目标分区。
如果计划对" /"(根)分区执行此操作,则必须更新"/etc/fstab"并重新启动节点以启用xfs配额。

例如,我已经为/dev/sdb1启用了xfs配额。

# grep quota /etc/fstab
/dev/sdb1       /xquota         xfs     defaults,uquota,gquota,prjquota 0 0" /etc/fstab

如果我们具有与我的设置类似的数据分区,则可以在不重新启动节点的情况下将其卸载

[root@centos-8 ~]# umount /xquota

接下来使用xfs配额指令安装它

[root@centos-8 ~]# mount -o uquota,gquota,pquota /dev/sdb1 /xquota

验证是否为/dev/sdb1启用了xfs配额:

[root@centos-8 ~]# mount | grep quota
/dev/sdb1 on /xquota type xfs (rw,relatime,attr2,inode64,usrquota,prjquota,grpquota)

在RHEL/CentOS 7/8中配置xfs用户配额和xfs组配额

xfs用户配额和xfs qroup配额的主要目的是跟踪和监视文件系统的块和索引节点使用情况。
XFS文件系统确实有助于根据用户和组来管理存储。

这样可以为单个用户或者组设置配额。

其中我将分享在CentOS/RHEL 7/8中使用同一命令启用xfs用户配额和xfs组配额的步骤。

对块应用XFS用户配额限制

首先,我们将在/xquota设备上为用户'hynman'配置和应用xfs用户配额。
其中我将软限制设置为1GB,将硬限制设置为1.5GB。
使用xfs配额,我们不能使用十进制值,因此我的软限制以GB为单位,而硬限制以MB为单位,因为我不能在此处使用1.5GB的值。

[root@centos-8 ~]# xfs_quota -x -c 'limit bsoft=1g bhard=1536m hynman' /xquota

说明:

我们可以为用户/组的inode和块设置这些限制。

  • 配额块限制(bhard/bsoft)
  • inode计数限制(ihard/isoft)
  • 实时块限制(rtbhard/rtbsoft)

其中

-x         Enable expert mode.  All of the administrative commands (see the ADMINISTRATOR COMMANDS section below) 
		which allow  modifications to the quota system are available only in expert mode.
-c		xfs_quota commands Jan be run interactively (the default) or as arguments on the command line. 
		Multiple -c arguments Jan be given.  The commands are run in the sequence given, then the program exits.

要检查xfs配额的状态,可以在xfs_quota命令中使用report

[root@centos-8 ~]# xfs_quota -x -c report /xquota/
User quota on /xquota (/dev/sdb1)
                               Blocks
User ID          Used       Soft       Hard    Warn/Grace
---------- -------------------------------------------------
root                0          0          0     00 [--------]
hynman              0    1048576    1572864     00 [--------]

目前,如我们所见,hynman用户没有使用任何块,也没有xfs用户配额的软限制和硬限制。

另请阅读:

概述不同的磁盘类型(HDD,SSD和光盘)和磁盘接口类型(SATA,IDE,FC,SCSI)使用Linux中的示例监控磁盘IO性能的前15种工具

验证用户hynman的XFS用户配额

我将为其他用户授予/xquota的完全权限,因此我可以允许hynman用户在此路径内进行写操作。

[root@centos-8 ~]# chmod o+rwx /xquota/

我们将使用fallocate创建一个大小为1.2GB的虚拟文件。
由于我们的xfs用户配额硬限制为1.5GB,因此应该可以成功。

[hynman@centos-8 ~]$fallocate -l 1.2G /xquota/test_file_1.2G

再次验证/xquota的xfs用户配额状态

[root@centos-8 ~]# xfs_quota -x -c report /xquota/
User quota on /xquota (/dev/sdb1)
                               Blocks
User ID          Used       Soft       Hard    Warn/Grace
---------- -------------------------------------------------
root                0          0          0     00 [--------]
hynman        1253376    1048576    1572864     00  [7 days]

接下来,我们将尝试创建另一个1GB的文件,但我们知道根据我们的xfs用户配额硬限制,我们只剩下300MB,这应该会失败

[hynman@centos-8 ~]$fallocate -l 1G /xquota/test_file_1.2G
fallocate: fallocate failed: Disk quota exceeded

正如预期的那样,一旦达到xfs用户配额限制,我们将收到"磁盘配额超出"错误

修改XFS用户配额限制

如果我们觉得需要修改xfs用户配额限制,则可以重新运行与设置xfs配额相同的命令,但要使用新的限制值。
例如,我添加了1G的软限制和1.5G的硬限制,我希望将其更改为900M作为软块限制,将1G作为硬块限制

[root@centos-8 ~]# xfs_quota -x -c 'limit bsoft=900M bhard=1000M hynman' /xquota

验证新的XFS配额限制

[root@centos-8 ~]# xfs_quota -x -c "report -h" /xquota/
User quota on /xquota (/dev/sdb1)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- --------------------------------
root         300M      0      0  00 [------]
hynman          0   900M  1000M  00 [------]

将xfs用户配额限制应用于inode

类似于块限制,我们也可以使用isoftihard为inode添加xfs配额限制,如下所示。
其中我为用户hynman添加了一个软inode限制,将其设为500,将硬限制设为700

[root@centos-8 ~]# xfs_quota -x -c 'limit isoft=500 ihard=700 hynman' /xquota

检查用户hynman的xfs配额限制

[root@centos-8 ~]# xfs_quota -x -c "report -bih" /xquota/
User quota on /xquota (/dev/sdb1)
                        Blocks                            Inodes
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- --------------------------------
root         300M      0      0  00 [------]      5      0      0  00 [------]
hynman          0   900M  1000M  00 [------]      0    500    700  00 [------]

说明:

配置xfs组配额的步骤与cfs用户配额几乎相同,因此我在此处跳过了xfs组配额的演示。
我们可以使用xfs_quota -x -c'limit -g bsoft = 500M bhard = 700M quotagroup'/quotacheck来配置xfs组配额限制。
其中quotagroup是我要为其实现xfs组配额的组,其软块限制为500M,硬限制为700M。

在同一命令中配置xfs用户配额和组配额

使用-u为用户定义xfs配额,使用-g为组定义xfs配额。
使用以下语法在单个命令中为用户和组配置xfs配额。

# xfs_quota -x -c 'limit -u bsoft= bhard= user '-c' limit -g bsoft= bhard= group'

例如,其中我为用户hynman添加了500M的软块限制和800M的硬限制,并且在同一命令中,为组admin添加了600M的软块限制和900M的硬限制

[root@centos-8 ~]# xfs_quota -x -c 'limit -u bsoft=500M bhard=800M hynman' -c 'limit -g bsoft=600M bhard=900M admin' /xquota/

在/xquota目录中打印并检查用户和组的xfs配额报告

[root@centos-8 ~]# xfs_quota -x -c "report -bih" /xquota/
User quota on /xquota (/dev/sdb1)
                        Blocks                            Inodes
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- --------------------------------
root         300M      0      0  00 [------]      5      0      0  00 [------]
hynman          0   500M   800M  00 [------]      0    500    700  00 [------]
Group quota on /xquota (/dev/sdb1)
                        Blocks                            Inodes
Group ID     Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- --------------------------------
root         300M      0      0  00 [------]      5      0      0  00 [------]
admin           0   600M   900M  00 [------]      0      0      0  00 [------]

在RHEL/CentOS 7/8中配置XFS项目配额(或者XFS磁盘配额)

项目配额的主要目的是跟踪和监视目录的磁盘使用情况。
按每个目录或者每个项目进行管理时,XFS会管理与特定项目关联的目录层次结构的磁盘使用情况。
通过这样做,XFS可以识别项目之间的跨组织"组"边界。
这提供了比管理用户或者组配额时更有效的控制级别。

为了为单个目录而不是用户或者xfs组配额启用xfs磁盘配额,我们必须向包含该目录的卷中添加名为pquota的xfs项目配额指令。
xfs项目配额用于添加和配置目录的xfs配额。
xfs磁盘配额基本上是xfs项目配额。

在本文开头,我分享了启用xfs项目配额的步骤,因此我将在此处跳过该部分。

创建XFS项目配额相关文件

在配置项目控制目录的限制之前,请先将它们添加到/etc/projects中。
我们需要添加一个项目名称和一个关联的新的唯一ID/etc/projectid,以"项目名称:项目ID"格式将项目ID映射到项目名称。

[root@centos-8 ~]# echo testquota:11 >> /etc/projid

这里的testquota是我的项目名称,而11是项目ID,可以是映射到项目的任何数值。

接下来,将项目控制的目录以"项目ID:项目控制的目录"的格式添加到"/etc/projects"中。

[root@centos-8 ~]# echo 11:/xquota >> /etc/projects

初始化项目目录

将项目添加到/etc/projects之后,使用以下语法初始化其项目目录:

# xfs_quota -x -c 'project -s projectname' project_path

初始化我们的testquota项目目录

[root@centos-8 ~]# xfs_quota -x -c 'project -s testquota'
Setting up project testquota (path /xquota)...
Processed 1 (/etc/projects and cmdline) paths for project testquota with recursion depth infinite (-1).

我们可以使用以下命令来检查我们设置的项目:

[root@centos-8 ~]# xfs_quota -x -c "print" /xquota/
Filesystem          Pathname
/xquota             /dev/sdb1 (pquota)
/xquota             /dev/sdb1 (project 11, testquota)

打印出此设备的xfs配额规则,由于当前未设置xfs项目配额,因此我们看到软限制和硬限制的值为空。

[root@centos-8 ~]# xfs_quota -x -c "report -pbih" /xquota/
Project quota on /xquota (/dev/sdb1)
                        Blocks                            Inodes
Project ID   Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- --------------------------------
#0              0      0      0  00 [------]      2      0      0  00 [------]
testquota       0      0      0  00 [------]      1      0      0  00 [------]

其中

-p 		project quota
-b 		blocks used
-i		inodes used
-h		report in human-readable format

套用XFS专案配额限制

然后可以使用以下命令配置具有初始化目录的项目的XFS配额:

[root@centos-8 ~]# xfs_quota -x -c 'limit -p bsoft=200m bhard=300m testquota' /xquota/

打印xfs磁盘配额报告(pquota)。
现在,正如我们所看到的,我们为xfs配额定义了一个软限制和硬限制

[root@centos-8 ~]# xfs_quota -x -c 'report -pbih' /xquota/
Project quota on /xquota (/dev/sdb1)
                        Blocks                            Inodes
Project ID   Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- --------------------------------
#0              0      0      0  00 [------]      2      0      0  00 [------]
testquota       0   200M   300M  00 [------]      1      0      0  00 [------]

验证XFS项目配额

现在,既然我们完成了设置xfs磁盘配额的配置,就该验证xfs配额限制了。
对于/xquota目录,我们的软限制为200MB,硬限制为400MB。
我们尝试使用dd命令创建一个虚拟文件:

[root@centos-8 ~]# dd if=/dev/urandom of=/xquota/test_file
dd: writing to '/xquota/test_file': No space left on device
614401+0 records in
614400+0 records out
314572800 bytes (315 MB, 300 MiB) copied, 7.74771 s, 40.6 MB/s

如我们所见,创建了300MB的文件后,该命令失败,并显示dd:写入'/xquota/test_file':设备上没有剩余空间"。
因此,我们的xfs磁盘配额可以按预期工作。

XFS配额宽限期如何工作?

在XFS配额中,宽限期称为timer
当用户超出软限制时,将启用计时器。
每当配额下降到软限制以下时,都会禁用计时器。
如果弹出计时器,则将已超过的特定限制视为已达到硬限制,并且不会为用户分配更多资源。
重置此条件的唯一方法(不关闭限制执行或者增加限制)是将使用量减少到配额以下。

更新或者修改XFS配额宽限期(计时器)

要检查当前的xfs配额宽限期使用状态

[root@centos-8 ~]# xfs_quota -x -c "state" /xquota/
User quota state on /xquota (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #131 (2 blocks, 2 extents)
Group quota state on /xquota (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #135 (2 blocks, 2 extents)
Project quota state on /xquota (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #132 (1 blocks, 1 extents)
Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]

默认情况下,所有块,inode和实时块的xfs配额宽限期均为7天。
如下所示,要更改块的宽限期,请使用(-b),inode(-i)和实时块(-r)。
其中我已将阻止限制的宽限期增加到10天

[root@centos-8 ~]# xfs_quota -x -c 'timer -p -b 10days' /xquota

计时器允许修改配额强制执行超时(即在将软限制强制为硬限制之前允许通过的时间)。
验证新的阻止限制:

[root@centos-8 ~]# xfs_quota -x -c "state -p" /xquota
Project quota state on /xquota (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #132 (1 blocks, 1 extents)
Blocks grace time: [10 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]

暂时停用xfs配额

要临时禁用xfs配额以使用xfs用户配额

[root@centos-8 ~]# xfs_quota -x -c "disable -uv" /xquota/
User quota state on /xquota (/dev/sdb1)
  Accounting: ON
  Enforcement: OFF
  Inode: #131 (2 blocks, 2 extents)
Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]

如我们所见,"计费"仍处于"开"状态,这意味着我们仍然可以设置配额,但这些限制将不再执行。
现在,我可以使用用户hynman在/xquota下创建任何大小的文件

[hynman@centos-8 ~]$fallocate -l 2G /xquota/test_file12

如我们所见,即使用户hynman的硬块限制为1G,用户hynman仍能够创建2Gb大小的文件

类似地,要禁用组和项目的配额,分别使用-g-p

提示:

要启用xfs配额,我们可以使用~]#xfs_quota -x -c" enable -ugpv"/xquota /,其中u表示xfs用户配额,g表示xfs组配额,p表示xfs项目数据

要完全关闭/xquota用户" hynman"的xfs配额,

[root@centos-8 ~]# xfs_quota -x -c "off -uv" /xquota/
User quota state on /xquota (/dev/sdb1)
  Accounting: OFF
  Enforcement: OFF
  Inode: #131 (2 blocks, 2 extents)
Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]

接下来,我们只能看到/xquota的xfs组配额值

[root@centos-8 ~]# xfs_quota -x -c "report -bih" /xquota/
Group quota on /xquota (/dev/sdb1)
                        Blocks                            Inodes
Group ID     Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- --------------------------------
root            0      0      0  00 [------]      3      0      0  00 [------]
admin           0   600M   900M  00 [------]      0      0      0  00 [------]

验证在安装下是否相同。
因此,对于我们来说,现在仅启用组配额。

[root@centos-8 ~]# mount | grep quota
/dev/sdb1 on /xquota type xfs (rw,relatime,attr2,inode64,grpquota)

永久禁用XFS配额

要禁用xfs配额,请从/etc/fstab中永久删除xfs配额安装选项。
/etc/fstab下的文件系统设备中删除所有xfs配额指令。
最好在默认情况下添加noquota以确保正确禁用xfs配额

# grep quota /etc/fstab
/dev/sdb1       /xquota         xfs     defaults,noquota        0 0

接下来,我们必须重新启动节点才能激活更改以禁用xfs配额。
如果我们还希望禁用当前会话的xfs配额(不进行重新引导),则可以使用以下命令:

[root@centos-8 ~]# xfs_quota -x -c "off -ugpv" /xquota/

这也将禁用当前会话的xfs uquota,gquota和pquota。