如何在 Debian 10 上设置文件系统配额

介绍

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

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

前提条件

本教程假定您已登录到 Debian 10 服务器上,具有非 root, sudo 允许的用户,如在 Debian 10 初始服务器设置中所述。

本教程中的技术通常应该适用于 Debian 以外的 Linux 发行版,但可能需要一些调整。

步骤 1 – 安装配额工具

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

1sudo apt update
2sudo apt install quota

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

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

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

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

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

要在特定的文件系统中激活配额,我们需要通过指定几个配额相关的选项来安装它。我们通过在 `/etc/fstab’ 配置文件中更新文件系统的条目来完成此操作。

1sudo nano /etc/fstab

文件的内容将类似于如下:

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

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

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

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

您将将新选项添加到任何现有选项的末尾,并确保将它们全部分隔成一个字符号,而无间隙。 以上的更改将允许我们在文件系统上启用用户(usrquota)和基于组(grpquota)的配额。

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

1sudo mount -o remount /

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

1[secondary_label Output]
2mount: /etc/fstab: parse error at line 2 -- ignored

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

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

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

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

步骤3 - 允许配额

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

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 sys usr vmlinuz
3aquota.user boot etc initrd.img lib lost+found mnt proc run srv tmp var vmlinuz.old

如果你没有将ug选项列入quotacheck命令中,则相应的文件将丢失。

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

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

步骤 4 – 为用户设置配额

我们可以为用户或群组设置配额的几种方法,在这里我们将讨论如何使用edquotasetquota命令设置配额。

使用edquota来设置用户配额

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

1sudo edquota -u sammy

-u 选项表示这是我们要编辑的用户配额,如果您想编辑一个组的配额,请使用-g 选项。

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

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

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

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

在上面的列表中,我们的用户 sammy正在使用24块,或24KB的空间在 /dev/vda1驱动器上。

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

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

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

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

1sudo quota -vs sammy
1[secondary_label Output]
2Disk quotas for user sammy (uid 1001):
3     Filesystem space quota limit grace files quota limit grace
4      /dev/vda1 24K 100M 110M 7 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 1001): 
3     Filesystem space quota limit grace files quota limit grace
4      /dev/vda1 24K 200M 220M 7 0 0

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

步骤5 - 生成配额报告

要生成特定文件系统中的所有用户当前配额使用情况的报告,请使用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      --    981M 0K 0K 35234 0 0
 8nobody    --   7664K 0K 0K 3 0 0
 9ntp       --     12K 0K 0K 3 0 0
10_apt      --      8K 0K 0K 2 0 0
11debian    --     16K 0K 0K 4 0 0
12sammy     --     24K 200M 220M 7 0 0

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

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

在下一步中,我们将更新我们的配额体系的恩惠期。

步骤 6 – 设置过期恩典期

我们可以配置一个用户被允许漂浮超过软限制的时间段,我们使用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输出中。

结论

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

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

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

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

如果您试图在运行初始quotacheck命令之前打开配额(使用quotaon)时,您可能会看到此错误。quotacheck命令会创建启用配额系统所需的aquotaquota文件。

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 权限的信息,包括用户和组所有权,请阅读 Linux 权限的介绍

Published At
Categories with 技术
comments powered by Disqus