前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Debian 9上设置文件系统配额

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

作者头像
用户2323866
修改2021-06-18 10:53:02
7460
修改2021-06-18 10:53:02
举报
文章被收录于专栏:技术派技术派

介绍

配额用于限制用户或组可以在文件系统上使用的磁盘空间量。 如果没有这样的限制,用户可能会填满机器的磁盘并导致其他用户和服务出现问题。

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

先决条件

本教程假设您已登录到Debian 9服务器,该服务器具有非root,sudo启用的用户,如使用Debian 9的初始服务器设置中所述。

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

第1步 - 安装配额工具

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

代码语言:javascript
复制
sudo apt update
sudo apt install quota

您可以通过运行quota命令并询问其版本信息来验证是否已安装这些工具:

代码语言:javascript
复制
quota --version
代码语言:javascript
复制
OutputQuota utilities version 4.03.
. . .

如果您的输出显示略有不同的版本号,那就没问题。

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

第2步 - 更新文件系统挂载选项

要激活特定文件系统上的配额,我们需要使用指定的一些与配额相关的选项来安装它。 我们通过更新/etc/fstab配置文件中的文件系统条目来完成此操作。 立即在您喜欢的文本编辑器中打开该文件:

代码语言:javascript
复制
sudo nano /etc/fstab

文件的内容类似于以下内容:

/ etc / fstab文件

代码语言:javascript
复制
# /etc/fstab: static file system information.
UUID=06b2aae3-b525-4a4c-9549-0fc6045bd08e   / ext4    errors=remount-ro   0   1

fstab文件来自虚拟服务器。 台式机或笔记本电脑的外观可能略有不同,但在大多数情况下,您将拥有代表所有磁盘空间的/文件系统。

通过添加选项更新指向根文件系统的行,如下所示:

/ etc / fstab文件

代码语言:javascript
复制
# /etc/fstab: static file system information.
UUID=06b2aae3-b525-4a4c-9549-0fc6045bd08e   /   ext4    errors=remount-ro,usrquota,grpquota   0   1

您将新选项添加​​到任何现有选项的末尾,确保用逗号分隔所有选项并且不用空格。 上述更改将允许我们在文件系统上启用用户( grpquota )和基于组( grpquota )的配额。 如果您只需要其中一个,则可以省略未使用的选项。

重新安装文件系统以使新选项生效:

代码语言:javascript
复制
sudo mount -o remount /

注意:确保/etc/fstab文件中列出的选项之间没有空格。 如果在逗号之后放置一个空格,您将看到如下错误:

代码语言:javascript
复制
Outputmount: /etc/fstab: parse error at line 2 -- ignored

如果在运行上一个mount命令后看到此消息,请重新打开fstab文件,更正所有错误,并在继续之前重复mount命令。

我们可以通过查看/proc/mounts文件来验证新选项是否用于挂载文件系统。 在这里,我们使用grep只显示该文件中的根文件系统条目:

代码语言:javascript
复制
cat /proc/mounts | grep ' / '
代码语言:javascript
复制
Output/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota,errors=remount-ro,data=ordered 0 0

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

第3步 - 启用配额

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

代码语言:javascript
复制
sudo quotacheck -ugm /

此命令创建文件/aquota.user/aquota.group 。 这些文件包含有关文件系统的限制和使用的信息,并且在我们打开配额监视之前它们必须存在。 我们使用的quotacheck参数是:

  • u 指定应创建基于用户的配额文件
  • g 表示应创建基于组的配额文件
  • m 禁用在执行配额的初始计数时将文件系统重新挂载为只读。 如果用户在此过程中主动保存文件,则将文件系统重新安装为只读将提供更准确的结果,但在初始设置期间不需要。

如果您不需要启用基于用户或组的配额,则可以不使用相应的quotacheck选项。

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

代码语言:javascript
复制
ls /
代码语言:javascript
复制
Outputaquota.group  bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  sys  usr  vmlinuz
aquota.user   boot  etc  initrd.img  lib             lost+found  mnt    proc  run   srv   tmp  var  vmlinuz.old

如果未在quotacheck命令中包含ug选项,则相应的文件将丢失。 现在我们准备打开配额系统了:

代码语言:javascript
复制
sudo quotaon -v /
代码语言:javascript
复制
Output/dev/vda1 [/]: group quotas turned on
/dev/vda1 [/]: user quotas turned on

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

第4步 - 为用户配置配额

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

使用edquota设置用户配额

我们使用edquota命令编辑 配额 。 让我们编辑我们的示例sammy用户的配额:

代码语言:javascript
复制
sudo edquota -u sammy

-u选项指定这是我们将要编辑的user配额。 如果您想要编辑组的配额,请在其位置使用-g选项。

这将在默认文本编辑器中打开一个文件,类似于crontab -e打开临时文件供您编辑的方式。 该文件看起来类似于:

代码语言:javascript
复制
Disk quotas for user sammy (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        24          0          0          7        0        0

这将列出用户名和uid ,在其上启用配额的文件系统,以及基于inode的使用和限制。 设置基于inode的配额将限制用户可以创建的文件和目录的数量,而不管它们使用的磁盘空间量。 大多数人都希望使用基于块的配额,这特别限制了磁盘空间的使用。 这就是我们要配置的内容。

注意: 的概念指定不当,可能会根据许多因素而改变,包括哪些命令行工具报告它们。 在Debian上设置配额的上下文中,假设1个块等于1千字节的磁盘空间是相当安全的。

在上面的清单中,我们的用户sammy/dev/vda1驱动器上使用了24个块或24KB的空间。 soft限制和hard限制都被禁用,值为0

每种类型的配额都允许您设置软限制硬限制 。 当用户超过软限制时,它们超过配额,但不会立即阻止它们占用更多空间或inode。 相反,给出了一些余地:用户在默认情况下有七天时间在软限制下重新使用磁盘。 在七天宽限期结束时,如果用户仍然超过软限制,则将其视为硬限制。 硬限制不太宽容:当您达到指定的硬限制时,所有新块或inode的创建都会立即停止。 这表现为磁盘完全没有空间:写入将失败,将无法创建临时文件,并且用户将在执行常见任务时开始查看警告和错误。

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

代码语言:javascript
复制
Disk quotas for user sammy (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        24       100M       110M          7        0        0

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

代码语言:javascript
复制
sudo quota -vs sammy
代码语言:javascript
复制
OutputDisk quotas for user sammy (uid 1001):
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/vda1     24K    100M    110M               7       0       0

该命令输出我们当前的配额状态,并显示我们的配额为100M而我们的限制为110M 。 这分别对应于软限制和硬限制。

注意:如果您希望用户能够在没有sudo访问权限的情况下检查自己的配额,则需要授予他们读取我们在第4步中创建的配额文件的权限。一种方法是创建users组,使users组可以读取这些文件,然后确保所有用户也放在组中。

要了解有关Linux权限(包括用户和组所有权)的更多信息,请阅读Linux权限简介

使用setquota设置用户配额

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

代码语言:javascript
复制
sudo setquota -u sammy 200M 220M 0 0 /

上面的命令将把sammy的基于块的配额限制加倍到200兆字节和220兆字节。 基于inode的软限制和硬限制的0 0表示它们保持未设置状态。 即使我们没有设置任何基于inode的配额,这也是必需的。

再次使用quota命令检查我们的工作:

代码语言:javascript
复制
sudo quota -vs sammy
代码语言:javascript
复制
OutputDisk quotas for user sammy (uid 1001): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/vda1     24K    200M    220M               7       0       0

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

第5步 - 生成配额报告

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

代码语言:javascript
复制
sudo repquota -s /
代码语言:javascript
复制
Output*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    981M      0K      0K          35234     0     0
nobody    --   7664K      0K      0K              3     0     0
ntp       --     12K      0K      0K              3     0     0
_apt      --      8K      0K      0K              2     0     0
debian    --     16K      0K      0K              4     0     0
sammy     --     24K    200M    220M              7     0     0

在这个例子中,我们正在为/ root文件系统生成一个报告。 -s命令告诉repquota尽可能使用人类可读的数字。 列出了一些系统用户,默认情况下可能没有设置配额。 我们的用户sammy列在底部,包含使用的金额以及软硬限制。

另请注意Block grace time: 7days callout和grace列。 如果我们的用户超过软限制,则grace列将显示他们还剩多少时间才能回到限制之下。

在下一步中,我们将更新配额系统的宽限期。

第6步 - 为超额配置宽限期

我们可以配置允许用户浮动超过软限制的时间段。 我们使用setquota命令来执行此操作:

代码语言:javascript
复制
sudo setquota -t 864000 864000 /

以上命令将block和inode宽限时间设置为864000秒或10天。 此设置适用于所有用户,即使您不使用这两种类型的配额(块与inode),也必须提供这两个值。

请注意, 必须以秒为单位指定值。

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

代码语言:javascript
复制
sudo repquota -s /
代码语言:javascript
复制
OutputBlock grace time: 10days; Inode grace time: 10days
. . .

这些更改应立即反映在repquota输出中。

结论

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

附录:与配额相关的常见错误消息

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

代码语言:javascript
复制
quotaon Outputquotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]

如果您在运行初始quotacheck命令之前尝试打开配额(使用quotaon ),则可能会看到此错误。 quotacheck命令创建打开配额系统所需的aquotaquota文件。 有关更多信息,请参阅第3步

代码语言:javascript
复制
quota Outputquota: 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

如果您运行quota ,则会看到此错误,并且您当前的用户无权读取文件系统的配额文件。 您(或您的系统管理员)需要适当调整文件权限,或在运行需要访问配额文件的sudo时使用sudo

要了解有关Linux权限(包括用户和组所有权)的更多信息,请阅读Linux权限简介

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 第1步 - 安装配额工具
  • 第2步 - 更新文件系统挂载选项
  • 第3步 - 启用配额
  • 第4步 - 为用户配置配额
    • 使用edquota设置用户配额
      • 使用setquota设置用户配额
      • 第5步 - 生成配额报告
      • 第6步 - 为超额配置宽限期
      • 结论
        • 附录:与配额相关的常见错误消息
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档