Доступ Python к информации о квотах NFS?
Существуют ли какие-либо модули Python, которые позволят мне получить доступ к информации о квоте NFS
без необходимости разбора выходных данных команды quota
? Я знаю, что если бы у меня была достаточная мотивация, я мог бы написать свой собственный код ONC/RPC, используя модуль Python xdrlib
, но я надеюсь от всего сердца, что мне не придется так тесно связываться с внутренностями NFS.
В идеале я надеюсь на существующую реализацию RPC или какой-то модуль более высокого уровня (например, оболочку для существующая библиотека Си или что-то еще).
Приемлемой заменой будет что-то вроде командыquota
, которая производит более машиночитаемый вывод.2 ответа:
Этот вопрос был первоначально порожден проблемами с версией 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
Который намного полезнее для автоматизации.
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. Я сделал это таким образом.