配额:quota,用来限制磁盘资源的使用。
磁盘配额分为:uquota(限制普通用户),gquota(限制用户组),pquota(限制项目)。
分别在两个方面进行限制:
block----限制用户能够使用磁盘空间的大小
inode----限制用户存储文件的个数
限制的情形分为以下三种:
soft 软限制:超过软限制只警告,不影响使用
hard 硬限制:是不可逾越的限制
grace time 时间限制:宽限时间,当超过软限制,没有超过硬限制的时候,将启动倒计时,默认设置为7天,如果7天内不进行任何磁盘管理操作,软限制将变成硬限制。
设置配额,需要哪些条件?
1)需要内核支持磁盘配额
# grep -i quota /boot/config-3.10.0-514.el7.x86_64
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_XFS_QUOTA=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
CONFIG_QUOTACTL_COMPAT=y
查阅内核支持配额信息,加粗的两行代表centos7u3使用的内核支持配额。
2)文件系统支持磁盘配额
设置配额的步骤:
1)准备分区
# parted /dev/sdb mkpart primary 1 1G
2)制作文件系统
# mkfs.xfs /dev/sdb1
3)修改文件系统的属性并挂载(支持磁盘配额)
uquota gquota pquota
# umount /dev/sdb1
# mount -o uquota,gquota,pquota /dev/sdb1 /sdb1
# mount |grep sdb1
/dev/sdb1 on /sdb1 type xfs (rw,relatime,attr2,inode64,usrquota,prjquota,grpquota)
4)配置磁盘配额(设置user1用户只能在此文件系统内创建10个文件,并且创建文件的总大小不能超过10M)
1)准备用户
# useradd user1
2)为user1用户设置配额
# xfs_quota -x -c 'limit -u ihard=10 bhard=10M user1' /sdb1
-x 专家模式 只有使用了-x后面才可以使用-c的指令
-c 后面接子命令
limit 设置配额
-u 给用户设置配额
-g 给用户组设置配额
-p 给项目设置配额
isoft inode的软限制
ihard inode的硬限制
bsoft block的软限制
bhard block的硬限制
3)查看用户的配额信息
# xfs_quota -x -c 'report -uibh' /sdb1
User quota on /sdb1 (/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 [------]
user1 0 0 10M 00 [------] 10 0 10 00 [------]
report 列出文件系统的quota信息
-u 只显示用户的配额
-g 只显示用户组的配额
-p 只显示项目的配额
-i 只显示inode的配额
-b 只显示block的配额
-h 人性化显示
5)测试
# chmod 777 /sdb1
# su - user1
$ cd /sdb1 //一定要切换到做了配额的目录下在操作
$ touch {1..10}.txt
$ ls
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
$ touch 11.txt //超过硬限制,不能够创建11.txt文件
touch: 无法创建"11.txt": 超出磁盘限额
$ rm -rf 10.txt 9.txt
$ dd if=/dev/zero of=a.txt bs=1M count=10
$ dd if=/dev/zero of=b.txt bs=1M count=1 //超过硬限制,不能够b.txt文件
dd: 打开"b.txt" 失败: 超出磁盘限额
关闭配额
1)停止配额
# xfs_quota -x -c 'off -u' /sdb1
# xfs_quota -x -c 'off -g' /sdb1
# xfs_quota -x -c 'off -p' /sdb1
2)删除配额
# xfs_quota -x -c 'remove -u' /sdb1
# xfs_quota -x -c 'remove -g' /sdb1
# xfs_quota -x -c 'remove -p' /sdb1