Linux Quota subsystem Introduction

2022年 5月 20日 37点热度 0人点赞 0条评论

file

引言

最近在做一个短信的配额管理, 想着 Linux 里面也有配额管理, 想看下 Linux 的配额是怎么做的, 结果查询到的都是怎么设置, 没有讲实现原理的.

Linux 官网介绍

原文链接: https://www.kernel.org/doc/html/latest/filesystems/quota.html

Quota subsystem allows system administrator to set limits on used space and number of used inodes (inode is a filesystem structure which is associated with each file or directory) for users and/or groups. For both used space and number of used inodes there are actually two limits. The first one is called softlimit and the second one hardlimit. A user can never exceed a hardlimit for any resource (unless he has CAP_SYS_RESOURCE capability). User is allowed to exceed softlimit but only for limited period of time. This period is called "grace period" or "grace time". When grace time is over, user is not able to allocate more space/inodes until he frees enough of them to get below softlimit.

Quota limits (and amount of grace time) are set independently for each filesystem.

For more details about quota design, see the documentation in quota-tools package (https://sourceforge.net/projects/linuxquota).

Quota netlink interface
When user exceeds a softlimit, runs out of grace time or reaches hardlimit, quota subsystem traditionally printed a message to the controlling terminal of the process which caused the excess. This method has the disadvantage that when user is using a graphical desktop he usually cannot see the message. Thus quota netlink interface has been designed to pass information about the above events to userspace. There they can be captured by an application and processed accordingly.

The interface uses generic netlink framework (see https://lwn.net/Articles/208755/ and http://www.infradead.org/~tgr/libnl/ for more details about this layer). The name of the quota generic netlink interface is "VFS_DQUOT". Definitions of constants below are in <linux/quota.h>. Since the quota netlink protocol is not namespace aware, quota netlink messages are sent only in initial network namespace.

Currently, the interface supports only one message type QUOTA_NL_C_WARNING. This command is used to send a notification about any of the above mentioned events. Each message has six attributes. These are (type of the argument is in parentheses):

QUOTA_NL_A_QTYPE (u32)
type of quota being exceeded (one of USRQUOTA, GRPQUOTA)

QUOTA_NL_A_EXCESS_ID (u64)
UID/GID (depends on quota type) of user / group whose limit is being exceeded.

QUOTA_NL_A_CAUSED_ID (u64)
UID of a user who caused the event

QUOTA_NL_A_WARNING (u32)
what kind of limit is exceeded:

QUOTA_NL_IHARDWARN
inode hardlimit

QUOTA_NL_ISOFTLONGWARN
inode softlimit is exceeded longer than given grace period

QUOTA_NL_ISOFTWARN
inode softlimit

QUOTA_NL_BHARDWARN
space (block) hardlimit

QUOTA_NL_BSOFTLONGWARN
space (block) softlimit is exceeded longer than given grace period.

QUOTA_NL_BSOFTWARN
space (block) softlimit

four warnings are also defined for the event when user stops exceeding some limit:

QUOTA_NL_IHARDBELOW
inode hardlimit

QUOTA_NL_ISOFTBELOW
inode softlimit

QUOTA_NL_BHARDBELOW
space (block) hardlimit

QUOTA_NL_BSOFTBELOW
space (block) softlimit

QUOTA_NL_A_DEV_MAJOR (u32)
major number of a device with the affected filesystem

QUOTA_NL_A_DEV_MINOR (u32)
minor number of a device with the affected filesystem

本文来自:https://blog.duhbb.com

本文链接地址:Linux Quota subsystem Introduction,英雄不问来路,转载请注明出处,谢谢。

有话想说:那就赶紧去给我留言吧。

rainbow

这个人很懒,什么都没留下

文章评论