介绍
配额用于限制用户或组可以在文件系统上使用的磁盘空间量。 如果没有这样的限制,用户可能会填满机器的磁盘并给其他用户和服务带来问题。
在本教程中,我们将安装命令行工具来创建和检查磁盘配额,然后为示例用户设置配额。
先决条件
本教程假设您使用非 root、启用 sudo 的用户登录到 Debian 9 服务器,如 使用 Debian 9 的初始服务器设置中所述。
本教程中的技术通常应该适用于 Debian 以外的 Linux 发行版,但可能需要进行一些调整。
第 1 步 – 安装配额工具
要设置和检查配额,我们首先需要使用 apt
安装配额命令行工具。 让我们更新我们的包列表,然后安装包:
sudo apt update sudo apt install quota
您可以通过运行 quota
命令并询问其版本信息来验证工具是否已安装:
quota --version
OutputQuota utilities version 4.03. . . .
如果您的输出显示的版本号略有不同,这很好。
接下来我们将更新文件系统的 mount
选项以在我们的 root 文件系统上启用配额。
第 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
外观可能略有不同,但在大多数情况下,您将拥有一个代表所有磁盘空间的 /
或 root 文件系统.
通过添加如下选项更新指向根文件系统的行:
/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
文件中列出的选项之间没有空格。 如果在 ,
逗号后加一个空格,您将看到如下错误:
Outputmount: /etc/fstab: parse error at line 2 -- ignored
如果您在运行之前的 mount
命令后看到此消息,请重新打开 fstab
文件,更正所有错误,然后在继续之前重复 mount
命令。
我们可以通过查看 /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: 在执行配额的初始统计时禁用以只读方式重新挂载文件系统。 如果用户在此过程中主动保存文件,则将文件系统重新安装为只读将提供更准确的结果,但在此初始设置期间不是必需的。
如果您不需要启用基于用户或组的配额,您可以省略相应的 quotacheck
选项。
我们可以通过列出根目录来验证是否创建了适当的文件:
ls /
Outputaquota.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
如果您没有在 quotacheck
命令中包含 u
或 g
选项,则会丢失相应的文件。 现在我们准备开启配额系统:
sudo quotaon -v /
Output/dev/vda1 [/]: group quotas turned on /dev/vda1 [/]: user quotas turned on
我们的服务器现在正在监控和执行配额,但我们还没有设置任何! 接下来,我们将为单个用户设置磁盘配额。
第 4 步 – 为用户配置配额
我们可以通过多种方式为用户或组设置配额。 在这里,我们将介绍如何使用 edquota
和 setquota
命令设置配额。
使用 edquota
设置用户配额
我们使用 edquota
命令来 edit quotas。 让我们编辑我们的示例 sammy 用户的配额:
sudo edquota -u sammy
-u
选项指定这是我们将要编辑的 user
配额。 如果您想编辑组的配额,请使用 -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 的使用和限制。 设置基于 inode 的配额将限制用户可以创建的文件和目录数量,无论他们使用多少磁盘空间。 大多数人会想要基于块的配额,它专门限制磁盘空间的使用。 这就是我们要配置的。
注意: block 的概念定义不明确,可能会根据许多因素而改变,包括报告它们的命令行工具。 在 Debian 上设置配额的上下文中,假设 1 个块等于 1 KB 磁盘空间是相当安全的。
在上面的清单中,我们的用户 sammy 正在使用 24 个块,即 /dev/vda1
驱动器上的 24KB 空间。 soft
和 hard
限制均使用 0
值禁用。
每种配额类型都允许您设置 软限制 和 硬限制 。 当用户超过软限制时,他们超出配额,但不会立即阻止他们消耗更多空间或 inode。 取而代之的是一些回旋余地:默认情况下,用户有 7 天的时间将其磁盘使用量恢复到软限制之下。 在 7 天宽限期结束时,如果用户仍然超过软限制,它将被视为硬限制。 硬限制不太宽容:当您达到指定的硬限制时,所有新块或 inode 的创建都会立即停止。 这表现为磁盘空间完全不足:写入将失败,临时文件将无法创建,用户在执行常见任务时将开始看到警告和错误。
让我们更新我们的 sammy 用户,使其具有 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
OutputDisk 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 步中创建的配额文件的权限。 一种方法是创建一个 users
组,使这些文件可由 users
组读取,然后确保您的所有用户也都放在该组中。
要了解有关 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
OutputDisk 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
在本例中,我们正在为 /
root 文件系统生成报告。 -s
命令告诉 repquota
尽可能使用人类可读的数字。 列出了一些系统用户,默认情况下可能没有设置配额。 我们的用户 sammy 列在底部,使用量以及软硬限制。
另请注意 Block grace time: 7days
标注和 grace
列。 如果我们的用户超过了软限制,grace
列将显示他们还剩多少时间才能回到限制之下。
在下一步中,我们将更新配额系统的宽限期。
第 6 步 – 为超额配置宽限期
我们可以配置允许用户在软限制之上浮动的时间段。 我们使用 setquota
命令来做到这一点:
sudo setquota -t 864000 864000 /
上面的命令将块和 inode 宽限时间都设置为 864000 秒,即 10 天。 此设置适用于所有用户,即使您不使用两种类型的配额(阻止与限制),也必须提供这两个值。 索引节点)。
请注意,值 必须 以秒为单位指定。
再次运行 repquota
以检查更改是否生效:
sudo repquota -s /
OutputBlock grace time: 10days; Inode grace time: 10days . . .
更改应立即反映在 repquota
输出中。
结论
在本教程中,我们安装了 quota
命令行工具,为一个用户设置了基于块的配额,并生成了关于我们文件系统的配额使用情况的报告。
附录:常见配额相关错误信息
以下是您在设置和操作文件系统配额时可能会看到的一些常见错误。
quotaon Outputquotaon: cannot find //aquota.group on /dev/vda1 [/] quotaon: cannot find //aquota.user on /dev/vda1 [/]
如果您在运行初始 quotacheck
命令之前尝试打开配额(使用 quotaon
),您可能会看到此错误。 quotacheck
命令创建打开配额系统所需的 aquota
或 quota
文件。 有关详细信息,请参阅 步骤 3 。
quota Outputquota: 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
如果您运行 quota
并且您的当前用户没有读取文件系统配额文件的权限,您将看到此错误。 您(或您的系统管理员)将需要适当地调整文件权限,或者在运行需要访问配额文件的命令时使用 sudo
。
要了解有关 Linux 权限的更多信息,包括用户和组所有权,请阅读 Linux 权限简介