Доступ Python к информации о квотах NFS? - PullRequest
2 голосов
/ 20 марта 2012

Существуют ли какие-либо модули Python, которые позволят мне получить доступ к NFS информации о квоте, не анализируя выходные данные команды quota?Я знаю, что, если бы у меня была достаточная мотивация, я мог бы написать свой собственный код ONC / RPC, используя модуль xdrlib Python, но я от всей души надеюсь, что мне не придется тесно связываться с внутренностями NFS.

В идеале я надеюсь на существующую реализацию RPC или какой-либо модуль более высокого уровня (например, оболочку для существующей библиотеки C или что-то в этом роде).

Допустимой заменой будет что-то вроде quota команда, которая производит более машиночитаемый вывод.

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Первоначально этот вопрос возник из-за проблем с версией 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       

Алиса справедливо спросила бы, как это связано с ее учетной записью.

Оказывается, что умы, стоящие за пакетом quota-utils, наконец-то осознали проблемы, присущие инструменту; с версией 4.00 (доступна в Fedora 16) доступно несколько новых опций, которые превращают команду quota в нечто, производящее полезную информацию.

Особый интерес представляет опция -f:

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

Теперь пользователь может запустить:

quota -f ~

И получите информацию о квоте для их домашнего каталога. Кроме того, опция -s будет отображать «удобочитаемые» цифры вместо того, чтобы отображать все в виде блоков.

Для Алисы это может выглядеть так:

$ 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

Что намного более полезно для автоматизации.

0 голосов
/ 30 апреля 2013
command_array = ['quota', '-wp', '-f', '/home/nfs/user1']
output = subprocess.check_output(command_array)
# use only the second 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.Я так и сделал.

...