使用前提:内核必须支持磁盘配额 centos7 默认支持
    磁盘配额只对 一般用户有效
    若启用SElinux的话 并非所有的目录都能设置磁盘配额 仅仅能对 /home进行磁盘配额
    ext4 文件系统 只能对整个文件系统进行磁盘配额 不能对单一目录
    xfs 文件系统 都可以
    xfs 主要可以对 用户 用户组 和 个别目录 进行磁盘配额
    主要是限制 inode 使用量 :管理用户可以建立的文件数量
    block 使用量 :管理用户容量的使用
    inode 和 block 限制值都有两个 soft 和 hard
    这两个值的意义是 soft 值你可以超过 超过之后 就会给你发送警告信息 hard值你不能超过
    如果你的容量超过了soft的值 系统就会给你发送一个警告信息 并且还有一个等待的时间
    如果超过了这个时间 你文件的容量还是超过这个soft的值 那么你的最大容量就会是这个soft值
    举个例子:假如你的soft是 400 hard 是500 现在你的磁盘容量是450 已经超多了soft的值
    那么你的系统就会给你说 超过400 请你删减文件 然后会有一个等待时间 一般是7天是你自己设置的
    然后如果过着 这7天之后 还没有删减文件 容量那么你的最大容量 就是450 磁盘就会被锁定 不能新增加文件了

    实验:5个账号对/home 进行磁盘配额 5个账号为一个用户组
    使用脚本创建账号

    1. [root@study ~]# vim addaccount.sh
    2. #!/bin/bash
    3. # 使用 script 来创建实验 quota 所需的环境
    4. groupadd myquotagrp
    5. for username in myquota1 myquota2 myquota3 myquota4 myquota5
    6. do
    7. useradd -g myquotagrp $username
    8. echo "password" | passwd --stdin $username
    9. done
    10. mkdir /home/myquota

    针对用户和用户组进行配额
    1.文件系统的支持于查看

     [root@ds ~]# df -Th /home/
    Filesystem     Type  Size  Used Avail Use% Mounted on
    /dev/vda2      xfs   5.0G   33M  5.0G   1% /home
    
    
    [root@ds ~]# vim /etc/fstab 
    /dev/vda2               /home   xfs  defaults,usrquota,grpquota  0 0
    #注意这个 必须要在挂载之前就声明的 必须修改然后重新挂载才有效果
    选项有三个
    uquota/usrquota/quota    针对用户账号的设置
    gquota/grpquota        #针对 用户组的设置
    pquota/prjquota        #针对单一目录的设置 千万注意不能和用户组同时存在
    [root@ds ~]# umount /home
    [root@ds ~]# mount -a 
    [root@ds ~]# mount | grep /home
    dev/vda2 on /home type xfs (rw,relatime,attr2,inode64,usrquota,grpquota) 
    #注意看 有没有开启这个功能 !!
    

    2.磁盘配额报告数据的查看

    [root@study ~]# xfs_quota -x -c "指令" [挂载点] 
    选项与参数: 
    -x :专家模式,后续才能够加入 -c 的指令参数喔! 
    -c :后面加的就是指令,这个小节我们先来谈谈数据回报的指令 
    指令:
    print :单纯的列出目前主机内的文件系统参数等数据 
    df :   与原本的 df 一样的功能,可以加上 -b (block) -i (inode) -h (加上单位) 等 
    report:列出目前的 quota 项目,有 -ugr (user/group/project) 及 -bi 等数据 
    state :说明目前支持 quota 的文件系统的信息,有没有起动相关项目等 
    
    范例一:列出目前系统的各的文件系统,以及文件系统的 quota 挂载参数支持 
    [root@study ~]# xfs_quota -x -c "print" 
    Filesystem Pathname 
    / /dev/mapper/centos-root 
    /srv/myproject /dev/vda4 
    /boot /dev/vda2 
    /home /dev/mapper/centos-home (uquota, gquota) # 所以这里就有显示支持啰
    
    范例二:列出目前 /home 这个支持 quota 的载点文件系统使用情况 
    [root@study ~]# xfs_quota -x -c "df -h" /home 
    Filesystem Size Used Avail Use% Pathname 
    /dev/mapper/centos-home 
    5.0G 67.0M 4.9G 1% /home 
    # 如上所示,其实跟原本的 df 差不多啦!只是会更正确就是了。
    
    范例三:列出目前 /home 的所有用户的 quota 限制值 
    [root@study ~]# xfs_quota -x -c "report -ubih" /home 
    User quota on /home (/dev/mapper/centos-home) 
    Blocks Inodes 
    User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace 
    ---------- --------------------------------- --------------------------------- 
    root 4K 0 0 00 [------] 4 0 0 00 [------] 
    dmtsai 34.0M 0 0 00 [------] 432 0 0 00 [------] 
    .....(中间省略)..... 
    myquota1 12K 0 0 00 [------] 7 0 0 00 [------] 
    myquota2 12K 0 0 00 [------] 7 0 0 00 [------] 
    myquota3 12K 0 0 00 [------] 7 0 0 00 [------] 
    myquota4 12K 0 0 00 [------] 7 0 0 00 [------] 
    myquota5 12K 0 0 00 [------] 7 0 0 00 [------] 
    # 所以列出了所有用户的目前的文件使用情况,并且列出设置值。注意,最上面的 Block 
    # 代表这个是 block 容量限制,而 inode 则是文件数量限制喔。另外,soft/hard 若为 0,代表没限制 
    
    范例四:列出目前支持的 quota 文件系统是否有起动了 quota 功能? 
    [root@study ~]# xfs_quota -x -c "state" 
    User quota state on /home (/dev/mapper/centos-home) 
    Accounting: ON # 有启用计算功能 
    Enforcement: ON # 有实际 quota 管制的功能 
    Inode: #1568 (4 blocks, 4 extents) # 上面四行说明的是有启动 user 的限制能力 
    Group quota state on /home (/dev/mapper/centos-home) 
    Accounting: ON 
    Enforcement: ON 
    Inode: #1569 (5 blocks, 5 extents) # 上面四行说明的是有启动 group 的限制能力 
    Project quota state on /home (/dev/mapper/centos-home)Accounting: OFF 
    Enforcement: OFF 
    Inode: #1569 (5 blocks, 5 extents) # 上面四行说明的是 project 并未支持 
    Blocks grace time: [7 days 00:00:30] # 下面则是 grace time 的项目 
    Inodes grace time: [7 days 00:00:30] 
    Realtime Blocks grace time: [7 days 00:00:30]
    

    3.磁盘配额的设置
    我们需要每个用户 250M/300M 的容量
    限制,群组共 950M/1G 的容量限制,同时 grace time 设置为 14 天喔! 实际的语法与设置 流程

    
    [root@study ~]# xfs_quota -x -c "limit [-ug]     b[soft|hard]=N i[soft|hard]=N name" 
    [root@study ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays" 
    选项与参数: 
    limit :实际限制的项目,可以针对 user/group 来限制,限制的项目有 
    bsoft/bhard : block 的 soft/hard 限制值,可以加单位 
    isoft/ihard : inode 的 soft/hard 限制值 
    name : 就是用户/群组的名称啊! 
    timer :用来设置 grace time 的项目喔,也是可以针对 user/group 以及 block/inode 设置 
    
    范例一:设置好用户们的 block 限制值 (题目中没有要限制 inode 啦!) 
    [root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota1" /home 
    [root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota2" /home 
    [root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota3" /home 
    [root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota4" /home 
    [root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota5" /home 
    [root@study ~]# xfs_quota -x -c "report -ubih" /home                 #注意这个是 -h 人性化显示
    User quota on /home (/dev/mapper/centos-home) 
    Blocks Inodes 
    User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace 
    ---------- --------------------------------- --------------------------------- 
    myquota1 12K 250M 300M 00 [------] 7 0 0 00 [------] 
    
    范例二:设置好 myquotagrp 的 block 限制值 
    [root@study ~]# xfs_quota -x -c "limit -g bsoft=950M bhard=1G myquotagrp" /home 
    [root@study ~]# xfs_quota -x -c "report -gbih" /home 
    Group quota on /home (/dev/mapper/centos-home) 
    Blocks Inodes 
    Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace 
    ---------- --------------------------------- --------------------------------- 
    myquotagrp 60K 950M 1G 00 [------] 36 0 0 00 [------] 
    
    范例三:设置一下 grace time 变成 14 天吧! 
    [root@study ~]# xfs_quota -x -c "timer -u -b 14days" /home 
    [root@study ~]# xfs_quota -x -c "timer -g -b 14days" /home 
    [root@study ~]# xfs_quota -x -c "state" /home 
    User quota state on /home (/dev/mapper/centos-home) 
    .....(中间省略)..... 
    Blocks grace time: [14 days 00:00:30] 
    Inodes grace time: [7 days 00:00:30] 
    Realtime Blocks grace time: [7 days 00:00:30] 
    
    范例四:以 myquota1 用户测试 quota 是否真的实际运行呢? 
    [root@study ~]# su - myquota1 
    [myquota1@study ~]$ dd if=/dev/zero of=123.img bs=1M count=310     
    dd: error writing ‘123.img’: Disk quota exceeded 
    300+0 records in 
    299+0 records out 
    314552320 Bytes (315 MB) copied, 0.181088 s, 1.7 GB/s 
    [myquota1@study ~]$ ll -h 
    -rw-r--r--. 1 myquota1 myquotagrp 300M Jul 24 21:38 123.img 
    [myquota1@study ~]$ exit 
    [root@study ~]# xfs_quota -x -c "report -ubh" /home 
    User quota on /home (/dev/mapper/centos-home) 
    Blocks 
    User ID Used Soft Hard Warn/Grace 
    ---------- ---------------------------------myquota1 300M 250M 300M 00 [13 days] 
    myquota2 12K 250M 300M 00 [------] 
    # 因为 myquota1 的磁盘用量已经破表,所以当然就会出现那个可怕的 grace time 啰!
    

    针对单一目录进行配额
    1.先修改/etc/fstab 让文件系统支持对目录惊醒配额

    # 1. 先修改 /etc/fstab 的参数,并启动文件系统的支持 
    [root@study ~]# vim /etc/fstab 
    /dev/mapper/centos-home /home xfs defaults,usrquota,prjquota 0 0 
    # 记得, grpquota 与 prjquota 不可同时设置喔!所以上面删除 grpquota 加入 prjquota 
    [root@study ~]# umount /home 
    [root@study ~]# mount -a 
    [root@study ~]# xfs_quota -x -c "state" 
    User quota state on /home (/dev/mapper/centos-home) 
    Accounting: ON 
    Enforcement: ON 
    Inode: #1568 (4 blocks, 4 extents) 
    Group quota state on /home (/dev/mapper/centos-home) 
    Accounting: OFF <==已经取消啰! 
    Enforcement: OFF 
    Inode: N/A 
    Project quota state on /home (/dev/mapper/centos-home) 
    Accounting: ON <==确实启动啰! 
    Enforcement: ON 
    Inode: N/A 
    Blocks grace time: [7 days 00:00:30] 
    Inodes grace time: [7 days 00:00:30] 
    Realtime Blocks grace time: [7 days 00:00:30]
    

    对目录磁盘配额进行设置
    目录的设置比较奇怪,他必须要指定一个所谓的“专案名称、专案识别码”来规
    范才行!而且还需要用到两个配置文件!现在,我们要规范的目录是 /home/myquota 目录,
    这个目录我们给个 myquotaproject 的
    专案名称, 这个专案名称给个 11 的识别码,这个都是自己指定的,

    # 2.1 指定专案识别码与目录的对应在 /etc/projects 
    [root@study ~]# echo "11:/home/myquota" >> /etc/projects 
    # 2.2 规范专案名称与识别码的对应在 /etc/projid 
    [root@study ~]# echo "myquotaproject:11" >> /etc/projid 
    # 2.3 初始化专案名称 
    [root@study ~]# xfs_quota -x -c "project -s myquotaproject" 
    Setting up project myquotaproject (path /home/myquota)... 
    Processed 1 (/etc/projects and cmdline) paths for project myquotaproject with recursion 
    depth infinite (-1). # 会闪过这些讯息!是 OK 的!别担心! 
    [root@study ~]# xfs_quota -x -c "print " /home 
    Filesystem Pathname 
    /home /dev/mapper/centos-home (uquota, pquota) 
    /home/myquota /dev/mapper/centos-home (project 11, myquotaproject) 
    # 这个 print 功能很不错!可以完整的查看到相对应的各项文件系统与 project 目录对应! 
    [root@study ~]# xfs_quota -x -c "report -pbih " /home 
    Project quota on /home (/dev/mapper/centos-home) 
    Blocks Inodes 
    Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace 
    ---------- --------------------------------- --------------------------------- 
    myquotaproject 0 0 0 00 [------] 1 0 0 00 [------] 
    # 喔耶!确定有抓到这个专案名称啰!接下来准备设置吧! 
    
    # 3.1 先来设置好这个 project 吧!设置的方式同样使用 limit 的 bsoft/bhard 喔!: 
    [root@study ~]# xfs_quota -x -c "limit -p bsoft=450M bhard=500M myquotaproject" /home 
    [root@study ~]# xfs_quota -x -c "report -pbih " /home 
    Project quota on /home (/dev/mapper/centos-home) 
    Blocks Inodes 
    Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace 
    ---------- --------------------------------- --------------------------------- 
    myquotaproject 0 450M 500M 00 [------] 1 0 0 00 [------] 
    [root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=510 
    dd: error writing '/home/myquota/123.img': No space left on device 
    501+0 records in 
    500+0 records out 
    524288000 Bytes (524 MB) copied, 0.96296 s, 544 MB/s 
    # 你看!连 root 在该目录下面创建文件时,也会被挡掉耶!这才是完整的针对目录的规范嘛!赞!
    

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

    # 1. 暂时关闭 XFS 文件系统的 quota 限制功能 
    [root@study ~]# xfs_quota -x -c "disable -up" /home 
    [root@study ~]# xfs_quota -x -c "state" /home 
    User quota state on /home (/dev/mapper/centos-home) 
    Accounting: ON 
    Enforcement: OFF <== 意思就是有在计算,但没有强制管制的意思 
    Inode: #1568 (4 blocks, 4 extents) 
    Group quota state on /home (/dev/mapper/centos-home) 
    Accounting: OFF 
    Enforcement: OFF 
    Inode: N/A 
    Project quota state on /home (/dev/mapper/centos-home) 
    Accounting: ON 
    Enforcement: OFF 
    Inode: N/A 
    Blocks grace time: [7 days 00:00:30] 
    Inodes grace time: [7 days 00:00:30] 
    Realtime Blocks grace time: [7 days 00:00:30] 
    
    [root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=520 
    520+0 records in 
    520+0 records out # 见鬼!竟然没有任何错误发生了! 
    545259520 Bytes (545 MB) copied, 0.308407 s, 180 MB/s 
    [root@study ~]# xfs_quota -x -c "report -pbh" /home 
    Project quota on /home (/dev/mapper/centos-home) 
    Blocks 
    Project ID Used Soft Hard Warn/Grace 
    ---------- --------------------------------- 
    myquotaproject 520M 450M 500M 00 [-none-] 
    # 其实,还真的有超过耶!只是因为 disable 的关系,所以没有强制限制住就是了! 
    
    [root@study ~]# xfs_quota -x -c "enable -up" /home # 重新启动 quota 限制 
    [root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=520 
    dd: error writing ‘/home/myquota/123.img’: No space left on device# 又开始有限制!
    这就是 enable/disable 的相关对应功能喔!暂时关闭/启动用的! 
    
    # 完全关闭 quota 的限制行为吧!同时取消 project 的功能试看看! 
    [root@study ~]# xfs_quota -x -c "off -up" /home 
    [root@study ~]# xfs_quota -x -c "enable -up" /home 
    XFS_QUOTAON: Function not implemented 
    # 您瞧瞧!没有办法重新启动!因为已经完全的关闭了 quota 的功能!所以得要 umouont/mount 才行! 
    [root@study ~]# umount /home; mount -a 
    # 这个时候使用 report 以及 state 时,管制限制的内容又重新回来了!好!来瞧瞧如何移除project 
    [root@study ~]# xfs_quota -x -c "off -up" /home 
    [root@study ~]# 
    #删除用户的限制就是 remove -u 用户组就是 -g !!!!!!!!
    [root@study ~]# umount /home; mount -a 
    [root@study ~]# xfs_quota -x -c "report -phb" /home 
    Project quota on /home (/dev/mapper/centos-home) 
    Blocks 
    Project ID Used Soft Hard Warn/Grace 
    ---------- --------------------------------- 
    myquotaproject 500M 0 0 00 [------] 
    # 嘿嘿!全部归零!就是“移除”所有限制值的意思!
    

    请注意上表中最后一个练习,那个 remove -p 是“移除所有的 project 控制列表”的意
    思!也就是说,如果你有在 /home 设置多个 project 的限制, 那么 remove 会删的一个也
    不留喔!如果想要回复设置值,那…只能一个一个重新设置回去了!没有好办法!
    ext4文件系统和xfs文件系统的命令对照表
    image.jpeg