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