Quota

在Linux系统中,由于是多人多任务的环境,所以经常会出现多人共同使用同一个硬盘空间的情况,那么如果其中几个少数用户占用了很大的硬盘空间,留给其他人的空间就小了,因此管理员可以使用Qouta来进行限制,这样就可以达到资源的更合理分配.

Quota的使用方向

1.限制某一群组所能使用的最大磁盘配额:
	举例来说,付费邮箱和免费邮箱的邮箱空间就不同.
2.限制某一用户的最大磁盘配额:
	甚至可以在限制群组的基础上,继续针对用户来进行限制,比如VIP等级,等级越高空间越大,是不是很熟悉?
3.限制某目录的最大配额:
	在旧版的Linux中,使用的预设文件系统为EXT家族,这种文件系统的配额主要是针对整个文件系统来做处理,所以大多针对挂载点来进行设计。新的xfs可以使用project模式,这样就能够针对个别目录来进行磁盘配额了.

Quota的使用限制

1.如上面所提到的,EXT家族的文件系统下,只能针对文件系统来进行配额限制.
2.Linux内核必须支持quota功能,如果使用的是CentOS7.X的内核,那么默认已经支持quota,如果是自己编译的内核,那么要注意
是否已经开启quota功能.
3.只针对一般用户有效,当然了,root是无所不能的,还想限制我?
4.若启用SELinux,并非所有目录都可以设置quota:
	新版本的CentOS都预设开启SELinux功能,该功能会加强某些细部的权限控制,由于担心管理员不小心操作设定有误,
	所以默认情况下,quota似乎只能针对/home设定而已,因此,在开启SELinux的情况下(如下所示,getenforce命令可以显示SELinux的状态,Enforcing为开启.)如果想要针对不同目录来设定,请使用SELinux而不是Quota.

在这里插入图片描述

Quota的规范设定项目

下面主要基于XFS filesystem来说明

1.分为针对群组,个人或目录(user,group,project)
2.容量限制或文件个数限制(block或inode):
	·限制inode使用量,可以限制使用者能够建立的文件数量.
	·限制block使用量,可以限制磁盘容量.
3.柔性与硬性规范:
	不论是针对inode还是block,都有两个限制值,分别是soft与hard.举例来说,若针对block来限制,那么如果hard设置为
500MBytes,而soft为400M这两个值的意义是:
	·hard:使用者的使用量上限绝不会超过设定值,拿上面的例子来说,如果磁盘使用量超过500Mbytes,那么系统会锁定此用户
对磁盘的使用权。
	·soft:表示在低于soft设定值时,可以正常使用,一旦超过soft值但低于hard值时,每次用户登入时,系统都会发出磁盘爆满的
警告信息,而且给与一个宽限期限(grace time).
4.宽限期限:
	当磁盘使用量处于soft和hard之间时存在,一般期限为7天,如果到期还未清理,那么soft的值(上面的例子400MBytes)就会变
成你的最大磁盘使用量,此时你的磁盘操作权限就会被锁,因而无权操作磁盘。

XFS文件系统下的Quota操作演示

演示流程:
1.目的与账号:
	让5个用户为一组,分配是myquota1,myquota2,myquota3,myquota4,myquota5密码均为passwd,且初始组均为
myquotagroup.
2.账号的磁盘容量限制:
	让这5个用户都能取得300Mbytes的磁盘使用量(hard),文件数量不予限制.此外,当磁盘使用量超过250Mbytes时,
就予以警告(soft).
3.群组的限额(option1):
	由于系统里还有其他用户存在,因此myquotagroup整个组最多能使用1GBytes的容量.也就是说,如果其中有4个用户都使用了
250Mbytes的容量,那么第5个用户就没得用了,这就是使用者与组同时设定会产生的后果.
4.共享目录限额(option2):
	另一种方式,每个用户还是具有自己独立的容量限制,但是这5个用户的共享项目在/home/myquota路径内,该路径的权限为2770
并且该目录的最大容量为2Gbytes.(由于群组的与目录的限制无法同时使用,所下面会按顺序分别进行演示)
5.宽限时间(grace time)的限制:
	最后,希望当磁盘使用量超过soft值后,有14天的宽限期限.

1.建立账号

vim addaccount.sh
#!/bin/bash
# to use shell scripts to show how to use the "quota"
groupadd myquotagroup
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
        id ${username} > /dev/null
        if [ $? -ne 0 ]; then
          useradd -g myquotagroup ${username}
          echo "passwd" | passwd --stdin ${username}
        fi
done
mkdir /demo/myquota
chgrp myquotagroup /demo/myquota
chmod 2777 /demo/myquota

2.文件系统的支持与观察

前面我们说过,想要使用Quota的话,必须要内核支持,那么假设我们的内核已经启用了Quota,接下来就是要来启动文件系统对Quota的支持了.
另外,请不要在跟路径下进行Quota的设置,因为这样文件系统会变得太复杂,下面我们以/demo为例.
(这里我是用fdisk新建了一个分区,并格式化为xfs文件系统,然后挂在到/demo路径,如果不会可自行搜索,或留言)

# 首先查看目录的文件系统
df -hT /demo

在这里插入图片描述
注意这里的最后一个字段Mounted on很关键,它体现的是你的分区的挂载点,如果为/根路径,那么请不要轻易的去设置Quota.
据说,在过去的版本中,可以使用mount -o remount来重新挂载quota的功能,不过xfs系统的quota功能似乎是在挂载之初就宣告了,因此无法用remount来重新启动quota,一定要写入/etc/fstab中,或者是在挂载当初来指定加入quota,否则不会生效,下面我们使用/etc/fstab中配置的方式.
在这里插入图片描述
defaults后加入usrquota和grpquota分别代表启用基于账号和用户组的quota.
这里quota限制的项目主要有三项:

·uquota/usrquota/quota:针对账号的设定
·gquota/grpquota:针对群组的设定
·pquota/prjquota:针对单一目录设定,但是蹦年与grpquota同时存在!

如下图所示,我们需要先卸载/demo,然后从新挂载,之后会多处一些内容.
在这里插入图片描述

3.观察Quota报告信息

所有quota相关的操作都是通过xfs_quota命令来实现的,所以整个命令选项很多很复杂,下面仅列出书中的,简单的几项内容.

xfs_quota -x -c "CMND" [挂载点]
选项/指令含义
-x专家模式,后面可以加-c来执行命令
-c与-x同时使用
print单纯的列出主机内的文件系统参数等信息
df与原本的df功能一样,可以加上-b(block)-i(inode)-h(单位humanreadable)等
# 查看/demo的文件系统,以及quota的挂载参数
xfs_quota -x -c "print"

在这里插入图片描述

# 查看/demo整个支持quota的挂载点的文件系统使用情况
xfs_quota -x -c "df -h" /demo

在这里插入图片描述

# 查看目前支持quota的文件系统是否启动了quota功能
xfs_quota -x -c "state"

在这里插入图片描述

4.限制值的设置方式

# quota限定的设置语法
# block和inode的限定
xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=M name" 
# grace time的限定
xfs_quota -x- c "timer [-ug] [-bir] Ndays"
limit:可以针对user/group来限制,限制的项目有
	  bsoft/bhard:block的soft与hard值,可以加单位,M,G等
	  isfot/ihard:inode的soft与hard值
	  name:用户/群组的名称
timer:用来设置grace time,同上,也是可以针对user/group,以及block/inode来设定

好了,下面我们来进行上面提到过的设置吧.

# 设定好用户的block限定值
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota1" /demo
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota2" /demo
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota3" /demo
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota4" /demo
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota5" /demo
xfs_quota -x -c "report -ubih" /demo

在这里插入图片描述

# 设置group的限定值
xfs_quota -x -c "limit -g bsoft=950M bhard=1G myquotagroup" /demo
xfs_quota -x -c "report -gbih" /demo

在这里插入图片描述

# 设置grace time为14天
xfs_quota -x -c "timer -u -b 14days" /demo
xfs_quota -x -c "state"

在这里插入图片描述

# 用myquota1用户来测试是否quota的限制真的有效
su - myquota1
cd /demo/myquota
dd if=/dev/zero of=text_quota.txt bs=1M count=310

在这里插入图片描述
要创建的文件有310M之大,超过了bhard的值(300M),所以如下图所示,grace time出现了
在这里插入图片描述
接下来我们在依次切换到myquota2和myquota3,分别使用上边的dd命令,创建310M大文件
在这里插入图片描述
好了,这次我们切换到myquota5,然后用dd命令创建一个200M的文件,因为用户的bsoft为250M,所以没有超过bsoft值,那么看看结果如何?
在这里插入图片描述
发现,咦?结果还是报超过磁盘的Quota限制,最终创建了一个124M的文件,那我们来算一算,这几个文件加起来有多大呢?300*3+124=1024M正好是1G,这个就是我们之前基于群组设置的quota的功效了.
这里同时也要提醒大家,当usrquota和grpquota同时使用时,就会出现上面的情况了。

5.project的限制(针对目录限制)

由于,grpquota和prjquota不能同时并存,所以,我们需要先取消grpquota,再加入prjquota.操作方法很简单,先卸载/demo,然后将/etc/fstab中的grpquota换成prjquota即可.
在这里插入图片描述
在这里插入图片描述
至此,发现Group quota已经是OFF状态,而Project quota已经是开启状态.
在这里插入图片描述

目录,项目名称与项目ID

目录的quota设定比较特殊,它需要指定项目名称和项目标识符才可以.而且还需要用到2个配置文件.
比如我们现在要对/demo/myquota目录来进行限制:

·给这个目录起一个项目名:myquotaproject
·给这个项目一个标识符:prjone

接下来:

# 指定标识符与目录的对应
# 注意这里的项目标识符为数字,开始我使用字母写的,结果后来发现限制不生效,而且显示的时候标识符是0,并不是我设置的字符串.
echo "23:/demo/myquota" >> /etc/projects
# 指定项目名与标识符的对应
echo "myquotaproject:23" >> /etc/projid
# 初始化项目
xfs_quota -x -c "project -s myquotaproject"

在这里插入图片描述

# 查看project路径的磁盘使用情况
xfs_quota -x -c "report -pbih" /demo

在这里插入图片描述

# 将目录的磁盘使用量限制到2G(hard),soft为(1G)
xfs_quota -x -c "limit -p bsoft=1G bhard=2G myquotaproject" /demo
# 由于有此前该目录已有1g的文件存在,因此,再创建一个大于1g的文件,即会受到限制并报错.
dd if=/dev/zero of=/demo/myquota/aaa2.txt bs=1M count=1100

在这里插入图片描述

6.其他命令
·disable:暂时取消quota的限制,但是实际还在计算quota,只是不进行限制.
·enable:与disable相反,恢复到正常的quota限制管理.
·off:完全关闭quota的功能,只有先umount再重新mount之后,才可以再次开启.
.remove:必须再off状态下才能够使用,remove可以移除quota的限定,例如要需要project的设定
		xfs_quota -x -c "off -up" /dmeo
		xfs_quota -x -c "remove -p" /demo
		值得注意的是,该命令会一次性移除所有的project设定,所以想要再次绑定,需要一个一个的加回去.
Logo

更多推荐