##使用条件:
- EXT格式只能对文件系统进行限制,xfs可用对project进行限制;
- 内核需要预开启对Quota支持(centos7已预开启)
- xfs针对用户和用户组时,也只能对整个文件系统来设置
- Quota限制用户/用户组时只对非管理员有效
##限制的可配置对象:
- 根据用户(User)、组(Group)、特定目录(project)
- 容量限制或文件数量限制(block/inode)
- 限制值soft(超过空间用量给予警告和宽限时间)和hard(超过空间用量则剥夺用户使用权)
- 宽限时间(grace time),空间用量超出soft限定而未达到hard限定给予的处理时限(超出时限soft值变成hard值)
一.xfs格式文件系统配额管理
##根据用户用户组配额限制
1.准备xfs文件系统
mkfs.xfs -f /dev/sdb3
mkdir -p 777 /mnt;mount /dev/sdb3 /mnt
df -Th|grep sdb3
2.创建用户、用户组
groupadd gp1;
useradd -g gp1 user1;echo "pwd1" | passwd --stdin user1
useradd -g gp1 user2;echo "pwd2" | passwd --stdin user2
id user1;id user2;
mkdir /mnt/gp1;chgrp gp1 /mnt/gp1;chmod 2770 /mnt/gp1 ##创建用户目录并变更所有组
df -hT /mnt ##查看/mnt文件系统类型为xfs
3.启用文件系统用户、用户组配额支持
vim /etc/fstab ##设置文件系统用户用户组配额
/dev/sdb3 /mnt xfs defaults,usrquota,grpquota 0 0
umount /mnt;mount -a;mount | grep mnt ##重新挂载使得配额生效
xfs_quota -x -c "print" ##查询可以使用Quota的文件系统
xfs_quota -x -c "df -h" /mnt ##查看目录使用情况
xfs_quota -x -c "report -ubih" /mnt ##显示用户的Quota的限制信息
4.对用户和用户组设置配额
xfs_quota -x -c "limit -u bsoft=250M bhard=300M user1" /mnt ##对用户user1设置配额
xfs_quota -x -c "limit -u bsoft=350M bhard=600M user2" /mnt ##对用户user2设置配额
xfs_quota -x -c "report -ubih" /mnt ##查看用户配额情况
xfs_quota -x -c "limit -g bsoft=400M bhard=800M gp1" /mnt ##设置用户组配置
xfs_quota -x -c "report -gbih" /mnt ##查看组配额情况
xfs_quota -x -c "timer -ug -b 14days" /mnt ##-ug;同时配置用户用户组的宽限时间
xfs_quota -x -c "state" /mnt ##打印配额开启状态等信息
5.验证配额
su - user1
cd /mnt
dd if=/dev/zero of=user1.img bs=1M count=310
du -sh user1.img ##user1空间受限;最多300M
exit
xfs_quota -x -c "report -ugbh" /mnt ##查看用户、用户组配额情况
su - user2
cd /mnt
dd if=/dev/zero of=user2.img bs=1M count=610
du -sh user2.img ##user2配额受到用户组配额限制;此时只能500M
exit
xfs_quota -x -c "report -ugbh" /mnt ##查看此时用户用户组配额情况
##根据project限制
##prjquota与grpquota 两种配额不能同时满足;
1.配置开启用户、project配额
vim /etc/fstab
/dev/sdb3 /mnt xfs defaults,usrquota,prjquota 0 0
umount /mnt;mount -a;df -Th /dev/sdb3 ##重新挂载
##检查配额情况;显示用户配额开启;用户组配额关闭;目录配额开启
xfs_quota -x -c "state"
2.设置project配额
mkdir /mnt/proj01 ##创建待配额目录
echo "01:/mnt/proj01" >> /etc/projects ##设置项目ID和目录的对应关系
echo "project01:01" >> /etc/projid ##设置项目名称和项目ID的对应关系(项目名称和目录可以不同)
xfs_quota -x -c "project -s project01" ##初始化目录名称
xfs_quota -x -c "print" /mnt ##打印文件系统的配额设置
xfs_quota -x -c "report -pbih" /mnt ##查看目录的project配额情况
xfs_quota -x -c "limit -p bsoft=450M bhard=500M project01" /mnt ##设置project01项目配额限制
xfs_quota -x -c "timer -pu -b 14days" /mnt ##设置宽限时间
xfs_quota -x -c "report -pbih" /mnt ##查看目录配额情况
3.验证配置
cd /mnt/proj01
dd if=/dev/zero of=/mnt/proj01/proj01.img bs=1M count=300
##此时再次创建文件时,root用户也会出现没有空间;即成功设置任意目录配额;
dd if=/dev/zero of=/mnt/proj01/proj02.img bs=1M count=300
xfs_quota -x -c "report -pbih" /mnt ##查看project配额情况;发现使用到达上限500M
4.取消project配额配置
rm -f /etc/projects;rm -f /etc/projid ##删除项目配额相关文件
umount /mnt ##卸载
vi /etc/fstab ##重新设置成常规的挂载
/dev/sdb3 /mnt xfs defaults 0 0
mount -a;df -Th|grep sdb3 ##重新挂载后查看
##Quota的管理
##查看当前用户,目录的配额的情况
xfs_quota -x -c "report -pubih" /mnt
xfs_quota -x -c "disable -up" /mnt ##临时禁用Quota限制
xfs_quota -x -c "state" /mnt ##检查配额开启情况;发现已经全部OFF
##验证禁用是否成功
su - user1
cd /mnt
dd if=/dev/zero of=/mnt/user1.img bs=1M count=310
du -sh user1.img ##发现创建的文件大于配额设置的300M;说明此时配额确实已经失效
exit
xfs_quota -x -c "report -pubh" /mnt ##查阅Quota状态
rm -rf /mnt/user1.img
xfs_quota -x -c "enable -up" /mnt ##临时启动Quota限制
su - user1
cd /mnt
dd if=/dev/zero of=/mnt/user1.img bs=1M count=310 ##再次检查quota启动是否成功
du -sh user1.img ##只正常300M文件;启动成功
exit
rm -f user1.img
xfs_quota -x -c "off -up" /mnt ##完全关闭Quota限制
xfs_quota -x -c "enable -up" /mnt ##使用临时启动失败;说明已经完全关闭quota
umount /mnt; mount -a ##重新挂载;取消完全关闭
##删除Quota配置的限制(无法恢复project配额信息)
xfs_quota -x -c "off -up" /mnt ##先完全关闭配额
xfs_quota -x -c "remove -p" /mnt ##移除之前的配置信息
xfs_quota -x -c "report -puhb" /mnt ##查看配额;发现已经全部清除
umount /mnt; mount -a
xfs_quota -x -c "report -puhb" /mnt ##用户配额信息还在;project配额信息丢失
##利用软连接实现Quota
vim /etc/fstab ##启用/mnt分区的Quota功能
/dev/sdb3 /mnt xfs defaults,usrquota,grpquota 0 0
umount /mnt; mount -a
ln -s /mnt/mail /var/spool/mail ##创建软连接到Quota分区
##注意:
/根目录无法使用配额也不要尝试配额;因为涉及卸载磁盘的情况可能导致系统出现问题
二.ext系列格式文件系统配额管理
1.准备ext4格式的文件系统
umount /dev/sdb3;mkfs.ext4 /dev/sdb3; ##格式化sdb3为ext4格式
vi /etc/fstab ##添加挂载配置用户、用户组配额
/dev/sdb3 /mnt ext3 defaults,usrquota,grpquota 0 0
mount -a;df -Th|grep sdb3 ##重新挂载sdb3并查看挂载情况
##明显发现xfs文件系统格式的命令无法使用
xfs_quota -x -c "print"
xfs_quota -x -c "state" /dev/sdb3
xfs_quota -x -c "report -ugbih" /mnt
2.开启文件系统配额
##关闭Selinux
setenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
quotacheck -cvug /mnt ##检查用户组配额情况;提醒缺少文件
touch /mnt/{aquota.user,aquota.group} ##创建缺少的文件
quotacheck -cvug /mnt ##再次检查
quotaon -ugv /mnt ##开启配额;重启不会失效(不开启后面测试不会生效)
quotastats ##配额状态统计
3.设置用户、用户组配额
edquota -u user1 ##设置用户user1配额 200M
edquota -u user2 ##设置用户user2配额 300M
edquota -g gp1 ##设置用户组gp1配额 400M
edquota -t ##设置宽限时间
quota -v -u user1;quota -v -u user2;quota -v -g gp1 ##查看指定用户、用户组配额情况
4.配额测试
chmod 777 /mnt/;su - user1
cd /mnt
##user1到达配额200M上限
dd if=/dev/zero of=/mnt/user1.img bs=1M count=310
du -sh user1.img
su - user2
cd /mnt
##user2上限300M;但是达到用户组总共400M上限
dd if=/dev/zero of=/mnt/user2.img bs=1M count=310
du -sh user2.img
##查看此时用户用户组配额情况
quota -v -u user1;quota -v -u user2;quota -v -g gp1
5.注意:
##此处也经过实际测试发现ext4文件系统不能支持project配额;强行挂载会出现以下报错:
mount: wrong fs type, bad option, bad superblock on /dev/sdb3,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.