Monday, September 18, 2006

Linux - Quota de Disco

Quotas de Disco permitem controlar o uso do disco por usuário ou grupo, ou por ambos ( usuário e grupo ).
São normalmente utilizadas em sistemas multi-usuários e não em sistemas mono-usuário ( Desktop )
E é gerenciada somente pelo usuário root.

Atualmente temos 3 tipos de Quotas de Disco: vfsold (versão 1), vfsv0 (versão 2 ) e xfs (quota de disco para o sistema de arquivos XFS).
Neste artigos iremos cobrir a versão mais utilizada: vfsv0 ( versão 2 ).

Conteúdo

1 - Habilitar Quotas de Disco
2 - Editar limites de Quotas de Disco
3 - Checar Quotas de Disco
4 - Gerenciar Quotas Ultrapassadas
5 - Aviso de limite de quota ultrapassado

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

1 - Habilitar Quotas de Disco

Para habilitar Quota de Disco é necessário que seu kernel tenha suporte.
Os kernel 2.4 e 2.6 tem total suporte necessário. Já versões anteriores do kernel tem suporte incompleto a Quota de disco, e será necessário recompilar o kernel para ter suporte a Quota de Disco.

Neste artigo estou utilizando o kernel 2.6.15-23-386.

Após isso é necessário instalar as ferramentas para manipular as quotas.

Utilizando a ferramenta APT-GET:

# apt-get install quota

Agora vamos habilitar quota de disco para a partição de disco que queremos utilizar quotas.
Para isso, é necessário editar o arquivo de configuração das tabelas de sistemas de arquivos: /etc/fstab
E incluir as opções "usrquota" (para quota por usuários), e/ou "grpquota" (para quota por grupos).

No exemplo abaixo estamos habilitando quota de disco para usuários e grupos na partição /dev/hda4 montado em /share:

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/hda2 / reiserfs notail 0 1
/dev/hda4 /share ext3 defaults,usrquota,grpquota 0 2
/dev/hda3 /mnt/win98 vfat defaults,utf8,umask=007,gid=46 0 1
/dev/hda1 none swap sw 0 0
/dev/hdd /media/cdrom0 udf,iso9660 user,noauto 0 0

Obs.: Somente sistemas de arquivos ext2, ext3 e xfs possuem suporte a quota de disco no Linux.

Após editar o arquivo /etc/fstab e habilitar a quota de disco no ponto de montagem /share, será necessário remontar para aplicar as alterações feitas.

# mount -o remount,rw /share

Obs.: Se você incluir quota de disco para o diretório raiz do sistema "/", será necessário reiniciar o sistema.

Execute o comando mount para verificar se as opções de quotas estão habilitadas.

Exemplo:

# mount | grep share
/dev/hda4 on /share type ext3 (rw,usrquota,grpquota)

Utilizando os comandos quotachek, quotaon e quotaoff:

O comando quotacheck é utilizado para checar quotas de disco em todos os sistemas de arquivos em /etc/fstab.
E também é utilizado para criar os arquivos com informações sobre as quotas: aquota.user e aquota.group

O comando quotaon é utilizado para habilitar a checagem de quota de disco.
Já o comando quotaoff desabilita quotas de disco no sistema.

Ambos os comandos quotacheck e quotaon são normalmente incluídos nos scripts de inicialização do sistema, para checar e habilitar a quota de disco após você reiniciar seu computador.

Agora iremos criar os arquivos com informações sobre as quotas dos usuários e grupos.

No exemplo abaixo as seguintes opções serão passada para os comandos quotacheck e quotaon:

-a Checa todos os sistemas de arquivos em /etc/fstab que estão habilitados como "automount".
-u Checa quotas de usuários ( opção padrão )
-g Checa quotas de grupos
-v Mostra mais detalhes na saída do comando ( modo verbose )

Então vamos aos comandos:

# quotacheck -augv
quotacheck: Quota for users is enabled on mountpoint /share so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.

# quotaon -augv
quotaon: using /share/aquota.group on /dev/hda4 [/share]: Device or resource busy
quotaon: using /share/aquota.user on /dev/hda4 [/share]: Device or resource busy

Agora vamos verificar se os arquivos aquota.user e aquota.group foram criados em /share:

# cd /share
# ls -lah
total 37K
drwxr-xr-x 3 root root 4,0K 2006-09-16 17:10 .
drwxr-xr-x 23 root root 616 2006-09-16 14:16 ..
-rw------- 1 root root 6,0K 2006-09-16 17:10 aquota.group
-rw------- 1 root root 6,0K 2006-09-16 17:10 aquota.user
drwx------ 2 root root 16K 2006-09-16 14:13 lost+found

Obs.: Perceba que os arquivos aquota.user e aquota.group tem permissão de leitura e escrita somente para o usuário root, já que somente o usuário root pode gerenciar quotas no sistema.

2 - Editar limites de Quotas de Disco

Os arquivos aquota.user e aquota.group são arquivos binários, e não podem ser editados diretamente por um editor de textos.
Para editar o limite de quotas de disco, utilizamos o comando: edquota ( de editar quota )
O comando edquota extrai as informações dos arquivos aquota.user e aquota.group, em todos os pontos de montagem que as quotas estão habilitadas, e cria um arquivo temporário, e abre um editor para para que você possa ajustar as quotas.
Consulte o manual para mais informações sobre o comando edquota.
Sintaxe:
edquota [ -u | -g ] [ -F format-name ] [ -f filesystem ] -t

Exemplo:

# edquota roberto

GNU nano 1.3.10 Arquivo: /tmp//EdP.ac3bZ0u

Disk quotas for user roberto (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/hda4 10020 12000 13000 3 5 6

Explicando para que serve cada coluna:

Filesystem - Partição que terá a quota do usuário/grupo editada. No exemplo /dev/hda4.
blocks - Número máximo de blocos (especificado em Kbytes) que o usuário possui atualmente. No exemplo 10020 Kbytes.
soft - Restrição mínima de espaço em disco usado. No exemplo 12000 Kbytes.
hard - Limite máximo aceitável de uso em disco para o usuário/grupo sendo editado. O sistema de quotas nunca deixará este limite ser ultrapassado. No exemplo 13000 Kbytes.
inodes - Número máximo de arquivos ( inodes ) que o usuário possui atualmente na partição especificada. No exemplo 3 inodes.
soft - Restrição mínima de número de arquivos que o usuário/grupo possui no disco. No exemplo 5 inodes.
hard - Restrição máxima de número de arquivos que o usuário/grupo possui no disco. No exemplo 6 inodes.

Ou seja, temos:

- O sistema de arquivos onde a quota está habilitada. ( Filesystem )
- Limite soft e hard para o número máximo de blocos.
- Limite soft e hard para o número máximo de inodes.

Quando o limite soft é atingido, o usuário é alertado por ter ultrapassado sua quota com a mensagem "hda4: warning, user file quota exceeded." (quota do usuário excedida).
Quando o limite hard é atingido, o usuário é alertado com a mensagem "hda4: write failed, user file limit reached." e posteriormente com a mensagem "mkdir: não é possível criar o diretório `novo_dir': Disk quota exceeded". E o usuário será bloqueado para criar novos arquivos ou diretórios. O limite hard nunca será ultrapassado.

Para desativar as restrições de quota coloque "0" no campo soft ou hard.

O limite soft, é válido somente por um determinado tempo, após expirar este tempo, o valor do limite soft é utilizado como limite hard. Lembrando que o hard nunca poderá ser ultrapassado.

Para alterar o tempo que o limite soft é expirado, utilizamos o comando edquota -t para modificar estes valores na partição especificada:

# edquota -t

GNU nano 1.3.10 Arquivo: /tmp//EdP.aE3dnlb

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda4 3days 7days

Explicando as colunas:

Filesystem - Sistema de arquivos que terá o período de tolerância modificado.
Block grace 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 3 dias para excluir possíveis arquivos ou contactar o administrador para redimensionar o tamanho de quota. O valor padrão é 7 dias.
Inode grace 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.

Ou seja, temos:

- O sistema de arquivos onde a tolerância está habilitada. ( Filesystem )
- O número de dias para o limite soft para o número máximo de blocos.
- O número de dias para o limite soft para o número máximo de inodes.

Observações:
- O comando quotacheck deverá ser executado na partição sempre que novas restrições/limites forem editados com o edquota. Isto atualiza os arquivos aquota.user e aquota.group.

Primeiro desative o sistema de quotas, com o comando:

# quotaoff -augv

Execute o comando para checar as quotas:

# quotacheck -augv

Após isso é necessário ativar as quotas com o comando:

# quotaon -augv

Por este motivo é recomendável fazer isso em modo monousuário. Se você possuir quotas de disco na partição raiz "/" será necessário reiniciar o sistema.

- Para dar tempo de eliminar arquivos e não ser pego desprevenido com o bloqueio de gravação do limite hard. O sistema lhe mostrará mensagens alertando que o limite soft foi ultrapassado e que está próximo de atingir o limite hard.
Lembrando que o limite hard nunca poderá ser ultrapassado.

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

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

Copiando quotas

Agora imagine você editando quotas de disco para cada usuário. Seria uma tarefa trabalhosa se você tiver muitos usuários.
Para resolver este problema utilizamos o parâmetro -p do comando edquota.
Ele duplica a quota do usuário especificado para cada um dos outros usuáros especificados.
Este é o mecanismo normalmente utilizado para clonar quotas de um usuário para um grupos de usuários.

Exemplo:

# edquota -p roberto mario andre jsilva

Limites para Grupo

Você pode também usar o comando edquota para retringir o espaço em disco para o grupo dono dos arquivos.
Por exemplo: Podemos limitar o total de arquivos criados ou espaço em disco para todos os membros do grupo devel para 50 MB e 5000 arquivos, como mostra o exemplo abaixo:

# edquota -g devel

3 - Checar Quotas de Disco

O comando quota -v é utilizado para exibir a quota para o usuário passado como parâmetro, e o sistema de arquivos ao qual o usuário esta associado.

Exemplo:

# quota -v roberto
Disk quotas for user roberto (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda4 10028 12000 13000 4 5 6

Quando o usuário ultrapassar o limite da quota, será exibida um "*" ( asterisco ) ao lado do limite ultrapassado.

Exemplo:

# quota -v roberto
Disk quotas for user roberto (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda4 10028 12000 13000 6* 5 6

Obs.: Note na coluna "files" o asterisco "*" ao lado do número 6, indicando que a quota foi ultrapassada.

4 - Gerenciar Quotas Ultrapassadas

Quando precisamos gerenciar e verificar o uso de quotas de todos os usuários/grupos do sistema o comando quota se torna trabalhoso.
Para facilitar podemos utilizar o comando repquota. Que faz uma listagem organizada por partições, listando dados como grace time, limites soft e hard para blocos e inodes, podendo mostrar as quotas de todos os usuários e grupos do sistema.

Exemplo:

# repquota -augv
*** Report for user quotas on device /dev/hda4
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 141244 0 0 4 0 0
roberto -+ 10028 12000 13000 6 5 6 6days

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000

*** Report for group quotas on device /dev/hda4
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 141244 0 0 4 0 0
roberto -- 10028 0 0 6 0 0

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000

5 - Aviso de limite de quota ultrapassado

O comando warnquota checa a quota de disco para cada sistema de arquivos com quota ativada e envia e-mails com uma mensagem de aviso para os usuários que ultrapassaram o limite soft estabelecido.
Quando um grupo ultrapassa o limite soft estabelecido, um e-mail é enviado para o usuário especificado em /etc/quotagrpadmins.
Normalmente o comando warnquota é rodado periodicamente como um serviço no utilitário cron.
Consulte o manual do comando warnquota para mais informações.

Sintaxe:
warnquota [ -ugsid ] [ -F quotaformat ] [ -q quotatab ] [ -c configfile ] [ -a adminsfile ]

Fim.

Referência:
IBM DeveloperWorks - Linux LPI - Tópico 104.
Guia Foca Linux

Recursos:
Quota HOWTO

2 Comments:

At 11:58 AM, Blogger Tiago Siqueira Asp said...

Boa Tarde Roberto!
Muito obrigado pelo tutorial, me ajudou muito aqui na empresa.
Porém estou com as seguintes duvidas e gostaria de saber se o colega poderia me ajudar.
Tenho uma rede windows que acessa o servidor Fedora pelo samba.
Os usuários utilizam o Thunderbird como cliente de mail e a pasta de arquivamento das mensagens esta na pasta do usuario no samba.
Estou utilizando o warnquota para avisar-los quando ultrapassam o limite, porém ao ativar o serviço retorna uma mensagem informando que não foi possivel encontrar o quotatab.Como posso resolver?
obrigado
Tiago Siqueira Asp
tiago@grupotecplan.com

 
At 12:08 PM, Blogger Evandro Villaça said...

Muito legal, tirou minha dúvida...estou estudando para tirar a certificação LPI 101 e 102, vou entrar em um curso preparatório, vc acha que vale a pena investir nisso, e outra pergunta, vc teria algum material de apoio para me indicar...

Grato

Evandro Villaça

 

Post a Comment

<< Home