1 磁盘配额
磁盘配额是管理员为普通用户设置的使用磁盘的限制 , 每个用户只能使用有限的磁盘空间。通过磁盘配额的设置 , 管理员可以很清楚的了解到每个用户的磁盘使用情况。同时 , 也避免了某些用户因为存储垃圾文件浪费磁盘空间导致其他其他用户无法正常工作。
注:无法对单独的目录设置磁盘配额 , 如果需要对
/home设置磁盘配额 ,/home必须在单独的文件系统中。 磁盘配额(Quota)用于限制用户/组对磁盘空间和文件数量的占用。ext系列(ext4)和XFS都支持 , 但实现机制不同:ext4用aquota.user数据库文件 + 内核记账,XFS由文件系统内部管理(用xfs_quota)
两类限制维度
每维三级概念
2 设置步骤
2.1 启用配额功能
这一步中需要在磁盘中设置相应分区 , 分区类型设置为默认即可 , 之后直接将对应的分区挂载在对应目录中即可。
注:默认情况下 , 系统安装时没有磁盘配额功能 , 需要
yum install quota,这样才能保证系统具有磁盘配额功能。
之后直接将下面所示的挂载信息写在/etc/fstab文件中
UUID="6fd15241-b805-499e-9b2b-591e03a20695" /mnt ext4 usrquota,grpquota 0 0其中usrquota 表示用户拥有磁盘配额功能 , grpquota表示组拥有磁盘配额功能。 通过以上步骤 , 即开启了linux磁盘配额功能
2.2 创建配额数据库
创建配额数据库 , 一般使用quotacheck命令
语法:
quotacheck [OPTIONS] filesystem[OPTIONS]-a: 扫描在/etc/mstab文件里 , 有加入quota设置的分区。-c: 每个启用的配额文件系统都应该创建配额文件 , 创建新的数据库文件。-d: 详细显示指令执行过程 , 便于排错或了解程序执行的情形。-g: 扫描磁盘空间时 , 计算每个群组识别码所占用的目录和文件数目。-R: 排除根目录所在的分区。-u: 扫描磁盘空间时 , 计算每个用户识别码所占用的目录和文件数目。-v: 显示指令执行过程。
示例:
quotacheck -cug /home这个命令会直接在对应挂载目录下面创建两个数据库文件:
quota.user,quota.group.分别是用户 , 组的配额数据库文件 , 运行这个命令需要关闭selinux
2.3 启用/关闭数据库
这一步会直接开启对应的用户 , 组的配额功能 , 一般使用quotaon命令 , 同时关闭磁盘分区的命令为 , quotaoff
语法:
quotaon [options] filesystemOPTIONS-a: 开启在/ect/mstab文件里 , 有加入quota设置的分区的空间限制。-g: 开启群组的磁盘空间限制。-u: 开启用户的磁盘空间限制。-v: 显示指令指令执行过程。-f: 执行swapoff功能 , 关闭对应配额功能。(这个选项只适用于quotaon)-p: 打印对应文件系统的配额状态。
示例:
[root@localhost mnt]# quotaon -a
[root@localhost mnt]# quotaon -p /mnt
group quota on /mnt (/dev/sdb1) is on
user quota on /mnt (/dev/sdb1) is on
[root@localhost mnt]# quotaon -f /mnt
[root@localhost mnt]# quotaon -p /mnt
group quota on /mnt (/dev/sdb1) is off
user quota on /mnt (/dev/sdb1) is off
[root@localhost mnt]# quotaon -u /mnt
[root@localhost mnt]# quotaon -p /mnt
group quota on /mnt (/dev/sdb1) is off
user quota on /mnt (/dev/sdb1) is on
[root@localhost mnt]# quotaon -fv /mnt
/dev/sdb1 [/mnt]: group quotas turned off
/dev/sdb1 [/mnt]: user quotas turned off
2.4 指定用户的空间限制
指定用户空间时 , 可以限定用户使用空间的大小 , 以及inode的数量(inode表示文件数量)
语法:
edquota [OPTIONS]options:-u: 设置用户的quota, 这是默认参数。-g: 设置群组的quota。-p<源用户名称>: 将源用户的quota设置套用至其他用户或群组。-t: 设置宽限期限。-f,--filesystem filesystem:显示指定目录的配额
使用这个命令之后 , 系统会直接跳转至vim 界面 , 如下图所示:

soft:超过这个值之后,会提出报警 , 用户此时无法再添加对应目录中添加数据。hard: 禁止超过这个值
对于占用空间的基础单位为
K
edquota -t :修改的是宽容时间。超过hard值之后 , 会保持数据的时间 , 在这段时间之类 , 无法增加数据 , 只能减少数据 , 如果超过这个时间 , 用户就无法对这个目录再进行任何读写操作

edquota -p xiong wang: 将xiong的磁盘配额配置复制给wang用户
2.5 测试
可以通过dd命令进行测试
[xiong@localhost mnt]$ dd if=/dev/zero of=f3 bs=1M count=350
sdb1: warning, user block quota exceeded.
350+0 records in
350+0 records out
367001600 bytes (367 MB) copied, 1.71657 s, 214 MB/s
完整配置流程:
挂载选项
# /etc/fstab 添加挂载选项 /dev/sdb1 /home ext4 defaults,usrquota,grpquota 0 2 # 重新挂载生效(无需重启) mount -o remount /home # 验证 mount | grep home # /dev/sdb1 on /home type ext4 (rw,relatime,usrquota,grpquota)创建配额数据库
# -c 创建 -u 用户配额 -g 组配额 -m 不强制只读重挂载 quotacheck -cug /home # 生成两个文件(位于文件系统根目录) ls -l /home/aquota.* # -rw------- 1 root root aquota.group # -rw------- 1 root root aquota.user启用配额数据库
quotaon -v /home # /dev/sdb1 [/home]: user quotas turned on # /dev/sdb1 [/home]: group quotas turned on设置配额
# 方式 A:交互编辑(调起 vi) edquota -u alice # 方式 B:命令行直设(脚本推荐) setquota -u alice 204800 256000 2000 3000 /home # │软空间 │硬空间 │软文件数 │硬文件数 # 即:空间 soft=200MB hard=250MB,文件数 soft=2000 hard=3000 # 方式 C:批量复制模板 edquota -p alice bob carol # 把 alice 的配额复制给 bob、carol设置宽限期
edquota -t # 编辑界面修改 block grace / inode grace,格式支持 sec/min/hour/day/week # 或命令行(单位:秒) setquota -t 604800 604800 /home # 7天验证
quota -vs alice # Disk quotas for user alice (uid 1001): # Filesystem space quota limit grace files quota limit grace # /dev/sdb1 105M 200M 250M 1245 2000 3000 repquota -s /home
3 其他quota命令
3.1 quota
quota :显示磁盘使用和限制
语法:
quota [OPTIONS] [-u user | -g group]-g: 列出群组的磁盘空间限制。-q: 简明列表 , 只列出超过限制的部分。-u: 列出用户的磁盘空间限制。-v: 显示该用户或群组 , 在所有挂入系统的存储设备的空间限制。-V: 显示版本信息。
如果后面不加用户 , 则默认显示的是当前运行该命令的用户。
[root@localhost mnt]# quota -usv xiong
Disk quotas for user xiong (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 0 293M 391M 0 8 10
[root@localhost mnt]# quota -us xiong
Disk quotas for user xiong (uid 500): none
[root@localhost mnt]# quota -uvsq xiong
Disk quotas for user xiong (uid 500):
Block limit reached on /dev/sdb1
输出列含义:
Filesystem blocks(当前用量) soft hard grace files(当前) soft hard grace*号标记 : 已超限(超出soft或hard)grace列显示剩余宽限时间 , 如6days
3.2 repquota
repoquota : 用于检查磁盘空间限制的状态。
语法:
repquota [options] filesystem repquota -a [opions]filesystem与-a选项不能同时存在OPTIONS-a: 报告所有可以在/etc/mtab文件中可以读到的设置里配额的选项-g: 列出所有群组的磁盘空间限制。-u: 列出所有用户的磁盘空间限制。-v: 显示该用户或群组的所有空间限制。-s: 显示的数值以可读单位显示
示例:
[root@localhost mnt]# repquota -vusp /mnt
*** Report for user quotas on device /dev/sdb1
Block grace time: 00:01; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 0 3 0 0 0
xiong +- 391M 293M 391M 1538636758 1 8 10 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2.000000
3.3 setquota
使用非交互的方式设置磁盘配额
语法:
setquota [OPTIONS] -a | filesystem setquota [ -rm ] [ -u | -g ] [ -F quotaformat ] name block-softlimit block-hardlimit inode-softlimit inode-hardlimit -a | filesystem...OPTIONS:-u: 设置用户的quota, 这是默认参数。-g: 设置群组的quota。-p<源用户名称>: 将源用户的quota设置套用至其他用户或群组。-t: 设置用户 , 组的宽限期限。-T:超过限制之后 , 设置特定用户 , 组的宽限期限。
[root@localhost mnt]# setquota -u wang 300000 400000 3 10 /dev/sdb1
[root@localhost mnt]# quota -vu wang
Disk quotas for user wang (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 0 300000 400000 0 3 10
[root@localhost mnt]# setquota -u wang -p xiong /dev/sdb1
[root@localhost mnt]# quota -vu wang
Disk quotas for user wang (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 0 300000 400000 0 8 10
[root@localhost mnt]# setquota -u -t 700 700 /mnt
[root@localhost mnt]# repquota -ausv
*** Report for user quotas on device /dev/sdb1
Block grace time: 00:12; Inode grace time: 00:12
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 3 0 0
xiong +- 391M 293M 391M none 1 8 10
wang -- 0 293M 391M 0 8 10
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 3
Used average: 3.000000
[root@localhost mnt]# setquota -T xiong 800 0 /mnt
setquota: Not setting inode grace time on /dev/sdb1 because softlimit is not exceeded.
[root@localhost mnt]# repquota -auvs
*** Report for user quotas on device /dev/sdb1
Block grace time: 00:12; Inode grace time: 00:12
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 3 0 0
xiong +- 391M 293M 391M 00:13 1 8 10
wang -- 0 293M 391M 0 8 10
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 3
Used average: 3.000000
4. XFS 配额的差异(重要)
XFS 不走 aquota 数据库 , 由文件系统内部记账 , 用专属工具 xfs_quota:
# 挂载选项不同(fstab)
/dev/sdb1 /data xfs defaults,uquota,gquota 0 0
# 只统计不限制用 uqnoenforce/gqnoenforce
# 无需 quotacheck、quotaon(XFS 自动记账)
# 设置配额用 xfs_quota
xfs_quota -x -c 'limit bsoft=1g bhard=2g alice' /data
xfs_quota -x -c 'limit isoft=1000 ihard=2000 alice' /data
xfs_quota -x -c 'timer -b 7d' /data # 宽限期
xfs_quota -x -c 'report -ubh' /data # 报告
# 查看
xfs_quota -x -c 'quota -u alice' /data参考链接