介绍

配额用于限制用户或组可以在文件系统上使用的磁盘空间量。没有这些限制,用户可能会填满计算机的磁盘,并给其他用户和服务造成问题。

在本教程中,我们将安装命令行工具来创建和检查磁盘配额,然后为示例用户设置配额。

先决条件

本教程假定您已使用非root用户且启用了sudo的身份登录Debian 10服务器,如使用Debian 10进行初始服务器设置中所述。

本教程中的技术通常应在Debian以外的Linux发行版上工作,但可能需要一些调整。

步骤1 –安装配额工具

要设置和检查配额,我们首先需要使用apt安装配额命令行工具。让我们更新软件包列表,然后安装软件包:

sudo apt update
sudo apt install quota

您可以通过运行quota命令并询问其版本信息来验证工具是否已安装:

quota --version
Output
Quota utilities version 4.04. . . .

如果您的输出显示的版本号稍有不同,那就很好。

接下来,我们将更新文件系统的安装选项,以在根文件系统上启用配额。

步骤2 –更新文件系统挂载选项

要在特定文件系统上激活配额,我们需要使用一些与配额相关的选项来挂载它。为此,我们更新了/ etc / fstab配置文件中的文件系统条目。立即在您喜欢的文本编辑器中打开该文件:

sudo nano /etc/fstab

该文件的内容将类似于以下内容:

/etc/fstab
# /etc/fstab: static file system information.
UUID=06b2aae3-b525-4a4c-9549-0fc6045bd08e   / ext4    errors=remount-ro   0   1

该fstab文件来自虚拟服务器。台式机或笔记本电脑的fstab外观可能会略有不同,但是在大多数情况下,您将拥有一个/或表示所有磁盘空间的根文件系统。

通过添加以下选项来更新指向根文件系统的行:

/etc/fstab
# /etc/fstab: static file system information.
UUID=06b2aae3-b525-4a4c-9549-0fc6045bd08e   /   ext4    errors=remount-ro,usrquota,grpquota   0   1

您将新选项添加​​到任何现有选项的末尾,请确保将所有选项以逗号分隔且没有空格。上面的更改将使我们能够在文件系统上同时启用用户(usrquota)和基于组的(grpquota)配额。如果只需要其中一个,则可以忽略未使用的选项。

重新挂载文件系统以使新选项生效:

sudo mount -o remount /
注意:确保/ etc / fstab文件中列出的选项之间没有空格。如果在逗号后加空格,您将看到类似以下的错误:  输出安装:/ etc / fstab:第2行的解析错误-已忽略    如果在运行上一个安装命令后看到此消息,请重新打开fstab文件,更正所有错误,然后重复安装命令,然后再继续。

我们可以通过查看/ proc / mounts文件来验证是否使用了新选项来挂载文件系统。在这里,我们使用grep仅显示该文件中的根文件系统条目:

cat /proc/mounts | grep ' / '
Output
/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota,errors=remount-ro,data=ordered 0 0

请注意我们指定的两个选项。现在我们已经安装了工具并更新了文件系统选项,我们可以打开配额系统。

步骤3 –启用配额

在最终打开配额系统之前,我们需要手动运行一次quotacheck命令:

sudo quotacheck -ugm /

此命令创建文件/aquota.user和/aquota.group。这些文件包含有关文件系统的限制和使用情况的信息,在打开配额监视之前,它们必须存在。我们使用的quotacheck参数是:

  • u:指定应创建基于用户的配额文件
  • g:指示应创建基于组的配额文件
  • m:在执行配额的初始计数时,禁用将文件系统重新安装为只读。如果用户在此过程中积极保存文件,则将文件系统重新安装为只读将获得更准确的结果,但在此初始设置过程中则不必要。

如果您不需要启用基于用户或基于组的配额,则可以取消相应的配额检查选项。

我们可以通过列出根目录来验证是否创建了适当的文件:

ls /
Output
aquota.group bin dev home initrd.img.old lib64 media opt root sbin sys usr vmlinuz aquota.user boot etc initrd.img lib lost+found mnt proc run srv tmp var vmlinuz.old

如果您没有在定量检查命令中包含u或g选项,则相应的文件将丢失。现在,我们准备打开配额系统:

sudo quotaon -v /
Output
/dev/vda1 [/]: group quotas turned on /dev/vda1 [/]: user quotas turned on

我们的服务器现在正在监视和强制执行配额,但是我们还没有设置!接下来,我们将为单个用户设置磁盘配额。

步骤4 –为用户配置配额

我们可以通过几种方式为用户或组设置配额。在这里,我们将介绍如何使用edquota和setquota命令设置配额。

使用edquota设置用户配额

我们使用edquota命令来编辑quota。让我们编辑示例“ sammy”用户的配额:

sudo edquota -u sammy

-u选项指定这是我们将要编辑的用户配额。如果您想编辑组的配额,请在其位置使用-g选项。

这将在默认的文本编辑器中打开一个文件,类似于crontab -e如何打开一个临时文件供您编辑。该文件将类似于以下内容:

Disk quotas for user sammy (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        24          0          0          7        0        0

这列出了用户名和uid,已启用配额的文件系统以及基于块和inode的用法和限制。设置基于索引节点的配额将限制用户可以创建多少个文件和目录,而不管他们使用多少磁盘空间。大多数人会想要基于块的配额,这特别限制了磁盘空间的使用。这就是我们将要配置的。

注意:块的概念定义不充分,并且可能会根据许多因素(包括哪个命令行工具正在报告它们)而改变。在Debian上设置配额的前提下,假设1块等于1 KB磁盘空间是相当安全的。  在上面的清单中,我们的用户sammy在/ dev / vda1驱动器上使用了24个块或24KB的空间。软限制和硬限制都被禁用,值为0。

每种配额都允许您设置软限制和硬限制。当用户超过软限制时,他们将超过配额,但是不会立即阻止他们占用更多空间或索引节点。取而代之的是留有余地:默认情况下,用户有7天的时间将磁盘使用率恢复到软限制以下。在7天宽限期结束时,如果用户仍超出软限制,则将其视为硬限制。硬限制的宽容程度较小:达到指定的硬限制后,所有新块或inode的创建都将立即停止。这就像磁盘完全没有空间一样:写入将失败,临时文件将无法创建,并且用户在执行常见任务时将开始看到警告和错误。

让我们更新这个庞大的用户,使其具有100MB的软限制和110MB的硬限制的块配额:

Disk quotas for user sammy (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        24       100M       110M          7        0        0

保存并关闭文件。要检查新的配额,我们可以使用quota命令:

sudo quota -vs sammy
Output
Disk quotas for user sammy (uid 1001): Filesystem space quota limit grace files quota limit grace /dev/vda1 24K 100M 110M 7 0 0

该命令输出我们当前的配额状态,并显示我们的配额为100M,而我们的限制为110M。这分别对应于软限制和硬限制。

注意:如果您希望用户能够在没有sudo访问权限的情况下检查他们自己的配额,则需要授予他们读取我们在步骤4中创建的配额文件的权限。一种方法是让用户组,使用户组可以读取这些文件,然后确保所有用户也都位于组中。  要了解有关Linux权限(包括用户和组所有权)的更多信息,请阅读Linux权限简介。

使用setquota设置用户配额

与edquota不同,setquota只需一个命令即可更新用户的配额信息,而无需进行交互式编辑。我们将为基于块和基于inode的配额指定用户名以及软限制和硬限制,最后将文件系统应用到以下配额:

sudo setquota -u sammy 200M 220M 0 0 /

上面的命令会将sammy的基于块的配额限制加倍,达到200兆字节和220兆字节。基于inode的软限制和硬限制的0 0表示它们未设置。即使我们未设置任何基于inode的配额,这也是必需的。

再次使用quota命令检查我们的工作:

sudo quota -vs sammy
Output
Disk quotas for user sammy (uid 1001): Filesystem space quota limit grace files quota limit grace /dev/vda1 24K 200M 220M 7 0 0

现在我们已经设置了一些配额,让我们了解如何生成配额报告。

步骤5 –生成配额报告

要生成有关特定文件系统上所有用户当前配额使用情况的报告,请使用repquota命令:

sudo repquota -s /
Output
*** Report for user quotas on device /dev/vda1 Block grace time: 7days; Inode grace time: 7days Space limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 981M 0K 0K 35234 0 0 nobody -- 7664K 0K 0K 3 0 0 ntp -- 12K 0K 0K 3 0 0 _apt -- 8K 0K 0K 2 0 0 debian -- 16K 0K 0K 4 0 0 sammy -- 24K 200M 220M 7 0 0

在这种情况下,我们正在为/根文件系统生成报告。 -s命令告诉repquota在可能的情况下使用人类可读的数字。列出了一些系统用户,默认情况下可能未设置配额。我们的用户sammy列在底部,其中使用了数量以及软限制和硬限制。

还要注意“阻止宽限时间:7天”标注,以及“宽限度”列。如果我们的用户超出了软限制,则宽限度列将显示他们还剩下多少时间才能回到该限制之下。

在下一步中,我们将更新配额系统的宽限期。

步骤6 –配置超额宽限期

我们可以配置允许用户浮动超过软限制的时间段。我们使用setquota命令来这样做:

sudo setquota -t 864000 864000 /

上面的命令将块和节点的宽限时间都设置为864000秒,即10天。此设置适用于所有用户,即使您不同时使用两种配额(块对inode),也必须提供两个值。

请注意,必须以秒为单位指定值。

再次运行repquota以检查更改是否生效:

sudo repquota -s /
Output
Block grace time: 10days; Inode grace time: 10days . . .

更改应立即反映在repquota输出中。

结论

在本教程中,我们安装了配额命令行工具,为一个用户设置了基于块的配额,并生成了有关我们文件系统配额使用情况的报告。

附录:常见的与配额有关的错误消息

以下是设置和操作文件系统配额时可能会看到的一些常见错误。

quotaon Output
quotaon: cannot find //aquota.group on /dev/vda1 [/] quotaon: cannot find //aquota.user on /dev/vda1 [/]

如果您在运行初始quotacheck命令之前尝试打开配额(使用quotaon),则可能会看到此错误。 quotacheck命令创建打开配额系统所需的aquota或配额文件。有关更多信息,请参见步骤3。

quota Output
quota: Cannot open quotafile //aquota.user: Permission denied quota: Cannot open quotafile //aquota.user: Permission denied quota: Cannot open quotafile //quota.user: No such file or directory

如果您运行配额并且当前用户无权读取文件系统的配额文件,则会出现此错误。您(或您的系统管理员)将需要适当地调整文件许可权,或者在运行需要访问配额文件的命令时使用sudo。

要了解有关Linux权限(包括用户和组所有权)的更多信息,请阅读Linux权限简介。