在centos系统中,不同的文件系统使用不同磁盘配额管理工具。例如,xfs文件系统通过 xfs_quota 工具进行管理;EXT3/4 文件系统通过 quota 工具进行管理,这里我们使用的是xfs文件系统。所以使用 xfs_quota 管理工具。

Linux中如何针对用户及组设置磁盘配额_第1张图片

除了内核和 xfs_quota 软件的支持以外,指定的分区必须已经挂载且支持磁盘配额功能。注意:xfs文件系统只有在首次挂载时才启动磁盘限额功能,下面为设置磁盘配额的具体过程:

Linux中如何针对用户及组设置磁盘配额_第2张图片

Linux中如何针对用户及组设置磁盘配额_第3张图片

xfs_quota命令的使用方法如下:

选项与参数:

  • -x:专家模式,后续才能够加入-c的指令参数;
  • -c:后面加的就是指令。
  • 常用指令如下:
  • print:只是列出目前主机内的文件系统参数等数据;
  • df:与原本的df一样的功能,可以加上-b(block)、-i(inode)、-h(加上容量单位)等;
  • report:列出目前的quota项目,有-ugr(user/group/project)及-bi等数据;
  • state:说明目前支持quota的文件系统的信息,有没有启动相关项目等。

那么,若要对文件系统设置配额,在挂载时需要加入特别的选项,并需要注意将/etc/fstab中写入一样的挂载选项。

常用的选项如下:

  • usrquota:针对用户账号的磁盘配额设置;
  • grpquota:针对群组的设置;
  • prjquota:针对单一目录的设置,但是不可与grpquota同时存在。

使用举例:

[root@localhost ~]# mount -o usrquota,grpquota /dev/sdb1 /test   
#挂载磁盘时,需要加入特别的参数,才可设置磁盘配额。
[root@localhost ~]# xfs_quota -x -c "print"   
#列出目前系统的所有文件系统,以及文件系统的quota挂载参数的支持
Filesystem          Pathname
/                   /dev/mapper/centos-root
/home               /dev/mapper/centos-home
/boot               /dev/sda1
/test               /dev/sdb1 (uquota, gquota)#括号内的参数表示支持针对用户、组设置配额。
[root@localhost ~]# xfs_quota -x -c "df -h" /test
#列出目前/test这个支持test的挂载点文件系统使用情况。
Filesystem     Size   Used  Avail Use% Pathname
/dev/sdb1     20.0G  32.2M  20.0G   0% /test
[root@localhost ~]# xfs_quota -x -c "report -ubih" /test
#列出目前/test的所有用户的quota限制值,我这里还没做使用限制
User quota on /test (/dev/sdb1)
                        Blocks                            Inodes              
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace  
---------- --------------------------------- --------------------------------- 
root            0      0      0  00 [------]      3      0      0  00 [------]
#注意:上面查询出来的是block限制和inode限制。
#soft和hard分别代表软/硬限制,soft和hard若为0,则代表无限制。
[root@localhost ~]# xfs_quota -x -c "state"    #列出目前支持的quota文件系统是否启动了quota功能。
User quota state on /test (/dev/sdb1)
  Accounting: ON     #有启用计算功能
  Enforcement: ON    #有实际quota管制的功能
  Inode: #67 (1 blocks, 1 extents)         #以上四行是说明启动了user的限制能力。
Group quota state on /test (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #68 (1 blocks, 1 extents)           #以上四行是说明启动了group的限制能力。
Project quota state on /test (/dev/sdb1)
  Accounting: OFF
  Enforcement: OFF
  Inode: #68 (1 blocks, 1 extents)        #以上四行是说明project并不支持
    #以下是grace  time,表示当超过了软限制的容量,会允许继续使用多少天(下面是默认允许7天)

Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]
[root@localhost ~]# xfs_quota -x -c "timer -u 14days" /test    #将用户的宽限时间改为14天
[root@localhost ~]# xfs_quota -x -c "timer -g 14days" /test   #将组的宽限时间改为14天

关于上面的grace time具体解释如下:
宽限时间默认为7天,在这个时间内不做任何磁盘管理,到期后,soft限制值会取代hard限制值作为quota限制。也就是说你的inode/block用量限制值变为soft,达到soft后,你的磁盘使用权就被锁住。

下面开始设置配额:
Linux中如何针对用户及组设置磁盘配额_第4张图片

其中需要限制什么就写入限制字段即可,(0表示无限制)

Linux中如何针对用户及组设置磁盘配额

Linux中如何针对用户及组设置磁盘配额_第5张图片

Linux中如何针对用户及组设置磁盘配额_第6张图片

Linux中如何针对用户及组设置磁盘配额_第7张图片

Linux中如何针对用户及组设置磁盘配额_第8张图片

Linux中如何针对用户及组设置磁盘配额_第9张图片

Linux中如何针对用户及组设置磁盘配额_第10张图片

附加——project挂载参数的使用及取消quota配额的限制

project的配额限制是针对文件系统生效的,需要注意的是它不能和grpquota配额支持同时存在,并且它不同于usrquota和grpquota配额设置,这两个对root不生效,但是project配额对root用户同样生效。

1、设置project配额

[root@localhost ~]# mount -o usrquota,prjquota /dev/sdb1 /test
#挂载时加上prjquota支持
[root@localhost ~]# xfs_quota -x -c "state"   
User quota state on /test (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #67 (2 blocks, 2 extents)
Group quota state on /test (/dev/sdb1)
  Accounting: OFF          #grpquota配额支持已经关闭了
  Enforcement: OFF
  Inode: #68 (2 blocks, 2 extents)   
Project quota state on /test (/dev/sdb1)
  Accounting: ON 
  Enforcement: ON            #prjquota配额已经启动了
  Inode: #68 (2 blocks, 2 extents)
Blocks grace time: [14 days]
Inodes grace time: [14 days]
Realtime Blocks grace time: [14 days]
#指定专案识别码与目录对应在/etc/projects
[root@localhost ~]# echo "11:/test" >> /etc/projects   
#规范专案名称与识别码的对应在/etc/projid
[root@localhost ~]# echo "myquotaproject:11" >> /etc/projid
#初始化专案名称
[root@localhost ~]# xfs_quota -x -c "project -s myquotaproject"
              ....................#省略部分提示信息
..................r project myquotaproject with recursion depth infinite (-1).
#会出现上面的提示信息,是正常的。
[root@localhost ~]# xfs_quota -x -c "print" /test
#通过print功能完整的查看到相应的各项文件系统与project目录对应
Filesystem          Pathname
/test               /dev/sdb1 (uquota, pquota)
/test               /dev/sdb1 (project 11, myquotaproject)
[root@localhost ~]# xfs_quota -x -c "report -pbih" /test
#确定抓到myquotaproject 这个专案名称
Project quota on /test (/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 [------]
myquotaproject      0      0      0  00 [------]      1      0      0  00 [------]
[root@localhost ~]# xfs_quota -x -c "limit -p bsoft=200M bhard=300M myquotaproject" /test
#针对myquotaproject这个专案设置配额
[root@localhost ~]# xfs_quota -x -c "report -pbih" /test    #查看设置的配额
Project quota on /test (/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 [------]
myquotaproject      0   200M   300M  00 [------]      1      0      0  00 [------]
[root@localhost ~]# dd if=/dev/zero of=/test/a.txt bs=1M count=400
#往/test目录下写入一个400M的文件进行测试
dd: 写入"/test/a.txt" 出错: 设备上没有空间
记录了301+0 的读入
记录了300+0 的写出
314572800字节(315 MB)已复制,7.03535 秒,44.7 MB/秒
#会发现最多只能写入300M,说明配额生效。

2、取消quota的限制

常用的参数如下:

  • disable:暂时取消 quota 的限制,但其实系统还是在计算 quota 中,只是没有管制而已!应该算最有用的功能!
  • enable:就是回复到正常管制的状态中,与 disable 可以互相取消、启用!
  • off:完全关闭 quota 的限制,使用了这个状态后,你只有卸载再重新挂载才能够再次的启动 quota !也就是说,用了 off 状态后,你无法使用 enable 再次复原 quota 的管制+!注意不要乱用这个状态!一般建议用 disable 即可,除非你需要执行remove 的动作!
  • remove:必须要在 off 的状态下才能够执行的指令,这个 remove 可以“移除”quota 的限制设置,例如要取消 project 的设置,无须重新设置为 0 ,只要 remove -p 就可以了!

使用举例:

[root@localhost ~]# xfs_quota -x -c "disable -up" /test    #关闭对user和project的配额限制
[root@localhost ~]# xfs_quota -x -c "state" /test
User quota state on /test (/dev/sdb1)
  Accounting: ON
  Enforcement: OFF #表示在计算,但是没有强制管制的意思,现在用户没有磁盘的使用限制
  Inode: #67 (2 blocks, 2 extents)
Group quota state on /test (/dev/sdb1)
  Accounting: OFF
  Enforcement: OFF
  Inode: #68 (2 blocks, 2 extents)
Project quota state on /test (/dev/sdb1)
  Accounting: ON
  Enforcement: OFF                #同上
  Inode: #68 (2 blocks, 2 extents)
Blocks grace time: [14 days]
Inodes grace time: [14 days]
Realtime Blocks grace time: [14 days]
[root@localhost ~]# dd if=/dev/zero of=/test/a.txt bs=1M count=500
#测试,发现之前设置的配额已经都失效了
记录了500+0 的读入
记录了500+0 的写出
524288000字节(524 MB)已复制,4.88868 秒,107 MB/秒
[root@localhost ~]# xfs_quota -x -c "report -pbh" /test   #查看
Project quota on /test (/dev/sdb1)
                        Blocks              
Project ID   Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
#0              0      0      0  00 [------]
myquotaproject   500M   200M   300M  00 [-none-]
#会发现软限制及硬限制还在,但是确实超过了配额的限制,这就是disable的作用
[root@localhost ~]# xfs_quota -x -c "enable -up" /test     #再次开启配额限制
[root@localhost test]# xfs_quota -x -c "off -up" /test     #完全关闭quota的限制
[root@localhost test]# xfs_quota -x -c "remove -p" /test    #取消quota的设置

关于xfs和ext两种不同文件系统的设置配额差异:

Linux中如何针对用户及组设置磁盘配额_第11张图片

———————— 本文至此结束,感谢阅读 ————————