Como eu determino o tempo de graça do bloco padrão exato para uma partição de cota do Linux?

2

Estou tentando escrever um script bash que me dirá o padrão "Bloquear tempo de carência" para uma determinada partição em uma unidade previsível. O mais próximo que encontrei até agora é usar o repquota e analisar a saída, mas é inconsistente. Às vezes, ele informa dias como você vê abaixo de "7 dias", como você pode ver na terceira linha.

[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
[...]

Para períodos mais curtos, é relatado como "4:10", o que significa 4 horas e 10 minutos. Para valores < 30 segundos, informa 00:00, e entre 30 segundos e 1 minuto, informa 00:01.

Como posso obter o valor do tempo de graça do Bloco de configuração real, sem que ele seja mais "legível para ser lido" para que possa ser analisado por um programa de forma confiável?

Obrigado!

    
por Paul 12.11.2015 / 00:13

1 resposta

1

Temos um problema semelhante com os relatórios de cotas do GPFS. A solução mais básica seria ter um regex que permita obter o que quer que exista na forma que você esperaria encontrar e depois analisá-lo em uma próxima etapa. Por exemplo, em 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)

Dadas as linhas de exemplo

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

Você obteria a seguinte saída:

Found days: 7 or in seconds: 604800
Found hours: 4 and minutes: 10 or in seconds: 15000
    
por 13.11.2015 / 13:11

Tags