FreeBSD

Controle de Uso de Disco

Quota


"Quotas" é uma característica do sistema que permite definir quotas para cada usuário, visando limitar o espaço ocupado em disco em um determinado filesystem. Isso é essencial visto que previne a má utilização dos recursos assim como o provável esgotamento antecipado do espaço em disco.
Para configurar o sistema de quotas não é necessário instalar nada, é uma característica nativa do sistema. É preciso apenas habilitar no kernel, configurar para que os filesystems desejados suportem quotas e aplicá-las às contas de usuários.

Edite o arquivo de configuração do kernel e adicione a seguinte linha:

options QUOTA

Após isso, compile o kernel e reinstale-o. Esta tarefa está explicada na seção Recompilação e Instalação do Kernel.

Edite o arquivo /etc/rc.conf e adicione as linhas abaixo:

enable_quotas="YES"
check_quotas="NO"

Iremos desabilitar o "check_quotas" pois se habilitado será executado o programa quotacheck no momento da inicialização do sistema. Este programa confere a integridade da base de dados de quotas em relação ao que está no disco, o que seria bom, mas o ponto negativo é que em sistemas com vários usuários e arquivos irá demorar bastante tempo para fazer a verificação.

Deverá ser definido em quais filesystems iremos habilitar o controle de quotas. Neste exemplo, iremos habilitar no filesystem que guarda os diretórios home dos usuários (por exemplo /home), para limitar o espaço ocupado por seus arquivos, assim como pelas pastas de e-mails guardados, enviados etc, e no filesystem que guarda a caixa de entrada de e-mails (por exemplo /var). Para isso, edite o arquivo /etc/fstab e adicione o parâmetro "userquota" nas entradas dos respectivos filesystems:

/dev/ad0s1f          /home      ufs    rw,nosuid,userquota   2      2

/dev/ad0s1g          /var       ufs    rw,nosuid,userquota   2      2

Agora reinicie a máquina. Execute o comando "quotacheck -a", para que seja criado o arquivo quotas.user, que armazena a base de dados de quotas, na raiz de cada filesystem com suporte a quotas. O controle de quotas estará ativado, mas ainda não foi definido nenhum limite para os usuários.

A quota de cada usuário pode ser verificada através do comando "quota -u username", e editada através do comando "edquota -u username". Pode-se limitar tanto o número de blocos utilizados (blocks) quanto o número de arquivos criados (inodes), no entanto geralmente a maior utilidade é limitar o número de blocos, o que se traduz por espaço ocupado. Lembre-se que cada bloco corresponde a 1 KB.

Temos dois tipos de limites: hard e soft. O limite hard não pode ser excedido, em nenhuma circunstância, ou seja, assim que o usuário atingir este limite não poderá alocar mais nenhum bloco no disco. Já o limite soft pode ser excedido, por determinado tempo. Este limite de tempo se chama "grace period", e é de uma semana por padrão. Se o usuário ultrapassar o limite soft, após o grace period este limite soft será transformado em um limite hard, e o usuário não poderá fazer mais nenhuma alocação. Assim que o usuário voltar abaixo do limite soft, a contagem do grace period é resetada.
Para editar as quotas do usuário fulano, utilize o comando "edquota -u fulano". Para cada filesystem haverá duas linhas, uma com o limite de blocks e outra com o limite de inodes. Para mudar qualquer limite, simplesmente altere o valor, salve e saia do editor, o novo limite entrará em vigor imediatamente. Um limite com o valor 0 (zero) significa sem limite.

Exemplos:

Impor um limite hard de 10 MB no diretório home e 5 MB na caixa de entrada do e-mail para o usuário fulano:

# edquota -u fulano

Quotas for user fulano:
/home: kbytes in use: 418, limits (soft = 0, hard = 0)
inodes in use: 2, limits (soft = 0, hard = 0)
/var: kbytes in use: 384, limits (soft = 0, hard = 0)
inodes in use: 2, limits (soft = 0, hard = 0)

alterar para

Quotas for user fulano:
/home: kbytes in use: 418, limits (soft = 0, hard = 10000)
inodes in use: 2, limits (soft = 0, hard = 0)
/var: kbytes in use: 384, limits (soft = 0, hard = 5000)
inodes in use: 2, limits (soft = 0, hard = 0)


Verificar as quotas para o usuário fulano:

# quota -u fulano
Disk quotas for user fulano (uid 4123):
Filesystem usage quota limit grace files quota limit grace
/home        418     0 10000           3     0     0
/var         384     0  5000           2     0     0


Alterar as quotas do usuário fulano para um limite soft de 10 MB no /var e 50 MB no /home e um limite hard de 12 MB no /var e 60 MB no /home:

# edquota -u fulano

Quotas for user fulano:
/home: kbytes in use: 418, limits (soft = 0, hard = 10000)
inodes in use: 3, limits (soft = 0, hard = 0)
/var: kbytes in use: 384, limits (soft = 0, hard = 5000)
inodes in use: 2, limits (soft = 0, hard = 0)

alterar para

Quotas for user fulano:
/home: kbytes in use: 418, limits (soft = 50000, hard = 60000)
inodes in use: 3, limits (soft = 0, hard = 0)
/var: kbytes in use: 384, limits (soft = 10000, hard = 12000)
inodes in use: 2, limits (soft = 0, hard = 0)


Como pode-se ver o processo é muito simples. O problema é quando o número de usuários é grande, tornando impossível gerenciar manualmente as quotas para cada um. Pode ser criado um script em shell para gerenciar isso, utilizando-se dos recursos do comando edquota, ou apenas utilizando os mesmos recursos via linha de comando.
Os principais recursos do edquota para isso são a cópia de quotas de um usuário para outro(s) e a definição não-interativa das quotas. Exemplos:

Copiar as quotas do usuário fulano para o usuário beltrano:

# edquota -p fulano beltrano


Copiar as quotas do usuário fulano para todos os usuários com UIDs entre 2000 e 10000:

# edquota -p fulano 2000-10000


Definir as quotas dos usuários fulano e beltrano para um limite soft de 5 MB no /var e 50 MB no /home e um limite hard de 6 MB no /var e 55 MB no /home:

# edquota -e /var:5000:6000 -e /home:50000:55000 fulano beltrano


Definir as quotas acima para todos os usuários com UIDs entre 2000 e 10000:

# edquota -e /var:5000:6000 -e /home:50000:55000 2000-10000


Remover os limites do usuário beltrano para o seu diretório home:

# edquota -e /home:0:0 beltrano


Para alterar o "grace period" deve ser utilizado o comando "edquota -t", o período pode ser definido independentemente para cada filesystem com suporte a quotas. Se especificado o período 0 (zero), será utilizado o padrão, que é 7 dias. Se especificado o período de um segundo, não haverá "grace period", ou seja, qualquer "soft limit" será entendido como "hard limit".

 

Atualizado em 03/02/04.

Heini Thomas Geib.
http://www2.unijui.edu.br/~heini

Voltar