# Guia do Linux/Avançado/Restrições de acesso, recursos e serviços/Limitando o uso de espaço em disco (quotas)
## Limitando o uso de espaço em disco (quotas)

O sistema de quotas é usado para limitar o espaço em disco disponível a usuários/grupo. O uso de partições independentes para o diretório /home e outros montados separadamente não é muito eficaz porque muitos usuários serão prejudicados se a partição for totalmente ocupada e alguns possuem requerimentos de uso maior do que outros.
O suporte a Quotas deve estar compilado no kernel (seção FileSystems) e o sistema de arquivos deverá ser do tipo ext2, "ext3" e "ext4" ou XFS para funcionar. A partir do kernel 2.6, foi incluído suporte a RaiserFS.

### Instalando o sistema de quotas

Abaixo o passo a passo para a instalação de quotas em seu sistema:
* Recompile seu kernel com suporte a quota. Habilite a opção "Quota support" na seção "FileSystems" na configuração de recursos do seu kernel.
* Instale o pacote quota no sistema (apt-get install quota).
* Habilite a quota para os sistemas de arquivos que deseja restringir no arquivo /etc/fstab:
O sistema de arquivos /dev/hda1 não terá suporte a quota, /dev/hda3 terá suporte a quotas de usuários (usrquota), /dev/hda4 terá suporte a quotas de grupos (grpquota) e /dev/hda5 terá suporte a ambos. Por padrão é assumido que os arquivos de controle de quota estão localizados no ponto de montagem da partição com os nomes quota.user e quota.group.
* Agora será necessário criar os arquivos quota.user e quota.group no ponto de montagem de cada partição ext2 acima que utilizará o recurso de quotas. O arquivo quota.user controla as quotas de usuários e quota.group controla as quotas de grupos.
** Crie um arquivo vazio quota.user em / (terá suporte somente a quota de usuários, veja a opção de montagem no /etc/fstab): touch /quota.user ou echo -n >/quota.user.
** Crie um arquivo vazio quota.group em /usr (terá suporte somente a quota de grupos): touch /usr/quota.group ou echo -n >/usr/quota.group.
** Crie um arquivo vazio quota.user e quota.group em /pub (este sistema de arquivos tem suporte a ambos os tipos de quota): touch /pub/quota.user /pub/quota.group.
Por motivos de segurança, as permissões dos arquivos de controle de quota quota.user e quota.group devem ser leitura/gravação ao usuário root e sem permissões para grupo/outros usuários: chmod 0600 /quota.user /quota.group. OBS: Se deseja utilizar o quota versão 1, certifique-se que não existem os arquivos chamados aquota.user e aquota.group no diretório raíz de sua partição. Se eles estiverem disponíveis, os utilitários de quota utilizarão esta versão como padrão, atualmente o kernel 2.4 possui somente suporte a quota versão 1. A versão 2 do quota checa corrompimento dos arquivos de dados de quota e trabalha mais rápido em partições grandes. São necessários patches da série "ac" (Alan Cox) para usar a versão 2 do quota.
* Entre em modo monousuário init 1, desmonte os sistemas de arquivos que utilizarão a quota e monte-os novamente (isto serve para ativar as opções de quota). Alternativamente, execute umount -a (para desmontar todos os sistemas de arquivos) e mount -a para remontar todos.
Se você ativou as quotas para o sistema de arquivos / (como em nosso exemplo) será necessário reiniciar o sistema.
* O próximo passo é scanear o disco para criar os dados para as partições com suporte a quota (ativadas no /etc/fstab):
O parâmetro -a diz para checar todas as partições com suporte a quota no arquivo /etc/mtab, -u para checar quotas de usuários, -g para checar grupos e -v para mostrar o progresso da checagem da partição. Na primeira execução é mostrado uma mensagem de erro de arquivo quota.user/quota.group corrompido, mas isto é normal porque o arquivo anterior tem tamanho zero. Estes nomes também servem para o quotacheck "auto-detectar" a versão do sistema de quota usada no sistema de arquivos. OBS: Certamente será necessário "forçar" a remontagem como somente leitura do sistema de arquivos / com a opção -m para o quotacheck criar as configurações de quota nesta partição.
* Agora resta ativar o suporte as quotas de disco em todas as partições (-a) com recurso de quota especificado (no /etc/mtab):
As opções possuem o mesmo significado do comando quotacheck. O utilitário quotaoff serve para desativar quotas de usuários e usa as mesmas opções do quotaon. Estes três utilitários somente podem ser usados pelo usuário root. As opções de quota podem ser especificadas independente para cada sistema de arquivos:
A atualização de quotas durante a gravação/exclusão de arquivos é feita automaticamente. O utilitário quotacheck deverá ser executado sempre que o sistema de quotas for desativado (por não haver atualização automática dos dados de uso de disco) ou quando ocorrerem falhas de disco. Na distribuição Debian o quotacheck é disparado sempre que necessário após as situações de checagem de disco. As quotas de todas as partições também são ativadas automaticamente pelo script /etc/init.d/quota e /etc/init.d/quotarpc. Em sistemas que utilizam NFS e possuem sistemas de arquivos exportados em /etc/exports, o daemon rpc.rquotad deverá ser carregado. Sua função é fornecer os detalhes de quota dos sistemas de arquivos locais exportados para as máquinas clientes.

### Editando quotas de usuários/grupos

O programa edquota é usado pelo root para editar as quotas de usuários/grupos. Por padrão, todos os usuários/grupos do sistema não possuem quotas. Sua sintaxe é a seguinte edquota [opções] [usuário/grupo] As opções podem ser:

#### -u

    Edita a quota do usuário especificado (esta é a padrão).

#### -g

    Edita a quota de grupo especificado.

#### -r

    Permite editar a quota de sistemas de arquivos remotos através do daemon rpc.rquotad.

#### -p [usuário/grupo]

    Usa os valores especificados para o usuário/grupo para definir a nova quota, sem necessidade de entrar no modo de edição.

#### -t

    Permite modificar o valor de tolerância dos limites que ultrapassam soft até que sejam bloqueados. Durante o tempo de tolerância, serão enviados somente avisos sobre a quota ultrapassada sem bloquear totalmente a gravação de arquivos (até que o limite hard seja atingido ou o tempo de tolerância seja ultrapassado).
Quando a quota soft do usuário/grupo é estourada, a mensagem "warning: user disk quota excedeed" será exibida. Quando a quota hard é ultrapassada, a gravação atual é interrompida e a mensagem "write failed, user disk limit reatched" é mostrada ao usuário. Nenhuma nova gravação que ultrapasse a quota hard é permitida Por exemplo, para modificar a quota do usuário gleydson: edquota gleydson
O editor de textos usado poderá ser modificado através da variável $EDITOR. Abaixo a explicação destes campos:
** Filesystem - Sistema de arquivos que terá a quota do usuário/grupo editada. As restrições se aplicam individualmente de acordo com o sistema de arquivos.
** blocks - Número máximo de blocos (especificado em Kbytes) que o usuário possui atualmente. O usuário gleydson está usando atualmente 504944 Kbytes.
*** soft - Restrição mínima de espaço em disco usado. Atualmente 500100 Kb.
*** hard - Limite máximo aceitável de uso em disco para o usuário/grupo sendo editado. 600000 Kb atualmente. O sistema de quotas nunca deixará este limite ser ultrapassado.
** inodes - Número máximo de arquivos que o usuário possui atualmente na partição especificada. O usuário gleydson possui atualmente 10868 arquivos na partição /pub.
*** soft - Restrição mínima de número de arquivos que o usuário/grupo possui no disco. Atualmente em 15.000.
*** hard - Restrição máxima de número de arquivos que o usuário/grupo possui no disco. Atualmente em 20.000.
Para desativar as restrições coloque "0" no campo soft ou hard. Quando o limite soft é atingido, o usuário é alertado por ter ultrapassado sua quota com a mensagem "warning: user quota excedeed" (quota do usuário excedida). O programa setquota é uma programa não-interativo para edição de quotas para ser usado diretamente na linha de comando ou em shell scripts. Após ultrapassar o limite soft, começa a contagem do tempo para que este passe a valer como limite hard (o máximo aceitável e que nunca poderá ser ultrapassado). O comando edquota -t serve para modificar estes valores na partição especificada::
Abaixo a explicação destes campos:
** Filesystem - Sistema de arquivos que terá o período de tolerância modificado.
** Block grade period - Tempo máximo de tolerância para usuários/grupos que ultrapassaram sua quota soft de espaço em disco antes de passar a valer como hard. No exemplo, o usuário tem 2 dias para excluir possíveis arquivos ou contactar o administrador para redimensionar o tamanho de quota. O valor padrão é 7 dias.
** Inode grade period - Tempo máximo de tolerância para usuários/grupos que ultrapassaram sua quota soft de número de arquivos gravados antes de passar a valer como hard. No exemplo, o usuário tem 7 dias para excluir possíveis arquivos ou contactar o administrador para analisar seu tamanho de quota. O valor padrão é 7 dias.
OBS1: - O comando quotacheck deverá ser executado na partição sempre que novas restrições/limites forem editados com o edquota. Isto atualiza os arquivos quota.user e quota.group. Lembre-se de desativar o sistema de quotas (quotaoff -ugv /partição) antes de executar este comando (para liberar totalmente a partição, quotacheck remonta a partição somente para leitura quando é executado). Por este motivo é recomendável fazer isso em modo monousuário. OBS2: Quando o limite soft (suave) é excedido, o sistema começará a lhe mostrar mensagens alertando a passagem do limite (para lhe dar tempo de eliminar arquivos ou não ser pego desprevenido com o bloqueio de gravação) porque o limite hard (rígido) nunca poderá ser ultrapassado. OBS3: - O tempo de tolerância restante ao usuário/grupo quando a quota é ultrapassada poder ser visualizada com o comando quota (veja [#s-d-restr-quotas-checando Verificando a quota disponível ao usuário, Seção 19.12.4]). OBS4: - Quando o usuário exclui seus arquivos e volta a ficar abaixo dos limites soft da quota, o tempo de tolerância é resetado aos valores padrões (especificados por edquota -t. OBS5: - As quotas de espaço em disco podem ser definidas automaticamente para os novos usuários adicionados ao sistema colocando o espaço em disco na variável QUOTAUSER=numero do arquivo /etc/adduser.conf. Isto será equivalente a digitar o comando edquota -q QUOTA novo_usuário.

### Modificando a quota de todos os usuários de uma vez

Editar manualmente a quota de cada usuário é uma tarefa trabalhosa quando se está instalando quotas e possui muitos usuários, existe uma maneira mais fácil de fazer isso usando o próprio edquota e um usuário com a quota já definida. Por exemplo, instalamos quota em nosso sistema e queremos que todos os 300 usuários tenham a quota de usuário de 10MB e de grupo de 15MB:
* Criamos um usuário com esta quota usando o edquota (como descrito em [#s-d-restr-quotas-editando Editando quotas de usuários/grupos, Seção 19.12.2]). Como exemplo usaremos o usuário teste_user. Use o comando quota teste_user para verificar se as quotas para este usuário está correta.
* Criamos um script que modifique a quota padrão de todos os usuários do sistema de uma só vez:
Pronto, verifique a quota de todos os usuários com o comando repquota -a.

### Verificando a quota disponível ao usuário

Execute o comando quota mostra os limites de usuários/grupos e a tolerância restante antes do limite soft se tornar rígido. Abaixo alguns exemplos descritivos deste comando:
Os campos tem o seguinte significado:
** Filesystem - Sistema de arquivos.
** blocks - Número de blocos usados atualmente na partição (em Kb). O "*" indica que o limite foi ultrapassado. Atualmente em 504944.
*** quota - Limite suave (soft) de espaço na partição que o usuário/grupo possui. Atualmente 500100. O valor 0 indica que o usuário/grupo não possui restrições.
*** limit - Limite máximo (hard) de espaço na partição que o usuário/grupo possui. Atualmente em 600000. O valor 0 indica que o usuário/grupo não possui restrições.
*** grace - Tolerância antes que o limite soft passe a valer como hard quando o espaço em disco é ultrapassado. Este usuário tem 5 minutos restantes para que isto ocorra. Quando o valor soft volta a ficar abaixo da quota, a tolerância é resetada.
O parâmetro "none" indica que o tempo de tolerância expirou (caso existam limitações de quota que foram ultrapassadas) ou que o usuário/grupo não possui restrições. Veja se existe um "*" no campo blocks.
** files - Número máximo de arquivos que usuário/grupo possui atualmente na partição. Um "*' indica que o limite foi ultrapassado. Atualmente em 10868.
*** quota - Limite suave (soft) de número de arquivos na partição que o usuário/grupo possui. Atualmente ilimitado.
*** limit - Limite máximo (hard) de número de arquivos na partição que o usuário/grupo possui. Atualmente ilimitado.
*** grace - Tolerância antes que o limite soft passe a valer como hard para o número de arquivos ultrapassados. Como não existe quota para número de arquivos, não existe tolerância. A tolerância é resetada aos valores padrões quando o valor soft volta a ficar abaixo da quota.
A quota de outros usuários/grupos podem ser visualizadas especificando as opções -u (padrão) e -g na linha de comando respectivamente. A opção -v permite visualizar quotas em sistemas de arquivos não alocados e -q mostra somente uma mensagem dizendo se o usuário está ou não dentro de sua quota:
Por motivos de segurança, você não poderá visualizar as quotas de outros usuários e grupos que não pertence (exceto para o usuário root).

### Verificando a quota de todos os usuários/grupos do sistema

Quando precisamos verificar o uso de quotas de todos os usuários/grupos do sistema o quota se torna incômodo e pouco prático. O comando repquota lista está disponível ao administrador para facilitar esta tarefa. Sua listagem é organizada por partições listando dados adicionais como grace time e aceita as mesmas opções dos utilitários quotaon e quotaoff. Primeiro são listados as restrições de usuários e depois de grupos para a partição. (tolerância) As opções aceitas por este utilitário tem o mesmo significado das opções do quotaon e quotaoff:
Um sinal de " -" no segundo campo indica quota ultrapassada ou no espaço em disco, "- ' em número de arquivos e " " em ambos. Como vimos acima, o este comando também lista o número de arquivos e bytes pertencentes a cada usuário na partição (mesmo não sendo monitorado pelas restrições de quota), isto ajuda a monitorar ações suspeitas com a excedência de espaço em disco de determinados usuários/grupos do sistema. Um exemplo é alguém que esteja fora da quota e abusando de seu usuário/grupo para uso excessivo de espaço em disco sem seu conhecimento. OBS: Este utilitário pode ser executado por qualquer usuário no sistema e mostrar o uso de quotas de usuários/grupos que não deveria ter acesso. É recomendado deve ter permissões de leitura/gravação somente para o usuário root e sem permissões para grupo/outros usuários.

### Avisando usuários sobre o estouro de quota

Avisos sobre quota ultrapassada podem ser enviadas automaticamente a todos os usuários pelo utilitário warnquota. Ele poderá ser executado periodicamente através do cron (por padrão isto é feito diariamente na distribuição Debian pelo script /etc/cron.daily/quota). Dados adicionais sobre o envio das mensagens devem ser especificados no arquivo /etc/warnquota.conf seu formato é o seguinte:
O e-mail é enviado aos usuários (e usuários que pertencem a grupos com a quota excedida) com o seguinte formato: