使用前提:内核必须支持磁盘配额 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个账号为一个用户组
使用脚本创建账号
[root@study ~]# vim addaccount.sh
#!/bin/bash
# 使用 script 来创建实验 quota 所需的环境
groupadd myquotagrp
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
useradd -g myquotagrp $username
echo "password" | passwd --stdin $username
done
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文件系统的命令对照表