12.12. Cotas de uso para sistemas de arquivos

O uso de cotas é uma funcionalidade do sistema operacional que permite limitar a quantidade de espaço de disco e/ou o número de arquivos que um usuário ou membros de um grupo podem alocar em um sistema de arquivos. Isto é mais frequente em sistemas de compartilhamento de tempo onde é desejável limitar a quantidade de recursos que qualquer usuário ou um grupo de usuários podem alocar. Isto previnirá um usuário ou um grupo de usuários de consumir todo o espaço em disco disponível.

12.12.1. Configurando seus sistema para utilizar cotas de disco

Antes de tentar utilizar cotas de disco, é necessário ter certeza que o suporte a cotas esteja configurado em seu kernel. Isto é feito adicionando as seguintes linhas ao seu arquivo de configuração do kernel:

options QUOTA

O kernel GENERIC não possui isto ativado, portanto, você terá que configurar, recompilar e instalar um kernel personalizado caso deseje utilizar cotas de disco. Por favor, visite a seção Capítulo 9 para ter mais informações sobre configuração de kernel.

Em seguida, você precisará ativar as cotas de disco no /etc/rc.conf. Isto é feito adicionando a linha:

enable_quotas="YES"

Para controlar o processo de inicialização de cotas, há uma variável de configuração adicional disponível. Normalmente, na inicialização é checada a integridade das cotas de cada um dos sistemas de arquivos pelo programa quotacheck(8). O quotacheck(8) facilita a certificação que dos dados das definições de cotas refletem adequadamente os dados no sistema de arquivos. Isto é um processo que consome tempo que irá afetar significamente o tempo que o seu sistema leva para iniciar. Se você gostaria de passar adiante neste passo há uma variável com este propósito para ser configurada no /etc/rc.conf:

check_quotas="NO"

Se você estiver utilizando um sistema FreeBSD anterior a versão 3.2-RELEASE, a configuração é simples e consiste em apenas uma variável. Configure o /etc/rc.conf como segue:

check_quotas="YES"

Finalmente, você precisará editar o arquivos /etc/fstab para ativar as cotas de disco para cada um dos sistemas de arquivos. Aqui é onde se pode ativar o uso de cotas para usuário ou para grupos de usuários para todos os sistemas de arquivos.

Para ativar o uso de cotas por usuário em um sistema de arquivos, adicione a opção userquota no campo de opções de uma entrada no /etc/fstab para o sistema de arquivos que você quer ativar as cotas. Por exemplo:

/dev/da1s2g   /home    ufs rw,userquota 1 2

Similar é o processo de ativação de cotas para grupos de usuários. Utilize a opção groupquota ao invés de userquota. Para ativar ambos os tipos de cotas, mude a entrada para:

/dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

Por padrão, os arquivos de cota são armazenados no diretório raiz de cada sistema de arquivos com o nome de quota.user e quota.group para cotas de usuário e de grupos respectivamente. Veja a página de manual do fstab(5) para mais informações. Embora a página de manual do fstab(5) diga que você pode especificar um local alternativo para os arquivos de cota, isto não é recomendado devido aos vários utilitários de gerenciamento de cotas não suportam esta possibilidade, o que ocasionaria em erro devido a estes utilitários buscarem pelos arquivos na raiz do sistema de arquivos.

Neste ponto você deve reiniciar seu sistema com seu novo kernel. O /etc/rc automaticamente executará os comandos apropriados para criar os arquivos de cota iniciais para todos os sistemas de arquivos que tiveram cotas ativadas no /etc/fstab, portanto, não é necessário criar qualquer arquivo de cota com tamanho zero manualmente.

No curso normal das operações você não deveria ser solicitado a executar os comandos quotacheck(8), quotaon(8), ou quotaoff(8) manualmente. Entretanto, você pode querer ler as páginas de manuais somente para estar familiarizado com a operação destes comandos.

12.12.2. Configurando os limites das cotas

Uma vez que você configurou e ativou o sistema de cotas, verifique se este está relamente funcional. Uma maneira fácil de fazer isso é executando:

# quota -v

Você deve ver uma linha de sumário sobre a utilização de disco e sobre os limites de cotas para cada um dos sistemas de arquivos que as cotas estão ativas.

Você agora está pronto para iniciar a definição dos limites de cotas com o comando edquota(8).

Você tem diversas opções para auxiliar em como você define os limites de quantidade de espaço em disco que um usuário ou um grupo de usuários pode alocar, e quantos arquivos eles podem criar. Você deve limitar as alocações se baseando no espaço em disco (cotas de blocos) ou pelo número de arquivos (cotas por inode) ou uma combinação de ambos. Cada um destes limites pode ser atingido em duas categorias: limites físicos e lógicos.

Um limite físico não pode ser excedido. Uma vez que o usuário atinge seu limite físico ele não poderá fazer alocação alguma no sistema de arquivos em questão. Por exemplo, se o usuário tem um limite físico de 500 blocos num sistema de arquivos e está utilizando atualmente o 490 blocos, o usuário poderá alocar somente 10 blocos adicionais. A tentativa de alocar 11 blocos adicionais resultará em falha.

Limites lógicos, por outro lado, podem ser excedidos por uma quantidade limitada de tempo. Este período é conhecido como período de favor (grace time), que é de uma semana, por padrão. Se um usuário estiver acima do seu limite lógico por um tempo maior que o tempo de favor suas cotas tornarão-se cotas de limite físico e nenhuma outra alocação será permitida. Quando um usuário apaga seus arquivos liberando espaço suficiente para estar abaixo dos limites das suas cotas lógicas, o tempo de favor é reiniciado.

À seguir, temos um exemplo do que você pode ver quando executar o comando edquota(8). Quando o comando edquota(8) é chamado, você é direcionado ao editor especificado pela variável de ambiente EDITOR ou ao editor vi se a configuração da varíavel EDITOR não foi alterada, para permitir que você edite os limites de cotas.

# edquota -u test
Quotas for user test:
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
        inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
        inodes in use: 0, limits (soft = 50, hard = 60)

Você normalmente verá duas linhas para cada sistema de arquivos que tenham cotas ativadas. Uma linha para os limites de blocos e uma para os limites de inode. Simplesmente, modifique os valores que você desejar para modificar os limites de cotas. Por exemplo, para aumentar o limite de blocos deste usuário de 50 e o limite físicp de 75 para, respectivamente, 500 e 600, mude:

/usr: blocks in use: 65, limits (soft = 50, hard = 75)

para:

 /usr: blocks in use: 65, limits (soft = 500, hard = 600)

Os novos limites de cotas será definidos assim que você sair do editor.

Algumas vezes é desejável definir limites de cotas para uma faixa de UIDs. Isso pode ser feito pelo uso da opção -p no comando edquota(8). Primeiro, defina o limite de cotas desejado para um usuário, e então execute edquota -p protouser startuid-enduid. Por exemplo, se o usuário test tem os limites de cotas desejado, o seguinte comando pode ser utilizado para duplicar estes limites para os usuários com UIDs de 10,000 até 19,999, com:

# edquota -p test 10000-19999

Para mais informações veja a página de manual do edquota(8).

12.12.3. Verificando os limites de cotas e a utilização de disco

Você pode utilizar tanto o comando quota(1) quanto o repquota(8) para verificar os limites de cotas e a utilização do espaço de disco. O comando quota(1) pode ser utilizado para verificar individualmente as cotas e a utilização de disco de um usuário ou de um grupo de usuários. Um usuário pode apenas examinar suas cotas próprias, e as cotas para o grupo no qual ele é membro. Só o superusuário pode ver as cotas de todos os usuários e de todos os grupos de usuários. O comando repquota(8) pode ser utilizado para conseguir um sumário de todas as cotas e utilização de disco para os sistemas de arquivos com cotas ativas.

À seguir, temos um exemplo de saída do comando quota -v para um usuário que tem limites definidos em dois sistemas de arquivos.

Disk quotas for user test (uid 1002):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
           /usr      65*     50      75   5days       7      50      60
       /usr/var       0      50      75               0      50      60

No sitema de arquivos /usr, no exemplo dado, o usuário está acima do seu limite lógico de 50 blocos em 15 blocos e tem 5 dias restantes para que o tempo de favor acabe. Note o asterísco *, ele indica que o usuário está acima dos seus limites de cotas.

Normalmente, os sitemas de arquivos que o usuário não fez utilização de espaço em disco não serão mostrados na saída do comando quota(1), mesmo se este tiver limites de cotas definidos neste sistema de arquivos. A opções -v irá listar estes sistemas de arquivos, como o /usr/var no exemplo em discussão.

12.12.4. Uso de cotas em sistemas de arquivos NFS

Cotas podem ser utilizadas pelo subsistema do servidor NFS. O processo em segundo plano rpc.rquotad(8) faz com que as informações de cota estejam disponíveis ao comando quota(1) nos clientes NFS, permitindo aos usuários ver suas estatísticas de cotas em suas máquinas.

Ative o rpc.rquotad no /etc/inetd.conf como abaixo:

rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

Agora, reinicie o inetd:

# kill -HUP `cat /var/run/inetd.pid`

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.