配额子系统¶
配额子系统允许系统管理员为用户和/或组设置已用空间和已用 inode 数量的限制(inode 是一种与每个文件或目录关联的文件系统结构)。对于已用空间和已用 inode 数量,实际上都有两个限制。第一个称为软限制,第二个称为硬限制。用户永远不能超过任何资源的硬限制(除非他具有 CAP_SYS_RESOURCE 能力)。允许用户超过软限制,但仅限于有限的时间段。此时间段称为“宽限期”或“宽限时间”。当宽限期结束时,用户将无法分配更多的空间/inode,直到他释放足够的空间/inode 使其低于软限制。
配额限制(和宽限时间)是为每个文件系统单独设置的。
有关配额设计的更多详细信息,请参阅 quota-tools 包中的文档 (https://sourceforge.net/projects/linuxquota)。
配额 netlink 接口¶
当用户超过软限制、用完宽限期或达到硬限制时,配额子系统传统上会在导致超限的进程的控制终端上打印一条消息。这种方法的缺点是,当用户使用图形桌面时,通常看不到该消息。因此,设计了配额 netlink 接口,将有关上述事件的信息传递给用户空间。在那里,它们可以被应用程序捕获并进行相应的处理。
该接口使用通用 netlink 框架(有关此层的更多详细信息,请参见 https://lwn.net/Articles/208755/ 和 http://www.infradead.org/~tgr/libnl/)。配额通用 netlink 接口的名称为“VFS_DQUOT”。以下常量的定义在 <linux/quota.h> 中。由于配额 netlink 协议不感知命名空间,因此配额 netlink 消息仅在初始网络命名空间中发送。
目前,该接口仅支持一种消息类型 QUOTA_NL_C_WARNING。此命令用于发送有关上述任何事件的通知。每条消息都有六个属性。这些是(参数的类型在括号中)
- QUOTA_NL_A_QTYPE (u32)
超过的配额类型(USRQUOTA、GRPQUOTA 之一)
- QUOTA_NL_A_EXCESS_ID (u64)
用户/组的 UID/GID(取决于配额类型),其限制被超过。
- QUOTA_NL_A_CAUSED_ID (u64)
导致该事件的用户的 UID
- QUOTA_NL_A_WARNING (u32)
超过了哪种限制
- QUOTA_NL_IHARDWARN
inode 硬限制
- QUOTA_NL_ISOFTLONGWARN
inode 软限制超过了给定的宽限期
- QUOTA_NL_ISOFTWARN
inode 软限制
- QUOTA_NL_BHARDWARN
空间(块)硬限制
- QUOTA_NL_BSOFTLONGWARN
空间(块)软限制超过了给定的宽限期。
- QUOTA_NL_BSOFTWARN
空间(块)软限制
还为用户停止超过某些限制的事件定义了四个警告
- QUOTA_NL_IHARDBELOW
inode 硬限制
- QUOTA_NL_ISOFTBELOW
inode 软限制
- QUOTA_NL_BHARDBELOW
空间(块)硬限制
- QUOTA_NL_BSOFTBELOW
空间(块)软限制
- QUOTA_NL_A_DEV_MAJOR (u32)
受影响文件系统的设备的主设备号
- QUOTA_NL_A_DEV_MINOR (u32)
受影响文件系统的设备的次设备号