17.11. 文件系统配额

配额是操作系统的一个可选的功能, 它允许管理员以文件系统为单元, 限制分派给用户或组成员所使用的磁盘空间大小或是使用的总文件数量。 这经常被用于那些分时操作的系统上, 对于这些系统而言, 通常希望限制分派到每一个用户或组的资源总量, 从而可以防止某个用户占用所有可用的磁盘空间。

本章介绍如何配为UFS文件系统置磁盘配额。欲在ZFS上使用配额,请参阅第 19.4.8 节 “数据集、用户和组配额”

17.11.1. 启用磁盘配额

查看 FreeBSD 内核是否支持磁盘配额:

% sysctl kern.features.ufs_quota
kern.features.ufs_quota: 1

在本例中,1 表示可使用磁盘配额功能。如果为0,请将下面这行添加到内核配置文件中,添加方式请参考第 8 章 配置 FreeBSD 内核

options QUOTA

接下来,需要在 /etc/rc.conf 中启用磁盘配额。可以 通过添加下面这行来完成:

quota_enable="YES"

为了更好的控制配额时的启动,还有另外一个可配置的变量。通常 启动时,集成在每个文件系统上的配额会被配额检查程序 quotacheck(8) 自动检查。配额检查功能能够确保在配额数据库中 的数据正确地反映了文件系统的数 据情况。这是一个很耗时间的处理进程,它会影响系统的启动时间。如果 想跳过这一步,可以在文件 /etc/rc.conf 加入 下面这一行来达到目的:

check_quotas="NO"

最后,要编辑 /etc/fstab 文件,以在每一个 文件系统基础上启用磁盘配额。这是启用用户和组配额,或同时启用用户 和组配额的地方。要在一个文件系统上启用每个用户的配额,可以在 /etc/fstab 里添加 userquota 选项在要雇用配额文件的系统上。例如:

/dev/da1s2g   /home    ufs rw,userquota 1 2

同样的,要启用组配额,使用 groupquota 选项来代替 userquota 选项。要同时启用用户和组配额,可以这样做:

/dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

默认情况下,配额文件是存放在文件系统的以 quota.userquota.group 命名的根目录下。可以查看 fstab(5) 联机手册了解更多信息。 尽管联机手册 fstab(5) 提到, 可以为配额文件指定其他的位置, 但并不推荐这样做, 因为不同的配额工具并不一定遵循此规则。

到这儿,可以用新内核重新启动系统。 /etc/rc 将自动 运行适当的命令来创建/etc/fstab中启用的配额文件。

在通常的操作过程中,并不要求手动运行 quotacheck(8)quotaon(8), 或 quotaoff(8) 命令,然而可能需要阅读与他们的操作 相似的联机手册。

17.11.2. 设置配额限制

一旦您配置好了启用配额的系统,可以检查一下它们是真的有用。 可以这样做:

# quota -v

您应该能够看到一行当前正在使用的每个文件系统启用的磁盘配额 使用情况的摘要信息。

现在可以使用 edquota(8) 命令准备启用配额限制。

有几个有关如何强制限制用户或组可以分配到的磁盘空间大小的选项。 您可以限制磁盘存储块的配额, 或文件的数量, 甚至同时限制两者。 这些限制最终可分为两类: 硬限制和软限制。

硬性限制是一种不能越过的限制。 一旦用户达到了系统指定的硬性限制, 他就无法在对应的文件系统分配到更多的资源。 例如, 如果文件系统上分给用户的硬性限制是 500 KB, 而现在已经用掉了 490 KB, 那么这个用户最多还能再分配 10 KB 的空间。 换言之, 如果这时试图再分配 11 KB, 则会失败。

软性限制在一段时间内是允许越过的。 这段时间也称为宽限期, 其默认值是一周。 如果一个用户延缓时间太长的话,软限制将会变成硬限制, 而继续分配磁盘空间的操作将被拒绝。 当用户占用的空间回到软性限制值以下时, 宽限期将重新开始计算。

下面是一个运行 edquota(8) 时看到的例子。当 edquota(8) 命令被调用时,会被转移进 EDITOR 环境变量指派的编辑 器中,允许编辑配额限制。如果环境变量没有设置,默认在 vi 编辑器上进行。

# edquota -u test
Quotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
        inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
        inodes in use: 0, limits (soft = 50, hard = 60)

在每一个启用了磁盘配额的文件系统上,通常会看到两行。一行是 block 限制,另一行是 inode 限制。简单地改变要修改的配额限制的值。 例如,提高这个用户软限制的数值到 500 ,硬限制到 600,如下所示 :

/usr: kbytes in use: 65, limits (soft = 500, hard = 600)

当离开编辑器的时候,新的配额限制设置将会被保存。

有时,在 UIDs 的范围上设置配额限制是非常必要的。这可以通过在 edquota(8) 命令后面加上 -p 选项来完成。首先, 给用户分配所需要的配额限制,然后运行命令 edquota -p protouser startuid-enduid。例如,如果 用户 test 已经有了所需要的配额限制,下面的命令 可以被用来复制那些 UIDs 为10,000 到 19,999 的配额限制:

# edquota -p test 10000-19999

更多细节请参考 edquota(8)

17.11.3. 检查配额限制和磁盘使用

既可以使用 quota(1) 也可以使用 repquota(8) 命令来检查 配额限制和磁盘使用情况。 quota(1) 命令能够检查单个用户和组的配置 使用情况。只有超级用户才可以检查其它用户的配额和磁盘使用情况。 repquota(8) 命令可以用来了解所有配额和磁盘的使用情况。

通常, 如果用户没有使用文件系统上的磁盘空间, 就不会在 quota(1) 命令的输出中显示, 即使已经为那个用户指定了配额。 而使用 -v 选项则会显示它们。以下是对两个文件系统具有配额限制的用户的quota -v的示例输出。

Disk quotas for user test (uid 1002):
     Filesystem  usage    quota   limit   grace   files   quota   limit   grace
           /usr      65*     50      75   5days       7      50      60
       /usr/var       0      50      75               0      50      60

前面以 /usr 作为例子。 此用户目前已经比软限制 50 KB 超出了 15 KB, 还剩下 5 天的宽限期。 请注意, 星号 * 说明用户已经超出了其配额限制。

17.11.4. 通过 NFS 使用磁盘配额

配额能够在 NFS 服务器上被配额子系统强迫使用。在 NFS 客户端, rpc.rquotad(8) 命令可以使用 quota 信息用于 quota(1) 命令, 可以允许用户查看它们的 quota 统计信息。

NFS服务器上,删除/etc/inetd.conf中下列行前的#来启用rpc.rquotad

rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

现在重启 inetd

# service inetd restart

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.