Python获取NFS配额信息?

Posted

技术标签:

【中文标题】Python获取NFS配额信息?【英文标题】:Python access to NFS quota information? 【发布时间】:2012-03-20 03:43:54 【问题描述】:

是否有任何 Python 模块可以让我访问NFS 配额信息而无需解析quota 命令的输出?我知道,如果我有足够的动力,我可以使用 Python 的 xdrlib 模块编写我自己的 ONC/RPC 代码,但我全心全意地希望我不必与 NFS 的内部密切相关。

理想情况下,我希望有一个现有的 RPC 实现,或一些更高级别的模块(如现有 C 库的包装器或其他东西)。

一个可接受的替代品是类似于quota 命令,它产生更多机器可读的输出。

【问题讨论】:

嗯。我看到 quota-utils 包的更新版本包括更好的输出选项(例如,--raw-grace--no-wrap)。 【参考方案1】:

这个问题最初是由 quota 命令的 3.13 版本的问题引起的,它作为最终用户确定配额信息的工具基本上没有用。例如,如果alice 运行quota,她可能会看到如下输出:

Disk quotas for user alice (uid 100): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
fileserver.example.com:/staff/b/bob
                9254720  9728000 10240000          119768       0       0       

Alice 会理所当然地想知道这与她的帐户有什么关系。

事实证明,quota-utils 软件包背后的思想终于意识到了该工具固有的问题;对于 4.00 版(在 Fedora 16 中可用),有几个可用的新选项可以将 quota 命令变成实际产生有用信息的东西。

特别感兴趣的是-f 选项:

-f, --filesystem-list     display quota information only for given filesystems

所以现在,用户可以运行:

quota -f ~

并获取其主目录的配额信息。此外,-s 选项将显示“人类可读”数字,而不是将所有内容显示为块。

对于 Alice,这可能看起来像:

$ quota -s -f ~
Disk quotas for user alice (uid 100): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
fileserver.example.com:/staff/a/alice
              9038M   9500M  10000M            120k       0       0        

此外,还有两个选项可以更轻松地在脚本中处理来自quota 的输出:

-w 选项在“文件系统”名称过长时禁止换行。 -p 选项显示0 用于宽限时间,如果用户没有超出配额的情况。这意味着总是有相同数量的字段(而在之前的 quota 版本中,字段的数量可能会因情况而异)。

结合以上所有,我们得到如下结果:

$ quota -wp -f ~
Disk quotas for user alice (uid 100): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
fileserver.example.com:/staff/a/alice 9254720  9728000 10240000       0  119768 0

对自动化更有用。

【讨论】:

v4.01 抱怨 ~ 不是挂载点。对我来说,quota -wp -f $(dirname ~) 有效,但通常挂载点可能更高。【参考方案2】:
command_array = ['quota', '-wp', '-f', '/home/nfs/user1']
output = subprocess.check_output(command_array)
# use only the third line, this is util info
beauty_output = output.split('\n')[2].split()
remote_fs = beauty_output[0]
blocks = beauty_output[1]
quota = beauty_output[2]
limit = beauty_output[3]
...

考虑 /home/nfs/user1 是 nfs 挂载点。 我就是这样做的。

【讨论】:

以上是关于Python获取NFS配额信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 CloudKit 的实际配额?

检查 NFS 共享是不是安装在 python 脚本中

YouTube Data Api:如果达到配额限制,则打破 nextPageToken while 循环?

powershell导出文件夹配额

如何获取 Youtube API 配额的每日使用量?

Linux的磁盘配额