Linux下使用quota工具为用户配置磁盘配额

介绍:

Linux是多用户多任务的操作系统,这就难免出现多个用户共享磁盘的情况,如何使多个用户公平的使用磁盘,就是磁盘配置要解决的问题。当然也可以在每创建一个用户的时候,将它的主目录建在一个单独的逻辑分区上,但是这样太麻烦了,也不灵活。
本文以针对用户的磁盘配额配置为例,演示磁盘配额的配置流程。

操作步骤:

1、安装quota软件包

[root@localhost ~]# yum install -y quota

2、给指定分区开启磁盘配额功能

编辑/etc/fstab(此文件负责记录文件系统信息)

[root@localhost ~]# vim /etc/fstab

如下图(看第一个分区),给想要开启磁盘配额的分区的挂载方式后面加上,usrquota,grpquota,其中usrquota是开启用户磁盘限额,grpquota是开启组磁盘限额。

保存并退出此文件后配置并未生效,还需要重新挂载磁盘。

[root@localhost ~]# mount -o remount /

3、扫描所有支持磁盘配额的分区并在其根目录生成相应的配置文件

[root@localhost ~]# quotacheck -avugm

上面的命令中,参数a 扫描/etc/fstab中所有支持磁盘配额的分区,v 显示指令执行过程,u 生成用户磁盘配额配置文件,g 生成组用户配置文件,m 强制扫描(有的时候不加m会报错,最好加上)。

记得把selinux关上再执行此命令。

执行完可以查看下分区挂载的目录中出没出现aquota.group(组磁盘配额配置文件)、aquota.user(用户磁盘配额配置文件)这两个配置文件,有就代表成功了。

当然这两个文件不一定都有,因为你有可能在执行命令的时候指定只生成用户磁盘配额配置文件,那就看不到组磁盘配额配置文件了。

4、为用户/组设置磁盘配额大小

[root@localhost ~]# edquota -u 接用户名                       //为用户配置磁盘配额
[root@localhost ~]# edquota -g 接组名                        //为组配置磁盘配额

命令执行后会自动使用vi/vim文本编辑器打开对应配置文件,下面是对此配置文件中各个区域的解释(顺序,从左到右)。

Filesystem 文件系统
blocks 已经使用的块数(块的单位为1K)
soft 块数软限制,0表示禁用
hard 块数硬限制,0表示禁用
inodes 已经创建的文件个数,如果后面有*表示已经超出软限制
soft 创建的文件个数的软限制,0表示禁用
hard 创建的文件个数的硬限制,0表示禁用

其中软限制的额度在达到后会弹出警告,如果用户在宽限期(默认7天)内还未删除超出部分的文件,软限制就会转为硬限制,阻止用户继续写入数据。

可以通过如下命令修改宽限期。

[root@localhost ~]# edquota -t

如上图可以看到,Block grace period(块的宽限期)对应值是7days(七天),Inode grace period(文件数量的宽限期)对应值也是7days(7天),这里直接修改对应值即可。上图中因为我的设备名称比较长,所以文字排版乱了,导致值和选项没有对应起来,但不影响其生效。

修改后保存并退出。

此外,所涉及到容量的配置部分的计算单位都是KB,比如上图中容量的hard值我设置成了20480,这个数值的单位就是KB,可以换算成20MB。

修改后,保存并退出。

如果有多个账户需要设定相同的磁盘配额则可以使用edquota搭配-p参数实现,例如:

[root@localhost ~]# edquota -p user1 user2                    将user1的磁盘配额配置复制给user2。

5、开启磁盘配额功能

quotaon 接需要开启磁盘配额功能的分区所挂载的目录,例如本实验中分区挂载到了根目录,则执行如下命令开启该分区的磁盘配额。

[root@localhost ~]# quotaon /

关闭磁盘配额:

[root@localhost ~]# quotaoff /

6、测试

切换为被设置了磁盘配额的用户身份,本实验中是user1。

[root@localhost ~]# su - user1

进入用户邮箱目录(本实验中/var/mail目录存在于根目录所挂载的磁盘上,所以根目录的磁盘限额对其有效)。

[root@localhost ~]# cd /var/mail

写1G的数据到user1的邮箱中。

[root@localhost mail]# dd if=/dev/zero of=user1 bs=1M count=1000

可以看到,弹出提示说超出磁盘限额了。

查看下user1用户的邮箱现在的大小,正好是20MB。

[root@localhost mail]# ll -h user1

最后记得清空邮箱中的数据哦。

[root@localhost mail]# echo '' > user1

sendmail设置用户邮箱大小

sendmail本身是没有限制用户邮箱大小这一功能的,但这并不妨碍我们“曲线救国”。
解决思路:
通过配置quota来限制用户所能使用的磁盘配额,以此来限制用户的邮箱大小。此配额仅会在开启配额限制的分区上生效,不影响用户在其他分区或磁盘上存储文件。
操作步骤:
在用户邮箱目录所处的磁盘上为指定用户开启磁盘配额即可,磁盘配额配置教程参考此篇文章:

Linux下使用quota工具为用户配置磁盘配额