Python如何访问NFS配额信息?

4
有没有Python模块可以让我在不必解析quota命令输出的情况下获取NFS配额信息?我知道如果我有动力,我可以使用Python的xdrlib模块编写自己的ONC / RPC代码,但是我希望我不必那么深入地涉足NFS内部。理想情况下,我希望有现有的RPC实现或一些更高级别的模块(例如对现有C库的包装器等)。一个可接受的替代品将是类似于quota命令的产生机器可读输出的东西。

嗯,我看到更近期的配额工具包版本包括更好的输出选项(例如 --raw-grace--no-wrap)。 - larsks
2个回答

1
这个问题最初是由于版本3.13的quota命令存在问题而引起的。该命令基本上无法作为终端用户确定配额信息的工具使用。例如,如果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 ~) 可以工作,但通常挂载点可能更高。 - Joachim Wagner

0
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挂载点。 我已经这样做了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接