作用:限制磁盘资源的使用
应用场景:
1.网络储空间有限的 网盘
2.邮件服务器
3.公司的共享服务器
限制对象:
1.普通用户 2.用户组
两个限制方面
inode -限制用户创建的文件个数
block--- 限制用创建文件的的磁盘空间
----soft软限制:超过软限制只警告,不影响使用
----hard硬限制:是不可逾越的限制
grance time 时间限制:宽限时间,当超越软限制则,限制时间则自动倒计时,默认为七天,逾期自动转换为硬限制
查看设置配额的条件
grep -i quota /boot/config-3.10.0-693.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
xfs 文件系统设置磁盘配额
mkfs.xfs /dev/sdb1
创建磁盘配额的语法:
xfs_quota -x -c "limit -u/g bsoft=N bhard=N username/prgname" quota path
案例:
1.对用户设置磁盘限额
# 前提是文件系统支持磁盘配额的属性uquota gquota
# 将文件系统挂载到系统中的目录
mount /dev/sdb1 /data
# 查看文件系统是否支持磁盘配额
mount |grep data
umount /data
# 让文件系统支持磁盘配额
mount -o uquo,gquota /dev/sdb1 /data
mount |grep /data
/dev/sdc1 on /data type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
###设置分区开机自挂载
vim /etc/fstab
/dev/sdb1 /data xfs defaults,uquota,gquota 0 0
###创建用户
useradd quoat1
#查看配额信息
xfs_quotaq -x -c 'report -ubih'
# xfs_quota 选项
-x 专家模式 只有使用了-x后面才可以使用-c的指令
-c 后接指令
report 列出目前的quota项目
-i inode
-b block
-h 人性化显示
-u 只显示用户的配额
-g 只显示用户组的配额
limit 设置配额
state 显示状态
timer 设置宽限时间
案例:针对用户做限额
# 限制quota1用户只能在/data目录内创建10个文件
xfs_quota -x -c 'limit -u isoft=7 ihard=10 quota1 ' /data
给目录设置权限然后进行测试
chmod 777 /data
chmod o+t /data
su -quota1
cd /data
创建文件,如果目录文件超过10个文件则会弹出超出限额提醒,仍会创建,但一部分文件不能创建
二.针对组做限额
groupadd ops
useradd -g ops quota1
usermod -g ops quota2
xfs_guota -x -c 'limit -g isoft=20 ihard=40 osp ' /data
xfs_quota -x -c "report -gihn " /data
su -quota1
cd /data
创建文件,如果目录文件超过10个文件则会弹出超出限额提醒,仍会创建,但一部分文件不能创建
touch: 无法创建"test11": 超出磁盘限额
touch: 无法创建"test12": 超出磁盘限额
touch: 无法创建"test13": 超出磁盘限额
touch: 无法创建"test14": 超出磁盘限额
touch: 无法创建"test15": 超出磁盘限额
touch: 无法创建"test16": 超出磁盘限额
touch: 无法创建"test17": 超出磁盘限额
touch: 无法创建"test18": 超出磁盘限额
touch: 无法创建"test19": 超出磁盘限额
touch: 无法创建"test20": 超出磁盘限额
三 对目录设置磁盘限额
umount /data
mount -o usrquota,prjquota grpquota /dev/sdb1 /data ###添加挂载属性
mount |grep /data
# 对项目配置配额
xfs_quota -x -c "limit bsoft=100M bhard=200M -p aa" /data/
xfs_quota -x -c "report -pbih" /data
echo 1:/data >> /etc/projects # 指定项目ID"1"与目录"/data"对应在/etc/projects
echo aa:1 >> /etc/projid # 指定项目名称"aa"与项目ID"1"对应在/etc/projid
初始化项目
xfs_quota -x -c "project -s aa"
# 对项目配置配额
xfs_quota -x -c "limit bsoft=100M bhard=200M -p aa" /data
xfs_quota -x -c "report -pbih" /data/
cd /data
dd if=/dev/zero of=/data/big1 bs=1M count=300
超出限额则会提示没有空间,但仍会创建
ext4 文件系统(yum -y install quota(需要单独下载)
磁盘限额只对普通用户生效(root为特殊用户,再怎么做限制也不会生效)
查看是否开启quota
mount |grep /data
开启对/dev/sdb1的磁盘配额
临时开启
mount -o remount,usrquota,grpquota /dev/sdb1 /data
永久修改
vim /etc/fstab
/dev/sdb1 /data ext4 defaults,usrquota,grpquota 0 0
查看
mount |grep /dev/sdb1
生产磁盘配额数据库
quotacheck -acgu
-a 所有分区(已支持配额)
-c 创建
-u 用户
-g 组
启动磁盘配额数据库
quota on -avgu
编辑用户的磁盘配额 与xfs不同的是ext4只能在指定为文件中修改限额
edquota quota1
Disk quotas for user quota1 (uid 1005):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 10M 20M 0 0 0
注意:这里设置的限制大小单位要大写,可以写M,G,K
quota -uvs uguota1 查看指定用户磁盘配额
dd if=/dev/zero of=/data/test bs=1M count=15
再创建一个
可以看到是出现了失败,说明用户的磁盘配置是成功的
针对组进行配额
groupadd group1
useradd -g group1 user2
usermod -g group1 user1
从用户 user1 复制磁盘配额设置并应用到用户 user2 上
edquota -p user1 user2
针对group1组进行配额管理
edquota -g group1
quota -gvs group1
Disk quotas for group group1 (gid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/sdb1 0K 100M 200M 0 0 0
然后用组用户测试
登录user1和user2进行测试
su -user1
cd /data
dd if=/dev/zero of=/data/test bs=1M count=150
data: warning, group block quota exceeded.
记录了150+0 的读入
记录了150+0 的写出
157286400字节(157 MB)已复制,0.507608 秒,310 MB/秒
su - user2
dd if=/dev/zero of=/data/test2 bs=1M count=100
data: write failed, group block limit reached.
dd: 写入"/data/test2" 出错: 超出磁盘限额
记录了51+0 的读入
记录了50+0 的写出
52428800字节(52 MB)已复制,0.435193 秒,120 MB/秒
以上我们不难看出,用户组的用户创建大小文件,当超过硬限制,则会弹出出错信息
针对新建文件数进行限制
针对user1用户的新建文件数进行配额限制
quota -uvs user1
Disk quotas for user user1 (uid 1000):
Filesystem space quota limit grace files quota limit grace
/dev/sdb1 150M 0K 0K 1 10 20
登录user1测试
touch file{1..12}
touch file1{1..25}
data: warning, user file quota exceeded.
data: write failed, user file limit reached.
touch: 无法创建"file120": 超出磁盘限额
touch: 无法创建"file121": 超出磁盘限额
touch: 无法创建"file122": 超出磁盘限额
touch: 无法创建"file123": 超出磁盘限额
touch: 无法创建"file124": 超出磁盘限额
touch: 无法创建"file125": 超出磁盘限额
以上我们不难看出超出指定数量仍会弹出限额信息
修改宽限时间,默认是7天(当超出硬限额之后,有七天喘息时间,超过七天限额默认为硬限制,期间只能做删除,不能添加)
edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 5days 7hours
touch file{1..12}
data: warning, user file quota exceeded.
quota
Disk quotas for user user1 (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdc1 4 0 0 13* 10 20 07:00
以上我们创建12个文件后,有提示告警,并且限制时间现在变成了7个小时
quota 常用命令
1) 临时禁用quota
xfs_quota -x -c "disable -up" /data
xfs_quota -x -c "state" /data 检查quota状态
2) 临时启用quota
xfs_quota -x -c "enable -up" /data
3) 完全关闭quota
xfs_quota -x -c "off -up" /data
4) 删除quota限制(无法恢复)
xfs_quota -x -c "off -up" /data
xfs_quota -x -c "remove -p" /data
xfs_quota -x -c "limit -u isoft=0 ihard=0 quota1" /data 将配额值设为0(无配额限制)