如何在 Ubuntu 20.04 上设置文件系统配额

介绍

配额是用来限制用户或组在文件系统上可以使用的磁盘空间的数量,如果没有这些限制,用户可能会填充机器的磁盘,并给其他用户和服务带来问题。

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

前提条件

步骤 1 – 安装配额工具

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

1sudo apt update
2sudo apt install quota

您可以通过运行配额命令并请求其版本信息来验证工具的安装:

1quota --version
1[secondary_label Output]
2Quota utilities version 4.05.
3. . .

如果您的输出显示略有不同的版本号是好的。

接下来,确保您有适当的内核模块来监控配额。

步骤 2 – 安装 Quota 内核模块

如果您是在基于云的虚拟服务器上,您的默认 Ubuntu Linux 安装可能没有支持配额管理所需的内核模块. 要检查,您将使用查找/lib/modules/...目录中搜索quota_v1quota_v2模块:

1find /lib/modules/ -type f -name '*quota_v*.ko*'
1[secondary_label Output]
2/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v2.ko
3/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v1.ko

记住你的内核版本 - 突出在上面的文件路径 - 因为你会在以后的步骤中需要它. 它可能会有所不同,但只要两个模块列出,你都可以设置,可以跳过这个步骤的其余部分。

如果您没有从上述命令中获取输出,请安装linux-image-extra-virtual包:

1sudo apt install linux-image-extra-virtual

这将提供实现配额所需的内核模块,重新运行以前的查找命令,以验证安装成功。

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

步骤 3 – 更新文件系统安装选项

要在特定文件系统上激活配额,您需要将其安装在某些指定的配额相关的选项中。您可以通过在 /etc/fstab 配置文件中更新文件系统的条目来完成此操作。

1sudo nano /etc/fstab

此檔案的內容將類似於以下:

1[label /etc/fstab]
2LABEL=cloudimg-rootfs   /        ext4 defaults 0 0
3LABEL=UEFI      /boot/efi vfat defaults 0 0

桌面或笔记本电脑可能会有一个略有不同的fstab,但在大多数情况下,您将有一个代表您的整个磁盘空间的/root文件系统。

突出的行表示安装设备的名称、安装位置、文件系统类型以及使用的安装选项. 第一个零表示不会进行备份,第二个零表示不会在启动时进行错误检查。

更新指向根文件系统的行,以以下突出选项取代默认选项:

1[label /etc/fstab]
2LABEL=cloudimg-rootfs   /        ext4 usrquota,grpquota 0 0
3. . .

这种变化将允许我们在文件系统上启用用户(‘usrquota’)和基于群组(‘grpquota’)的配额。如果您只需要一个或另一个,您可以放弃未使用的选项。

移除文件系统以使新选项生效:

1sudo mount -o remount /

在这里,使用-o旗通过remount选项。

<$>[note] 注: 请确保在您的 /etc/fstab 文件中列出的选项之间没有间隙。

1[secondary_label Output]
2mount: /etc/fstab: parse error

如果您在运行之前的mount命令后看到此消息,请重新打开fstab文件,修复任何错误,并重复mount命令,然后继续。

您可以通过查看 /proc/mounts 文件来验证新选项是否被用来安装文件系统。

1cat /proc/mounts | grep ' / '
1[secondary_label Output]
2/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota 0 0

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

步骤 4 – 允许配额

在最后打开配额系统之前,您需要手动运行配额检查命令一次:

1sudo quotacheck -ugm /

此命令会创建文件 /aquota.user/aquota.group. 这些文件包含有关文件系统的限制和使用情况的信息,并且必须在启用配额监控之前存在。

  • u: 指定要创建基于用户的配额文件
  • g: 表示应该创建基于组的配额文件
  • m: 在执行初始配额计数时禁用将文件系统作为仅读的远程保存。

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

您可以通过列出根目录来验证是否创建了相应的文件:

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

如果您没有在quotacheck命令中包含ug选项,则相应的文件将丢失。

接下来,您将不得不将配额模块添加到 Linux 内核中,或者您可以重新启动服务器以完成相同的任务,否则您可以手动添加这些模块,以您在 [步骤 2] 中找到的版本代替所突出的内核版本(#step-2-installing-the-quota-kernel-module):

1sudo modprobe quota_v1 -S 5.4.0-99-generic
2sudo modprobe quota_v2 -S 5.4.0-99-generic

现在你已经准备好启动配额制度了:

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

您的服务器现在正在监控和执行配额,但我们尚未设置任何配额!接下来,您将为单个用户设置磁盘配额。

步骤 5 – 为用户设置配额

您可以为用户或组设置配额的几种方法,在这里,您将了解如何使用edquotasetquota命令设置配额。

使用edquota来设置用户配额

使用edquota命令来编辑 edit quotas. 让我们编辑您的示例 sammy用户的 quota:

1sudo edquota -u sammy

-u 选项指定这是你要编辑的用户配额,如果你想编辑一个组的配额,请使用-g 选项。

这将在默认文本编辑器中打开一个文件,类似于crontab -e如何打开临时文件,以便您编辑。

1Disk quotas for user sammy (uid 1000):
2  Filesystem blocks soft hard inodes soft hard
3  /dev/vda1 40 0 0 13 0 0

这列出了用户名和uid,那些在它们上启用了配额的文件系统,以及基于 blockinode 的使用和限制。设置基于 inode 的配额将限制用户可以创建多少文件和目录,无论他们使用的磁盘空间多少。

<$>[注] 注: 一个 _block 的概念不太明确,可能取决于许多因素,包括哪个命令行工具正在报告它们。

在上述列表中,您的用户 sammy正在使用 40 块,或在 /dev/vda1 驱动器上的 40 KB 的空间。

每种类型的配额都允许您设置软限度和硬限度。当用户超过软限度时,它们都超过了配额,但它们不会立即被阻止消耗更多的空间或inodes。相反,给出了一些余地:用户默认情况下有七天时间让他们的磁盘使用恢复到软限度以下。在七天的恩典期结束时,如果用户仍然超过软限度,则将被视为硬限度。硬限度更少宽恕:当您达到指定的硬限度时,所有新块或inodes的创建都立即停止。

让我们更新您的 sammy 用户,以便具有 100MB 软限制和 110MB 硬限制的区块配额:

1Disk quotas for user sammy (uid 1000):
2  Filesystem blocks soft hard inodes soft hard
3  /dev/vda1 40 100M 110M 13 0 0

保存并关闭文件. 要检查新的配额,您可以使用配额命令:

1sudo quota -vs sammy
1[secondary_label Output]
2Disk quotas for user sammy (uid 1000):
3     Filesystem space quota limit grace files quota limit grace
4      /dev/vda1 40K 100M 110M 13 0 0

该命令输出您的当前配额状态,并显示您的配额为100M,而您的限制为110M

<$>[注] 注: 如果您希望您的用户能够检查自己的配额,而无需sudo访问,您需要给他们读取您在步骤 4 中创建的配额文件的权限,这样做的一种方法是创建一个用户组,使这些文件可以被用户组读取,然后确保您的所有用户也被放置在该组中。

若要了解更多有关 Linux 权限的信息,包括用户和组所有权,请阅读 An Introduction to Linux Permissions <$>

使用setquota来设置用户比率

与‘edquota’不同,‘setquota’将在一个单一的命令中更新用户的配额信息,而无需交互式编辑步骤,您将指定用户名以及基于区块和inode的配额的软和硬限制,最后将应用配额的文件系统为:

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

上面的命令将使 sammy的基于区块的配额限制增加一倍,达到200兆字节和220兆字节。对于基于inode的软和硬限制的0 0表示它们仍然未设置。

再一次,使用配额命令来检查你的工作:

1sudo quota -vs sammy
1[secondary_label Output]
2Disk quotas for user sammy (uid 1000):
3     Filesystem space quota limit grace files quota limit grace
4      /dev/vda1 40K 200M 220M 13 0 0

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

步骤6 - 生成配额报告

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

1sudo repquota -s /
 1[secondary_label Output]
 2*** Report for user quotas on device /dev/vda1
 3Block grace time: 7days; Inode grace time: 7days
 4                        Space limits File limits
 5User used soft hard grace used soft hard grace
 6----------------------------------------------------------------------
 7root      --   1696M 0K 0K 75018 0 0
 8daemon    --     64K 0K 0K 4 0 0
 9man       --   1048K 0K 0K 81 0 0
10nobody    --   7664K 0K 0K 3 0 0
11syslog    --   2376K 0K 0K 12 0 0
12sammy     --     40K 200M 220M 13 0 0

在这种情况下,您正在生成对 / ** root** 文件系统的报告. -s 命令告诉 repquota 尽可能使用可读的人数. 列出了几个系统用户,可能没有默认设置的配额. 您的用户 sammy 列在底部,使用的金额和软和硬限制。

另外,请注意Block grace time: 7days号召,以及grace列,如果您的用户超过了软限度,则grace列会显示他们剩下多少时间才能回到限度以下。

步骤7 – 设置过期恩典期

您可以设置允许用户在软限度以上浮动的时间段,然后使用setquota命令:

1sudo setquota -t 864000 864000 /

上面的命令将区块和 inode 恩典时间设置为 864000 秒,即 10 天,此设置适用于所有用户,即使您不使用两种类型的比率(区块与 inode),也必须提供这两个值。

请注意,值 must 在秒内指定。

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

1sudo repquota -s /
1[secondary_label Output]
2Block grace time: 10days; Inode grace time: 10days
3. . .

这些变化应立即反映在repquota输出中。

结论

在本教程中,你安装了配额命令行工具,验证了你的Linux内核可以处理监控配额,为一个用户设置了基于区块的配额,并生成了文件系统的配额使用情况的报告。

附录:常见的比率相关的错误消息

以下是您在设置和操纵文件系统配额时可能遇到的一些常见错误。

1[secondary_label quotaon Output]
2quotaon: cannot find //aquota.group on /dev/vda1 [/]
3quotaon: cannot find //aquota.user on /dev/vda1 [/]

这是一个错误,你可能会看到,如果你试图打开配额(使用配额)在运行最初的配额检查命令之前。 配额检查命令创建了需要启动配额系统的aquota配额文件。

1[secondary_label quotaon Output]
2quotaon: using //aquota.group on /dev/vda1 [/]: No such process
3quotaon: Quota format not supported in kernel.
4quotaon: using //aquota.user on /dev/vda1 [/]: No such process
5quotaon: Quota format not supported in kernel.

这个配额错误告诉我们,你的内核不支持配额,或者至少不支持正确的版本(有quota_v1quota_v2版本)。

如果是这种情况,可以通过安装linux-image-extra-virtual包与apt来修复它,请参阅 步骤 2以获取更多细节。

如果此错误在安装后仍然存在,请查看 步骤 4。 请确保您正确使用modprobe命令,或重新启动您的服务器,如果这对您来说是一个可行的选择。

1[secondary_label quota Output]
2quota: Cannot open quotafile //aquota.user: Permission denied
3quota: Cannot open quotafile //aquota.user: Permission denied
4quota: Cannot open quotafile //quota.user: No such file or directory

如果您运行quota,而您的当前用户没有权限读取您的文件系统的 quota 文件,您(或您的系统管理员)将需要适当地调整文件权限,或在运行需要访问 quota 文件的命令时使用sudo

若要了解有关 Linux 权限的更多信息,包括用户和组所有权,请阅读 An Introduction to Linux Permissions

Published At
Categories with 技术
comments powered by Disqus