试图讨好Linux配额,数据存储在哪里?

所以Linux配额系统的所有教程和文档都让我感到困惑。 对于启用了quotas的每个文件系统,存储的实际配额信息在哪里? 它是文件系统元数据还是在文件中?

假设用户foo在/ home上创build一个新文件。 内核如何确定用户foo是否低于硬限制? 内核是否必须每次都在该文件系统上计算配额信息,或者是否在超级块或其他位置?

据我了解,内核咨询aquota.user文件的实际规则,但目前的配额使用数据存储在哪里? 这可以用任何外面的工具和类似的工具来查看吗? TIA!

更新:

谢谢您的帮助。 我已经读过这个迷你HOWTO了。 我很清楚用户空间工具的用法。 我不清楚的是,使用数据是否也存储在每个用户的限制文件也是,你回答这是一个是。

从我所知道的,rc.sysinit在启动时运行quotacheck和quotaon。 quotacheck程序分析文件系统,更新aquota。*文件。 然后它使用quota.h和quotactl()系统调用来通知内核的配额信息。

从这个angular度来看,内核会散列信息,并随着更改的增加/减less配额统计信息。 在closures之后,在卸载文件系统之前,init.d / halt脚本将运行quotaoff命令RIGHT。 quotaoff命令似乎没有更新aquota。*文件与内核在内存中的信息。 我这样说是因为aquota.user文件的{a,c,m}次只在系统重新引导或手动运行quotacheck命令时更新。 看来,就我所知,内核只是在关机时丢弃最新的使用数据。 这些信息从来不用于更新aquota。*文件。 它们在启动过程中通过quotacheck(rc.sysinit)进行更新。 由于更新的信息已经被内核收集,所以对我来说似乎很傻。 所以……总之,我还不清楚这些方法。 ;)

对于启用了quotas的每个文件系统,存储的实际配额信息在哪里?

参见例如quotaon manpage 。 在文件系统根目录中将会有名为.quota *的文件,其中包含必要的信息(.quota.user,.quota.group,.quota.ops.user,.quota.ops.group)。

假设用户foo在/ home上创build一个新文件。 内核如何确定用户foo是否低于硬限制? 内核是否必须每次都在该文件系统上计算配额信息,或者是否在超级块或其他位置?

不,内核不断跟踪fs的使用情况,所以不需要重新计算每次分配(这将会非常昂贵)。 启用配额后会执行一次计算,然后进行更新。 初始计算由quotacheck执行。

据我了解,内核咨询aquota.user文件的实际规则,但目前的配额使用数据存储在哪里? 这可以用任何外面的工具和类似的工具来查看吗? TIA!

配额信息存储在.quota *(见上文)中。 除了repquota之外,我不知道有哪些工具可以生成配额使用情况报告。 但是,您应该能够使用/脚本repquota生成大多数报告。 或者你将不得不破坏源…

BTW:

Quota mini-HOWTO详细介绍了Linux配额系统。 这有点过时,但基本面并没有太大变化。

从阅读你的更新似乎你想知道为什么当closures机器而不是写入aquota。*文件内核的所有配额信息将被抛出。

那么内核不会即时更新这个文件,因为这在时间上会很昂贵。 基本上,一旦启用了配额,内核会跟踪使用情况,以便在达到软/硬限制的情况下执行,这意味着每次必须为系统上的任何用户/组分配任何fs块时,它都会跟踪此情况。 如果在尝试分配fs块时必须更新aquota。*文件,则可能会发现这种情况最终会导致即使是中等繁忙的系统也会出现问题,而且不需要,因为内核正在为您监视此问题,并将logging任何违规为你,所以你知道来运行quotacheck。 即使配额计算也可能导致问题,这就是为什么您有可调整的sysctl – dquot-max – 和报告sysctl – dquot – nr – 更多的信息可以在这里看到:

http://www.mjmwired.net/kernel/Documentation/sysctl/fs.txt

至于在初始化过程中放置​​quotacheck,而不是暂停过程,这是关于时间和你如何看待事情的。 通常,当你停止一个服务器,你希望它下降,快速。 不花大量的时间列表配额,我们更习惯于init更长的时间。 另外,把这个过程想象成init在系统启动时设置初始配额计数,而不是在closures时进行清理。 如果FS被挂载到另一个没有启用配额的系统上,然后正常重启,你会想知道每次启动的位置,而且每次暂停之后都要进行初始化。

希望有所帮助。