通过quota对Linux磁盘进行配额。

20190130-1
@ 该文章依据网络博客修改,原文出处已无法找到。仅用于本人服务器管理。

一 配额概念

设置用户和组配额的分配量对磁盘配额的限制一般是从一个用户占用磁盘大小和所有文件的数量两个方面来进行的。设置磁盘配额时,“某用户在系统中共计只能使用50MB磁盘空间”,这样的限制要求是无法实现的;只能设置“某用户在/home分区能使用30MB,在/backup分区能使用20MB”。磁盘配额的设置单位是分区,针对分区启用配额限制功能后才可以对用户设置,而不理会用户文件放在该文件系统中的哪个目录中。我们先了解一下磁盘配额的两个基本概念:软限制和硬限制。

  • 软限制:一个用户在一定时间范围内(默认为一周,可以使用命令“edquota-t”重新设置,时间单位可以为天、小时、分钟、秒)超过其限制的额度,在不超出硬限制的范围内可以继续使用空间,系统会发出警告(警告信息设置文件为“/etc/warnquota.conf”),但如果用户达到时间期限仍未释放空间到限制的额度下,系统将不再允许该用户使用更多的空间。
  • 硬限制:一个用户可拥有的磁盘空间或文件的绝对数量,绝对不允许超过这个限制。

二 配额步骤

  • 启动分区配额功能
  • 生成配额信息文件
  • 设置用户和组配额
  • 启动磁盘配额服务

1. 启动分区配额功能

用管理员身份登录系统,编辑系统配置文件/etc/fstab中相应分区(以/home分区为例)的设置选项,若开启用户配额添加选项“usrquota”,用户组配额添加选项“grpquota”,中间以逗号隔开。
LABEL=/home /home ext3 defaults,usrquota 1 2
用户组配额用以限定一组用户共计可以使用的空间数,一般应用较少,本例只启动用户配额。
分区配额功能生效需要重新启动系统,或者简单一点,重新挂载此分区,让其新加参数生效:
mount -o remount /home

2. 生成配额信息文件

检测分区中当前用户空间使用情况,并生成保存配额信息的数据库文件:

quotacheck -F vfsv0 -uv /home (生成符合系统要求的 aquota.usr)
quotacheck -g /home (生成符合系统要求的aquota.group)
  • 选项“-Fvfsv0”指定磁盘配额功能实现的软件版本,当前流行的Linux版本基本都为Quota 2.0 ,可以使用命令“manquotacheck”查看到此信息,不必像绝大多数的文章和书籍资料中手工“touch”创建。
  • 选项“-u”指定生成用户配额信息文件“aquota.user”(Quota1.0为quota.user),如果设置了用户组配额则添加选项“-g”生成配额信息文件“aquota.group”,选项“-v”表示执行时显示详细信息。执行结果中自动报告了分区/home的空间使用情况,并自动生成了配额信息文件“aquota.user”,其权限为600。
  • 若较老的Linux系统(Quota 1.0)要升级到Quota 2.0,可以使用命令“convertquota”将老格式文件“quota.user”和“quota.group”转换为新格式“aquota.user”和“aquota.group”。

3. 设置用户和组配额

使用edquota命令为每个用户设置磁盘配额,如下例为用户Sam设置配额:

$ edquota Sam

系统会调用Vim/Vi生成一临时文件,编辑方法与vi完全相同,以ZZ或:wq命令退出。在此文件中可对用户Sam配额信息进行编辑,默认文件内容如下:

Disk quotas for user Sam (uid 500):
Filesystem    blocks      soft      hard    inodes    soft    hard
/dev/hda3       5         0        0        5       0      0
  • 其中“Filesystem”字段表明使用磁盘配额的分区对应的设备名称,“blocks”和“inodes”分别表明了用户当前已经使用的磁盘空间(以KB为单位)和建立的文件数(此限制一般较少应用),“soft”和“hard”即为前文提及的软限制和硬限制(大多数应用不设置软限制)。
  • 编辑此文件,把软、硬限制设置到合适的数值,保存退出,可以看到“aquota.user”文件的大小改变,说明用户的配额已经储存。设置组配额可以使用命令“edquota-g 组名”。

复制配额设置

设置大量用户的磁盘配额,若分配给用户的配额相同,可以使用命令edquota的“-p”选项在用户之间复制配额设置,可用下面的命令给这些用户赋予与protuser相同的限额:

$ edquota [-u] -p protuser user1 user2user3
$ edquota -g -p protgroup group1 group2 group3

例如将用户Sam的配额信息复制给Helen和Jack:

$edquota -p Sam Helen Jack

此外,也可以使用命令“setquota”来设置磁盘配额

,如:

setquota Mary 0 20480 0 0/home

这样可以限定用户Mary可以在/home分区使用空间20MB 。

4. 启动磁盘配额服务

quotaon /home

若关闭配额服务则使用命令“quotaoff”。
分区的磁盘配额功能设置后,每次开机会自动加载并启动服务,务须另行在启动脚本中设置。

5. 查看磁盘配额

用户查看自己当前的配额信息,可使用命令“quota”:

 $ quota
Disk quotas for user Sam (uid 500):
Filesystem blocks  quota  limit  grace  files  quota  limit   grace
/dev/hda3   1022    0   1024           6     0     0    

其中“quota”字段为软限制,“limit”字段为硬限制,“grace”字段为软限制达到后宽限期(前文“edquota-t”设定的时间)。
若管理员查看各个用户的磁盘配额使用情况,可以使用命令“repquota”:

$ repquota /home
*** Report for user quotas on device/dev/hda3
Block grace time: 7days; Inode grace time: 7days
Blocklimits               File limits
User       used       soft       hard grace       used       soft       hard  grace
-----------------------------------------------------------------
root --       10545       0       0       4       0       0     
sam --               1024       0       1024       8       0       0     
helen --       5