介绍
配额是用来限制用户或组在文件系统上可以使用的磁盘空间的数量,如果没有这些限制,用户可能会填充机器的磁盘,并给其他用户和服务带来问题。
在本教程中,我们将安装命令行工具来创建和检查磁盘配额,然后为示例用户设置配额。
前提条件
本教程假定您已登录到 Ubuntu 18.04 服务器上,具有非 root, sudo 启用的用户,如在 Ubuntu 18.04 初始服务器设置中所述。
本教程中的技术通常应该在 Ubuntu 以外的 Linux 发行版上工作,但可能需要一些调整。
步骤 1 – 安装配额工具
要设置和检查配额,我们首先需要使用apt
安装配额命令行工具,让我们更新我们的包列表,然后安装包:
1sudo apt update
2sudo apt install quota
您可以通过运行配额
命令并请求其版本信息来验证工具的安装:
1quota --version
1[secondary_label Output]
2Quota utilities version 4.04.
3. . .
如果您的输出显示略有不同的版本号是好的。
接下来,我们将确保我们有适当的内核模块来监控配额。
步骤 2 – 安装 Quota 内核模块
如果您是在基于云的虚拟服务器上,您的默认 Ubuntu Linux 安装可能没有支持配额管理所需的内核模块. 为了检查,我们将使用查找
在/lib/modules/...
目录中搜索quota_v1
和quota_v2
模块:
1find /lib/modules/`uname -r` -type f -name '*quota_v*.ko*'
1[secondary_label Output]
2/lib/modules/4.15.0-45-generic/kernel/fs/quota/quota_v1.ko
3/lib/modules/4.15.0-45-generic/kernel/fs/quota/quota_v2.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 /
<$>[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,data=ordered 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
如果你没有将u
或g
选项列入quotacheck
命令中,则相应的文件将丢失。
1sudo quotaon -v /
我们的服务器现在正在监控和执行配额,但我们尚未设置任何配额!接下来,我们将为单个用户设置磁盘配额。
步骤 5 – 为用户设置配额
我们可以为用户或群组设置配额的几种方法,在这里我们将讨论如何使用edquota
和setquota
命令设置配额。
使用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
,那些在它们上启用了配额的文件系统,以及基于 block 和 inode 的使用和限制。设置基于 inode 的配额将限制用户可以创建多少文件和目录,无论他们使用的磁盘空间多少。
<$>[注] 注: 一个 _block 的概念不太明确,可能取决于许多因素,包括哪个命令行工具正在报告它们。
在上述列表中,我们的用户 sammy正在使用 40 块,或在 /dev/vda1
驱动器上的 40KB 的空间。
每种类型的配额都允许您设置软限度和硬限度。当用户超过软限度时,它们都超过了配额,但它们不会立即被阻止消耗更多的空间或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 100M 110M 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_v1
和quota_v2
版本)。
如果是这样的情况,可以通过安装linux-image-extra-virtual
包与apt
来修复它,参见 步骤 2以获取更多细节。
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 权限的介绍