即使超过软限制,配额也不会报告任何警告。只报告硬限制的警告

Quota doesn't report any warning even if the soft limit is crossed. Only reports the warning for hard limit

我在云机上安装了linux配额包并启用了磁盘配额。 Linux 版本是 Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-112-generic x86_64)。机器是域的一部分。

fstab 的内容:

LABEL=cloudimg-rootfs / ext4 usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1
/dev/vdb        /data   ext4 usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 0

sudo repquota -ugsCv /data 的结果:

Report for user quotas on device /dev/vdb
Block grace time: 7days; Inode grace time: 7days

                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  20329M      0K      0K           476k     0     0
[username1] --   2172M      0K      0K           221k     0     0
systemd-network --    228K      0K      0K             57     0     0
[username2] --   7104K      0K      0K            212     0     0
systemd-resolve --   4054M      0K      0K          49404     0     0
[username3]  +-    201M    200M    220M  6days       4     0     0

我明白了,我的 username3 已达到配额和软限制,但我 没有收到任何警告 执行任何文件操作时控制台,直到达到硬限制,然后我看到:

cp: error writing '/data/testquota/testfile2': Disk quota exceeded

如何修复此行为或错误,我希望在控制台中显示警告,否则这是不可能的?

配额开发者的回答 |创作者 Jan Kara:

您看到的只是来自 cp(1) 的一条消息,它从 write(2) 系统调用中获得了 EDQUOT 错误。有关达到软限制(和硬限制)的警告由内核打印到进程的控制终端,您似乎看不到任何警告。现在的问题是你的云机器中cp(1)进程的控制终端是什么,为什么看不到消息。您可以找到控制终端,例如来自 ps(1) 输出(TTY 列)。还可以从您的计算机的 /proc/config.gz 中找到这些行:

CONFIG_QUOTA
CONFIG_QUOTA_NETLINK_INTERFACE
CONFIG_PRINT_QUOTA_WARNING

如果未设置 CONFIG_PRINT_QUOTA_WARNING,则编译内核时不支持将配额警告打印到控制台。如果你有 CONFIG_QUOTA_NETLINK_INTERFACE=y,那么内核是用 CONFIG_QUOTA_NETLINK_INTERFACE 编译的,所以你可以 运行 quota_nld 守护进程(来自 quota-tools 包)将消息打印到控制台。

所以我 运行 sudo quota_nld -b 并将其放入 cron 中,所有用户开始收到警告。