Skip to main content
 首页 » 编程设计

Python获取NFS配额信息

2025年05月04日12kuangbin

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

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

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

请您参考如下方法:

这个问题最初是由 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 选项将显示“人类可读”的数字,而不是将所有内容显示为 block 。

对于 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 

哪个对自动化更有用。