介绍
配额是用来限制用户或组在文件系统上可以使用的磁盘空间的数量,如果没有这些限制,用户可能会填充机器的磁盘,并给其他用户和服务带来问题。
在本教程中,我们将安装命令行工具来创建和检查磁盘配额,然后为示例用户设置配额。
前提条件
本教程假定您已登录到 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
如果你没有将u
或g
选项列入quotacheck
命令中,则相应的文件将丢失。
1sudo quotaon -v /
1[secondary_label Output]
2/dev/vda1 [/]: group quotas turned on
3/dev/vda1 [/]: user quotas turned on
我们的服务器现在正在监控和执行配额,但我们尚未设置任何配额!接下来,我们将为单个用户设置磁盘配额。
步骤 4 – 为用户设置配额
我们可以为用户或群组设置配额的几种方法,在这里我们将讨论如何使用edquota
和setquota
命令设置配额。
使用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
,那些在它们上启用了配额的文件系统,以及基于 block 和 inode 的使用和限制。设置基于 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
命令会创建启用配额系统所需的aquota
或quota
文件。
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 权限的介绍