网站搜索

如何在 Ubuntu 上设置文件系统(磁盘)配额


文件系统配额是 Linux 内核中的标准内置功能。配额确定文件应具有支持用户活动的空间量。磁盘配额还限制用户可以在系统上创建的文件数量。

支持配额系统的文件系统包括 xfs、ext2、ext4 和 ext3 等。配额分配特定于文件系统和每个用户。本文包含您需要了解的有关在多用户 Ubuntu 环境中使用配额文件系统的所有信息。

这里假设您正在使用 Ubuntu 系统,并且用户 (howtoing) 具有 sudo 权限。只要您使用正确的实现技术,这里分享的想法就可以适用于任何 Linux 发行版。

第1步:在Ubuntu中安装配额

要使配额准备就绪并可用,请使用 apt 命令安装 quota 命令行工具,但在此之前,您需要更新系统软件包。

sudo apt update

现在使用以下命令在 Ubuntu 上安装 quota 软件包。

sudo apt install quota

Y,然后按ENTER 开始安装过程。

通过运行以下命令确认安装版本。您的版本号可能与下面看到的不同。

quota --version

步骤2:安装配额内核模块

对于运行基于云的虚拟系统的用户来说,默认的 Ubuntu 安装可能缺少支持使用配额的内核模块。您必须确认使用查找工具并确保 quota_v1quota_v2 这两个模块位于 /lib/modules 目录内。

find /lib/modules/`uname -r` -type f -name '*quota_v*.ko*'

这应该是上述命令的结果。

只要存在两个模块,就不必担心内核版本。如果未找到,请使用以下命令安装配额内核模块,如图所示。

sudo apt install linux-image-extra-virtual

您将获得实施配额所需的正确模块。

步骤 3:更新文件系统挂载选项

要使配额在特定系统上处于活动状态,必须使用相关配额选项进行安装。您可以通过更新 /etc/fstab 文件中的文件系统条目来执行此操作。

sudo nano /etc/fstab

您应该准备好适当地编辑该文件。 fstab 文件和桌面文件之间的区别在于 / 或根文件系统表示整个磁盘空间的方式不同。使用以下行替换指向根系统的行 (/)

LABEL=cloudimg-rootfs   /        ext4   usrquota,grpquota        0 0

这些行将发生更改,以允许访问 userquotagrpquota。您可以保留不属于最终配置的部分。如果 fstab 有一些选项,请在行末尾添加新选项。在执行附加操作时,用逗号分隔新项目,但它们之间没有空格。

重新挂载文件系统以使更改生效。

sudo mount -o remount /

注意:确认/etc/fstab中的选项之间不存在空格,以避免此类错误。

mount: /etc/fstab: parse error

/proc/mounts 文件中挂载文件系统时使用新选项的验证是通过 grep 完成的。该命令显示文件中的根文件系统条目。

sudo cat /proc/mounts | grep ' / '

从输出中,您可以看到我们设置的两个选项。是时候开启配额制度了。

步骤 4:在 Ubuntu 上启用磁盘配额

首先,您必须运行quotacheck 命令。

sudo quotacheck -ugm /

该命令创建两个文件:配额用户和配额组,其中包含有关文件系统的限制和使用情况的信息。在开始使用配额之前,这些文件必须存在。

这是参数的定义:

  • -u:表示将创建一个基于用户的配额文件。
  • -g:表示将创建基于组的配额文件。
  • -m:禁用以只读方式重新挂载文件系统,同时在用户不断保存文件的环境中提供准确的结果。在设置过程中,m 选项不是必需的。

当不需要启用基于用户或组的配额使用时,无需运行quotacheck选项。通过使用 ls 命令列出根目录来确认这一点。

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

如果quotacheck命令中不包含ug参数,相应的文件将会丢失。

现在我们准备使用以下命令在根 (/) 文件系统上打开配额。

sudo quotaon -v /

步骤 5:为单个用户配置配额

我们可以使用edquotasetquota命令为用户或组设置它们。

使用edquota

edquota 命令编辑配额,例如,我们可以使用以下命令编辑属于 howtoing 用户的配额:

sudo edquota -u tecmint

使用 -u 选项指定配额属于某个用户。如果您需要编辑属于某个组的配额,请使用 -g 选项。该命令将使用您选择的文本编辑器打开文件。

输出列出了用户名、uid、具有活动配额的文件系统以及块和 inode 的使用情况。基于 inode 的配额限制了用户可以创建的文件和目录的数量,无论他们在磁盘上使用的大小如何。大多数管理员更喜欢控制磁盘空间的基于块配额。

注意:块的使用并没有显示它如何根据不同的因素(例如报告它们的命令行工具)而改变。在 Ubuntu 的上下文配额中,我们可以假设单个块相当于 1 KB 的磁盘空间。

使用上面的命令行,用户将使用 2032 个块,这与 /dev/sda1 上的 2032KB 空间相同。 0 值禁用软限制和硬限制。

每个配额集都允许设置软限制和硬限制。超过软限制的用户可能会超出其配额,但不会被禁止使用更多空间或索引节点。在这种情况下,用户有 7 天的时间来兑换其软限制空间,否则将难以保存或创建文件。

硬限制意味着新块或索引节点的创建在达到限制时就会停止。用户会报告在执行常规任务时看到警告或错误。

我们可以将howtoing的块配额更新为软限制为100MB和硬限制为110MB

编辑后,关闭文件并使用quota 命令检查新的用户配额限制设置。

sudo quota -vs tecmint

注意:为了让您的用户有机会在不调用 sudo 命令的情况下分析其配额,必须授予他们在执行期间读取配额文件的权限。第四步的创建阶段。一种简单的方法是创建用户组并授予该组访问权限,以便您可以向其中添加用户。

使用设置配额

setquota 使用单个命令更新配额信息,无需任何交互式设置。该命令需要用户名以及块和索引节点将使用的软限制和硬限制的设置。您还需要声明配额将使用的文件系统。

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

该命令将基于块的配额限制加倍至 200 兆字节和 220 兆字节。两个0 0表示没有设置硬限制和软限制,即使不需要设置基于inode的配额也是一个要求。

像往常一样,使用配额命令来验证您的进度。

sudo quota -vs tecmint

第 6 步:生成配额报告

生成配额报告必须表明所有用户的使用情况。使用命令repquota

sudo repquota -s /

上面的输出是关于 / 根文件系统的报告。 -s 指示 repquota 以人类可读的格式给出结果。

默认的块宽限时间为 7 天。宽限列会提醒用户在拒绝访问资源磁盘之前的天数。

步骤 7:设置配置宽限期

宽限期是用户获得在默认时间之外工作的许可的时间。

sudo setquota -t 864000 864000 /

该命令指示块和 inode 有一个 864000 秒的宽限期,相当于 10 天。该设置将影响所有用户,因此,即使不使用块和索引节点,也需要设置值。时间值必须以秒为单位。

使用以下命令确认更改并查看它们是否生效:

sudo repquota -s /

常见错误消息

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

如果您在尝试使用命令 quotacheck 检查配额状态之前尝试使用命令 qoutaon 打开配额,则上述错误很常见。

quotaon: using //aquota.group on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.
quotaon: using //aquota.user on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.

此错误告诉管理员内核不支持它,或者您的计算机上可能有错误的版本(我们有quota_v1quota_v2)。对于 Ubuntu,此类错误在基于云的虚拟服务器上很常见。

通过使用 apt 命令安装 Linux-image-extra-virtual 软件包来修复错误。

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 即可。

结论

在文章的顶部,我们从quota命令行工具和内核版本的验证开始,进一步解释了如何为单个用户设置基于块的配额以及如何设置生成有关文件系统配额使用情况的报告。

本文还介绍了常见错误以及如何通过使用额外的软件包或验证系统上的内核版本来避免这些错误。