本小节先进行用户和用户组配额实验,下一小节再来尝试目录配额实验。首先来规划一下我们的实验。
● 由于磁盘配额是用来限制普通用户在分区上所使用的磁盘容量和文件个数的,所以需要指定一个分区。那么,我们手工建立一个容量为5GB的/dev/sdb1分区,把它挂载到/disk目录当中。不建议直接用根目录来做磁盘配额,因为这样会使文件系统变得无比复杂。
● 建立需要被限制的用户和用户组。假设需要限制user1、user2和user3用户,这3个用户均属于tg用户组。
● tg用户组的磁盘容量硬限制为500MB,软限制为450MB,文件个数没有限制。user1用户为了便于测试,设定磁盘容量硬限制为50MB,软限制为40MB;文件个数硬限制为10个,软限制为8个。user2和user3用户的磁盘容量硬限制为300MB,软限制为250MB,文件个数没有限制。
● 可以发现,user1、user2和user3用户加起来的磁盘容量硬限制为650MB,超过了tg用户组的磁盘容量硬限制500MB。这样一来,某个用户可能还达不到自己的用户限制,而在达到用户组限制时就不能再写入数据了。也就是说,如果用户限制和用户组限制同时存在,那么,哪个限制更小,哪个限制优先生效。
● 系统宽限时间为8天。
规划好了实验,下面开始进行磁盘配额的设置。
我们按照实验规划,划分容量为5GB的/dev/sdb1分区(划分分区的过程在《细说Linux基础知识》中已经详细介绍过,在这里直接看结果),并将它挂载到/disk目录中,然后查看这个分区。命令如下:
命令如下:
建立user1、user2和user3用户,并把它们加入tg用户组中。
注意: 如果要想测试用户组配额,那么tg用户组必须是user1、user2和user3用户的初始组,用户组配额才能生效;否则用户组配额不起作用。
在CentOS 6.x以前的系统中,可以通过“mount -o remount,usrquota,grpquota /disk”命令来临时开启分区的磁盘配额功能。但是,在CentOS 7.x中,磁盘配额功能是在挂载的时候就生效的,不能再通过remount选项来临时开启磁盘配额功能。只能通过先修改/etc/fstab文件开启磁盘配额功能,然后卸载分区,再重新挂载分区的方式来开启磁盘配额功能。命令如下:
注意: 这里加入的是“usrquota”和“grpquota”这样两个不常见的缩写单词,中间用逗号隔开。在修改/etc/fstab文件时一定要小心,因为一旦改错,就有可能导致系统无法正常启动。
解释一下/etc/mtab和/etc/fstab这两个文件的区别:在/etc/mtab文件中记录的是操作系统已经挂载的文件系统(分区),包括操作系统建立的虚拟文件系统;而在/etc/fstab文件中记录的是操作系统准备挂载的文件系统,也就是在下次启动后系统会挂载的文件系统,所以,如果磁盘配额功能是永久生效的,就应该修改这个文件。
在开启分区的磁盘配额功能之后,还需要卸载分区,再重新挂载分区。命令如下:
在CentOS 7.x中,如果按照旧版本的方式,使用quotacheck命令来生成配额文件,就会报错。我们来试试:
注意: 这里的报错英文原意是“找不到检测的文件系统或文件系统没有挂载磁盘配额选项”。很多读者以为引起这个报错的原因是分区没有开启磁盘配额功能,或者内核没有开启磁盘配额模块。其实都不是,真实的原因是XFS文件系统不再使用quotacheck命令来进行磁盘配额,而需要使用xfs_quota命令来进行磁盘配额。
下面介绍xfs_quota命令。这个命令比较复杂,先来看看通用的命令格式。
xfs_quota命令确实比较复杂,我们逐个命令来使用。先来看看如何设置用户与用户组配额,需要使用xfs_quota命令中的limit命令。
知道了xfs_quota命令中limit命令的格式,就可以按照实验规划来设置我们的配额实验了。先设置用户配额。
再设置用户组配额。
在xfs_quota命令中,先来看一下用于查看的命令的常见选项。
例子1:查看用户配额的限制值。
这里查看的信息分为Blocks和Inodes两部分,每部分都包含4项内容。
● Used:当前用户已经占用的block/inode。
● Soft:block/inode的软限制。
● Hard:block/inode的硬限制。
● Warn/Grace:系统宽限时间。
例子2:查看用户组配额的限制值。
要想查看用户组配额的限制值,只要把“-u”选项替换为“-g”选项即可。
例子3:查看分区的配额开启状态。
例子4:查看分区的挂载参数。
例子5:查看磁盘配额分区的空间使用情况。
这个命令的作用和系统命令df的作用基本类似,而且也支持“-h”选项。
设置宽限时间需要使用xfs_quota命令中的timer命令。命令格式如下:
宽限时间默认是7天,一般不需要修改。如果真要修改,则可以使用如下命令:
磁盘配额设置成功后,需要测试一下,看看是否生效。首先需要修改/disk分区的权限,让user1、user2和user3用户对这个分区拥有写入权限。命令如下:
● 测试user1用户的磁盘配额限制。
先尝试一下文件个数限制,看看是否被限制。针对user1用户,磁盘容量硬限制为50MB,软限制为40MB;文件个数硬限制为10个,软限制为8个。验证一下:
既然文件个数限制已经生效,那么我们来查看一下。命令如下:
再测试针对user1用户的磁盘容量限制是否生效。命令如下:
既然磁盘容量限制已经生效,那么我们来查看一下。命令如下:
● 测试其他用户的磁盘配额限制。
针对tg用户组的磁盘容量硬限制为500MB,软限制为450MB,文件个数没有限制。针对user2和user3用户的磁盘容量硬限制为300MB,软限制为250MB,文件个数没有限制。这样一来,针对user1+user2+user3用户的磁盘容量硬限制为650MB,超出了针对tg用户组的磁盘容量硬限制500MB。
我们来看看会出现什么情况。先测试针对user2用户的磁盘容量限制。命令如下:
再查看组配额限制。命令如下:
接下来看看user3用户是否可以写满300MB。如果user3用户只能写入150MB,就证明组配额已经生效。另外,组配额不是平均分配空间的,而采用的是先到先得的原则。我们试试:
最终test3.txt文件的大小只有150MB,证明组配额确实生效了。查看一下组配额的情况,命令如下:
如果需要关闭磁盘配额功能,或者需要删除配额选项,则可以使用以下命令。
如果需要暂时关闭磁盘配额功能,但是不清除配额的各项限制,则可以直接使用disable命令关闭,也可以使用enable命令重新开启。
先使用disable命令关闭磁盘配额功能,再使用enable命令重新开启,是不影响配额限制的。查看一下,配额限制依然正常。
如果想要删除配额限制,就需要先使用off命令彻底关闭磁盘配额功能,再使用remove命令删除配额限制。我们试试: