磁盘配额(Quota)与进阶文件系统管理
1、磁盘配额(Quota)的应用与实践
1.1、什么是 Quota
quota 比较常见的使用情况:
- 针对 WWW 服务器,例如:每个人网页空间的容量限制!
- 针对 mail server 服务器
- 针对 FTP 服务器
上面是一些网络服务的设计,如果是针对 Linux 主机上面的设定,那么使用情况可以有以下这些:
- 限制一些群组所能使用的最大磁盘配额(使用群组限制);
- 限制某一用户的最大磁盘配额(使用用户限制);
- 限制某一目录的最大磁盘配额。
1.1.1、quota 的使用限制
- 在 ext 文件系统仅能针对整个文件系统;
- 核心必须支持 quota:
- 仅对一般用户有效;
- 若启用 SELinux,并非所有的目录均可设定 quota。
1.1.2、Quota 的规范设定项目
quota 针对 XFS 文件系统的限制项目主要分为:
- 分别针对用户、群组或个别目录;
- 容量限制或文件数量限制(block 或 inode);
- 限制 inode 数量:可以管理使用者可以建立的 “文件数量”;
- 限制 block 数量:管理用户磁盘容量的限制,较常见的方式。
- 柔性劝导与硬性规定(soft/hard);
- hard:表示使用者绝对不能超过这个限制值;
- soft:表示低于 soft 值时,可以正常使用;高于 soft 但低于 hard 时,警告,且给予一个宽限时间
- 会倒数计时的宽限时间(grace time)
整个 soft,hard,grace time 的相关性我们可以用下图表示:
1.2、一个 XFS 文件系统的 Quota 实践
使用一个范例来设计一下如何处理 Quota 的设定流程:
- 目的与账号:现在我想要让五个用户为一组,这五个人的账号分别是 myquota1,myquota2,myquota3,myquota4,myquota5,密码都是 password,且这五个账号的初始群组都是 myquotagrp。其他账号的属性均是默认值。
- 账号的磁盘容量限制值:我想要这五个账号都能够取得 300MBytes 的磁盘使用容量(hard),文件数量则不给予限制。此外,容量使用率超过 250MBytes,就会警告(soft)。
- 群组的限制(option 1):myquotagrp 这个群组最多仅能使用 1GBytes 的容量。即:如果 myquota1,myquota2,myquota3 都使用了 280MBytes 的容量,那么其他两个人最多只能使用(1000MB - 280*3 = 160MB)的磁盘容量了!
- 共享目录的限制(option 2):另一种设定方式,每个用户还是具有自己的独立容量限制,但这五个人的专题目录在 /home/myquota 这里,该目录请设定为其他人没有任何权限的共享目录空间,仅有 myquotagrp 群组拥有全部权限。且该目录最多能够接受 500MBytes 的容量。请注意,群组的限制与目录的限制无法同时存在!!!
- 宽限时间的限制:超过 soft 的值后,还有 14 天的宽限时间。
#1、先搞定账号相关属性
[root@li ~]# vim addaccount.sh
#!/bin/bash
groupadd myquotagrp
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
useradd -g myquotagrp $username
echo "password" | passwd --stdin $username
done
mkdir /home/myquota
chgrp myquotagrp /home/myquota
chmod 2770 /home/myquota
[root@li ~]# sh addaccount.sh
1.2.1、实践 Quota 流程1:文件系统的支持与观察
前面提到,要使用 Quota 必须要核心和文件系统支持才行!
[root@li ~]# df -hT /home
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /home
一定要写入 /etc/fstab 当中:
[root@li ~]# vim /etc/fstab
...
/dev/sdb1 /home xfs defaults,usrquota,grpquota 0 0 #注意 default 后面加了两个参数
[root@li ~]# umount /home
[root@li ~]# mount -a
[root@li ~]# mount | grep home
/dev/sdb1 on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
1.2.2、实践 Quota 流程2:观察 Quota 报告资料
[root@li ~]# xfs_quota -x -c "指令" [挂载点]
选项与参数:
-x:专家模式,后续才能加上 -c
-c:就是指令
指令:
print:单纯地列出目前直接内的文件系统参数资料
df:与原本的 df 一样
report:列出目前的 quota 项目,有 -ugr(user/group/project)及 -bi 等资料
state:说明目前支持 quota 的文件系统信息
#列出目前系统的文件系统,以及文件系统的 quota 挂载参数支持
[root@li ~]# xfs_quota -x -c "print"
Filesystem Pathname
/ /dev/mapper/centos_li-root
/boot /dev/sda2
/home /dev/sdb1 (uquota, gquota)
#列出目前 /home 这个支持 quota 的挂载点文件系统使用情况
[root@li ~]# xfs_quota -x -c "df -h" /home
Filesystem Size Used Avail Use% Pathname
/dev/sdb1 5.0G 32.2M 5.0G 1% /home
#列出目前 /home 的所有用户的 quota 限制值
[root@li ~]# xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/sdb1)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root 0 0 0 00 [------] 4 0 0 00 [------]
myquota1 12K 0 0 00 [------] 4 0 0 00 [------]
myquota2 12K 0 0 00 [------] 4 0 0 00 [------]
myquota3 12K 0 0 00 [------] 4 0 0 00 [------]
myquota4 12K 0 0 00 [------] 4 0 0 00 [------]
myquota5 12K 0 0 00 [------] 4 0 0 00 [------]
#block 代表容量限制,inode 代表文件数量限制
#列出目前支持的 quota 文件系统是否启动了 quota 功能
[root@li ~]# xfs_quota -x -c "state"
User quota state on /home (/dev/sdb1)
Accounting: ON #启动计算功能
Enforcement: ON #有实际的 quota 管制功能
Inode: #76 (2 blocks, 2 extents) #有激活 user 的限制能力
Group quota state on /home (/dev/sdb1)
Accounting: ON
Enforcement: ON
Inode: #77 (2 blocks, 2 extents) #有激活 group 的限制能力
Project quota state on /home (/dev/sdb1)
Accounting: OFF
Enforcement: OFF
Inode: #77 (2 blocks, 2 extents) #并没有激活 project 的限制能力
Blocks grace time: [7 days] #底下是 grace time 的项目
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]
1.2.3、实践 Quota 流程3:限制值设定方式
[root@li ~]# xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
[root@li ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays"
选项与参数:
limit:实际限制的项目,可以针对 user/group 类限制,限制的项目有:
b[soft/hard]:block 的 soft/hard 限制值,可以加单位
i[soft/hard]:inode 的 soft/hard 限制值
name:就是用户/群组的意思
timer:用来设定 grace time 的项目的
#1、设定好用户们的 block 限制值
[root@li ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota1" /home
[root@li ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota2" /home
[root@li ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota3" /home
[root@li ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota4" /home
[root@li ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota5" /home
[root@li ~]# xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/sdb1)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root 0 0 0 00 [------] 4 0 0 00 [------]
myquota1 12K 250M 300M 00 [------] 4 0 0 00 [------]
myquota2 12K 250M 300M 00 [------] 4 0 0 00 [------]
myquota3 12K 250M 300M 00 [------] 4 0 0 00 [------]
myquota4 12K 250M 300M 00 [------] 4 0 0 00 [------]
myquota5 12K 250M 300M 00 [------] 4 0 0 00 [------]
#2、设置好 myquotagrp 的 block 限制值
[root@li ~]# xfs_quota -x -c "limit -g bsoft=950M bhard=1G myquotagrp" /home
[root@li ~]# xfs_quota -x -c "report -gbih" /home
Group quota on /home (/dev/sdb1)
Blocks Inodes
Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root 0 0 0 00 [------] 3 0 0 00 [------]
myquotagrp 60K 950M 1G 00 [------] 21 0 0 00 [------]
#3、设置一下 grace time 为 14 天
[root@li ~]# xfs_quota -x -c "timer -u -b 14days" /home
[root@li ~]# xfs_quota -x -c "timer -g -b 14days" /home
[root@li ~]# xfs_quota -x -c "state" /home
...
Blocks grace time: [14 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]
#以 myquota 用户测试 quota 是否真的可以运行
[root@li ~]# su - myquota1
[myquota1@li ~]$ dd if=/dev/zero of=123.img bs=1M count=310
dd: 写入"123.img" 出错: 超出磁盘限额
记录了300+0 的读入
记录了299+0 的写出
313524224字节(314 MB)已复制,1.26264 秒,248 MB/秒
[myquota1@li ~]$ ll -h
总用量 299M
-rw-r--r--. 1 myquota1 myquotagrp 299M 8月 12 15:21 123.img
[myquota1@li ~]$ exit
登出
[root@li ~]# xfs_quota -x -c "report -ubh" /home
User quota on /home (/dev/sdb1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 0 0 0 00 [0 days]
myquota1 299.0M 250M 300M 00 [13 days]
myquota2 12K 250M 300M 00 [------]
myquota3 12K 250M 300M 00 [------]
myquota4 12K 250M 300M 00 [------]
myquota5 12K 250M 300M 00 [------]
1.2.3、实践 Quota 流程4:project 的限制(针对目录限制)(optional)
1、修改 /etc/fstab 内的文件系统支持参数
首先要把 grpquota 的参数取消,然后加入 prjquota ,并且卸载 /home 再重新挂载才行!
[root@li ~