Назад | Перейти на главную страницу

Как определить точное время отсрочки блокировки по умолчанию для раздела квоты Linux?

Я пытаюсь написать сценарий bash, который сообщит мне "время отсрочки блока" по умолчанию для данного раздела в предсказуемой единице. Ближайшее, что я нашел до сих пор, - использовать repquota и анализировать вывод, но это непоследовательно. Иногда он сообщает дни, как вы видите ниже «7 дней», как вы можете видеть удар в третьей строке.

[root@hostname]# repquota -g -p /
*** Report for group quotas on device /dev/mapper/vg_in1-lv_root
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      -- 2135928       0       0      0   59727     0     0      0
bin       --     480       0       0      0      28     0     0      0
tty       --      24       0       0      0       2     0     0      0
[...]

Для более коротких периодов отображается как «4:10», что означает 4 часа 10 минут. Для значений <30 секунд он сообщает 00:00, а от 30 секунд до 1 минуты - 00:01.

Как я могу получить фактическое значение параметра «Время отсрочки блока», не делая его более «читабельным», чтобы программа могла его надежно проанализировать?

Спасибо!

У нас есть аналогичная проблема с отчетами о квотах GPFS. Самым простым решением было бы иметь регулярное выражение, которое позволит вам получить все, что есть в любой форме, с которой вы ожидаете столкнуться, а затем проанализировать это на следующем шаге. Например в Python

#!/usr/bin/env python

import re
import sys

GRACE_REGEX = re.compile(r"Block grace time: (?P<days>\d+)\s*days?|(?P<hours>\d+):(?P<minutes>\d+)")

for line in sys.stdin.readlines():
    grace = GRACE_REGEX.search(line)
    if not grace:
        continue
    grace_groups = grace.groupdict()
    if grace_groups.get('days', None):
        print "Found days: %d or in seconds: %d" % (
            int(grace_groups['days']),
            int(grace_groups['days']) * 86400)
    if grace_groups.get('hours', None):
        print "Found hours: %d and minutes: %d or in seconds: %d" % (
            int(grace_groups['hours']),
            int(grace_groups['minutes']),
            int(grace_groups['hours']) * 3600 + int(grace_groups['minutes']) * 60)

Учитывая примерные строки

Block grace time: 7days; Inode grace time: 7days
Block grace time: 4:10; Inode grace time: 7days

Вы получите следующий результат:

Found days: 7 or in seconds: 604800
Found hours: 4 and minutes: 10 or in seconds: 15000