Implementando quotas de disco no Linux

O Quota é um recurso muito útil em servidores de terminais, servidores web e servidores de arquivos com muitos usuários. Imagine, por exemplo, um servidor LTSP com 20 terminais, usado por 300 usuários diferentes. Como impedir que alguns poucos usuários comecem a baixar um monte de filmes e músicas em MP3, entupindo o HD do servidor?

Através do Quota é possível limitar a quantidade de espaço em disco disponível para cada usuário, reservando 50 MB para cada aluno, por exemplo. O uso mais comum do Quota é utilizar uma partição “/home” separada e ativar o Quota para ela. Isso faz todo o sentido, pois, por default, os usuários podem gravar arquivos apenas dentro da pasta home. Entretanto, é possível usar o Quota em qualquer partição, como, por exemplo, em um servidor web compartilhado entre vários virtual hosts, onde a partição de dados está montada no diretório “/var/www”.

Ao ser ativado, o Quota procura por todos os arquivos de cada usuário dentro da partição, não por uma pasta específica. O sistema de Quotas funciona mesmo que os arquivos de um determinado usuário estejam espalhados por várias pastas.

Originalmente, apenas os sistemas de arquivos EXT2 e EXT3 ofereciam suporte ao Quota nativamente, mas, a partir do Kernel 2.6 (usado nas distribuições atuais), foi incluído também suporte para o ReiserFS. É possível instalar o suporte a Quota no ReiserFS em distribuições antigas, baseadas no Kernel 2.4, através de um patch para o Kernel.

Para usar o Quota, o ideal é dividir o HD em três partições: uma partição menor (de 10 ou 20 GB) para a instalação do sistema, a partição swap e outra partição maior (englobando o restante do espaço do HD) para o diretório “/var/www”, “/home” ou outra pasta onde ficarão armazenados os arquivos dos usuários, para a qual o quota será ativado.

No Quota existem dois limites que podem ser estabelecidos, o soft limit e o hard limit. O hard limit é o limite de espaço em si, digamos, 1000 MB para cada usuário. Quando o hard limit é atingido, a gravação de novos arquivos é bloqueada, se necessário interrompendo a transferência:

O soft limit é um limite de advertência, um pouco inferior ao valor do hard limit. Se o hard limit é de 1000 MB, o soft limit poderia ser 500 ou 800 MB, por exemplo. Sempre que superar o soft limit, o usuário receberá uma mensagem de alerta, mas ainda poderá gravar mais dados até que atinja o hard limit. Você pode especificar também um grace period, que será o tempo máximo em que o usuário poderá ficar acima do soft limit (uma semana, por exemplo).

Passado o período, o usuário será obrigado a apagar alguma coisa e voltar a ocupar menos que o valor estabelecido no soft limit antes de poder gravar qualquer novo arquivo. Nesse caso, a conta fica apenas temporariamente bloqueada para a gravação de novos arquivos, nenhum arquivo do usuário é deletado pelo Quota.

Um problema comum relacionado ao uso do Quota em servidores de terminais é que o KDE deixa de abrir quando o limite de espaço do usuário é atingido; ele precisa sempre de algum espaço disponível para criar os arquivos temporários que armazenam as informações da sessão. Nesses casos, você (administrador) vai precisar deletar manualmente alguns arquivos ou aumentar a quota do usuário para que ele possa voltar a usar a conta.

Você pode estabelecer os mesmos limites também para os grupos e inclusive combinar as duas limitações. Você pode, por exemplo, permitir que cada usuário do grupo “alunos” use 5 GB de espaço em disco, desde que o grupo todo não use mais do que 50 GB.

Configuração inicial

Para que o Quota funcione, é necessário instalar os pacotes “quota” e “quotatool“, que contêm um conjunto de utilitários usados para configurar e verificar as quotas de disco. No Debian, os dois podem ser instalados via apt-get:

# apt-get install quota
# apt-get install quotatool

No Fedora, você precisa apenas instalar o pacote “quota” usando o yum:

# yum install quota

Em seguida, é necessário carregar o módulo “quota_v2“, que ativa o suporte necessário no Kernel:

# modprobe quota_v2

Para que ele seja carregado automaticamente durante o boot, adicione a linha “quota_v2” no final do arquivo “/etc/modules“, ou adicione o próprio comando “modprobe quota_v2″ no final do arquivo “/etc/rc.d/rc.local” ou “/etc/init.d/bootmisc.sh” (esse passo não é necessário nas versões recentes do Fedora, onde o suporte a Quota vem compilado no executável principal do Kernel).

Com o módulo carregado, o primeiro passo da configuração é alterar a entrada no fstab referente à partição, de modo que o suporte a quotas de disco seja ativado. Abra o arquivo “/etc/fstab“, localize a linha referente à partição e adicione os parâmetros “usrquota,grpquota” logo após o “defaults”. Se você está ativando o Quota para a partição “/home”, por exemplo, a linha seria parecida com:

/dev/hda2 /home ext3 defaults 0 2

Depois da alteração, a linha ficaria:

/dev/hda2 /home ext3 defaults,usrquota,grpquota 0 2

Ao usar uma partição formatada em ReiserFS, a linha ficaria:

/dev/hda2 /home reiserfs defaults,usrquota,grpquota 0 2

No caso de um servidor web, onde os diretórios dos sites são concentrados na pasta “/var/www/”, a configuração seria exatamente a mesma, mudando apenas a pasta onde a partição (onde as quotas serão aplicadas) será montada.

Se o diretório home (ou qualquer outro diretório onde você deseja aplicar as quotas) faz parte do diretório raiz e você deseja primeiro migrá-lo para uma partição separada, o processo é o seguinte:

a) Instale o novo HD, particione-o e formate a partição de destino.

b) Monte a partição de destino em um diretório temporário usando o comando mount, como em:

# mount /dev/sdb2 /mnt/sdb2

c) Certifique-se de que nenhum usuário ou processo está usando o servidor. Se necessário, reinicie a máquina e desconecte-a da rede.

d) Copie todos os arquivos do diretório que está sendo movido para o raiz da nova partição, usando o comando “cp -a” (que copia recursivamente e mantém as permissões de acesso), como em:

# cp -a /home/* /mnt/sdb2/

e) Desmonte a partição e monte-a novamente no diretório de destino, como em:

# umount /mnt/sdb2
# mount /dev/sdb2 /home

f) Verifique se todos os arquivos e diretórios foram copiados para os locais corretos. Montar a partição sobre o diretório antigo não subscreve os arquivos antigos, que ficam apenas ocultos. Se algo der errado, você pode restaurar o diretório anterior simplesmente desmontando a nova partição.

g) Com tudo verificado, adicione a entrada no “/etc/fstab”, especificando a partição, o diretório onde ela ficará montada, o sistema de arquivos e os parâmetros do Quota, como em:

/dev/sdb2 /home ext3 defaults,usrquota,grpquota 0 2

h) Reinicie o micro (ou remonte a partição) e continue com a configuração do Quota, seguindo os passos a seguir. :)

Em seguida, você deve criar os arquivos “aquota.user” e “aquota.group” (onde ficam armazenadas as configurações do Quota) no diretório raiz da partição. Se você está ativando o Quota para a partição montada no /home, então os dois arquivos serão “/home/aquota.user” e “/home/aquota.group”.

Por enquanto, vamos apenas criar dois arquivos vazios, usando o comando touch. É importante que ambos fiquem com permissão de acesso “600″, de modo que apenas o root possa acessá-los ou fazer modificações. Os comandos são executados com a partição montada:

# touch /home/aquota.user
# chmod 600 /home/aquota.user
# touch /home/aquota.group
# chmod 600 /home/aquota.group

Depois da configuração inicial, é recomendável reiniciar o servidor, para que os scripts de inicialização se encarreguem de formatar os dois arquivos, montar a partição usando os parâmetros corretos e outros passos necessários.

Naturalmente, é possível também aplicar as alterações sem reiniciar o servidor. Nesse caso, é necessário fechar todos os programas e serviços que estejam acessando arquivos dentro da partição e remontá-la (para que sejam aplicados os parâmetros incluídos no fstab) usando o parâmetro “-o remount” do mount, como em:

# mount -o remount /home

Para verificar se a partição foi montada corretamente, usando os parâmetros do quota, execute o comando “mount” (sem parâmetros) e veja se o ” usrquota,grpquota” adicionados ao fstab aparecem nas propriedades da partição:

# mount

/dev/hda1 on / type ext3 (rw)

/dev/hda2 on /home type ext3 (rw,usrquota,grpquota)

Os arquivos “aquota.user” e “aquota.group” devem ser formatados em um formato especial antes de poderem ser usados pelo quota. Se você reiniciou o sistema depois de criar os arquivos, provavelmente o script de inicialização do quota já deve ter feito isso, caso contrário, é necessário rodar o comando “quotacheck” para que ele faça seu trabalho:

# quotacheck -vagum

O quotacheck faz a verificação inicial dos arquivos e usuários, gerando uma tabela oculta que lista os arquivos de posse de cada usuário. Essa tabela é usada pelo Quota para checar o espaço ocupado por cada um e é atualizada em tempo real conforme novos arquivos são gravados.

Da primeira vez que ele é executado, exibe uma mensagem de erro avisando que os arquivos “aquota.user” e “aquota.group” estão danificados (afinal, eles são arquivos vazios), mas isso é esperado. A função dele é justamente corrigir o problema:

quotacheck: WARNING – Quotafile /home/aquota.user was probably truncated. Cannot save quota settings…
quotacheck: WARNING – Quotafile /home/aquota.group was probably truncated. Cannot save quota settings…
quotacheck: Scanning /dev/hda2 [/home] done
quotacheck: Checked 36 directories and 331 files

Depois de executá-lo, você perceberá que os arquivos “aquota.user” e “aquota.group” aumentaram de tamanho, indo dos zero bytes iniciais para alguns kbytes, sinal de que o quotacheck fez seu trabalho:

# ls -lh /home

-rw——- 1 root root 7,0K 2008–01-25 08:24 aquota.group
-rw——- 1 root root 7,0K 2008–01-25 08:24 aquota.user

Com tudo pronto, ative o uso das quotas usando o comando “quotaon”, seguido da pasta onde está montada a partição, como em:

# quotaon /home

Se precisar desativar temporariamente o uso das quotas, use o comando “quotaoff”, como em:

# quotaoff /home

Definindo as quotas com o Webmin

Em seguida, falta apenas definir as quotas. A forma mais prática é utilizar o Webmin, que oferece módulos para configurar os mais diversos servidores. Alguns são desnecessariamente complicados, mas outros (como no caso do Quota) são simples de usar e realmente facilitam o trabalho de configuração.

O webmin não faz parte dos repositórios oficiais do Debian (a partir do Etch), do Fedora nem do CentOS, mas isso não é um grande problema, já que você pode encontrar pacotes para as três distribuições no http://webmin.com, o site oficial do projeto.

Ao usar uma distribuição derivada do Debian, baixe o pacote .deb e instale-o usando o dpkg, não esquecendo de rodar o “apt-get -f install” em seguida para resolver qualquer eventual problema de dependências, como em:

# dpkg -i webmin_1.420_all.deb
# apt-get -f install

Depois de instalado, inicie o Webmin com o comando:

# /etc/init.d/webmin start

No caso do Fedora e do CentOS, baixe o pacote usando o link “Download: RPM”, instale-o usando o “rpm -Uvh” e, em seguida, inicie o serviço, como em:

# rpm -Uvh webmin-1.420-1.noarch.rpm
# service webmin start

O Webmin não é um programa gráfico no sentido tradicional, mas sim uma interface de configuração que você acessa usando o navegador. Isso permite que ele seja usado remotamente ou mesmo usado em servidores sem o ambiente gráfico instalado. Para acessá-lo, abra o navegador e acesse o endereço: https://127.0.0.1:10000

O navegador exibe um aviso sobre a autenticidade do certificado. Isso é normal, pois o Webmin utiliza uma conexão criptografada (https) e gera um certificado self-signed durante a instalação, daí o aviso.

Na tela de login do Webmin, logue-se usando o login “root” e a senha de root da máquina. Se preferir, você pode trocar a senha de root do Webmin (de forma que as duas senhas sejam diferentes) na opção “Webmin > Webmin Users”.

Por padrão, o Webmin só pode ser acessado localmente. Para acessar a partir de outras máquinas da rede, inclua os endereços autorizados dentro da opção “Webmin > Webmin Configuration > IP Access Control”. Você pode também fazer com que a interface fique em português no “Webmin > Webmin Configuration > Language”.

Depois de logado, acesse a seção “System > Disk Quotas“. Comece clicando no “Enable Quotas”, isso faz com que ele realize uma varredura inicial, calculando o espaço ocupado por cada usuário, o que pode demorar alguns minutos em partições com muitos arquivos. Depois de tudo ativado, chegamos finalmente à tela inicial de configuração:

Aqui você tem a opção de configurar quotas individuais para cada usuário (/home users) ou quotas para grupos de usuários (/home groups). Os valores são informados em blocos; o mais comum é que cada bloco tenha 1 KB, mas o tamanho pode variar de 512 a 4096 bytes, de acordo com o tamanho da partição e do sistema de arquivos usado. Do lado direito você tem a opção de limitar também o número de arquivos que o usuário pode criar, opção menos usada.

O espaço ocupado por cada usuário é recalculado periodicamente, mas você pode atualizar as informações a qualquer momento clicando no “Check Quotas”. Uma vez configurado, o Quota fica residente e é reativado automaticamente durante o boot, no momento em que a partição é montada. Não estranhe caso o sistema fique alguns minutos parado durante o “Checking quotas” a cada boot; isso é normal, pois é necessário refazer a busca de arquivos.

No caso do Fedora, o SSL não é habilitado por padrão. Por isso, você deve acessar usando http, como em: http://127.0.0.1:10000

O script de instalação do pacote .rpm não define a senha de acesso automaticamente, como no caso do pacote para o Debian, por isso é necessário definir a senha manualmente logo depois da instalação usando o script “/usr/libexec/webmin/changepass.pl”, que deve ser executado como root, especificando a localização da configuração do webmin, o usuário (do webmin) e a senha a ser definida, como em:

# /usr/libexec/webmin/changepass.pl /etc/webmin admin KWVYiJ5U

Não existem muitos problemas em acessar o Webmin sem encriptação localmente, mas se você pretende acessá-lo a partir de outros micros, crie um túnel usando o SSH (veja detalhes no capítulo 10). Se preferir ativar o SSL no Webmin (de forma a poder acessar via https), você pode seguir as instruções do link: http://webmin.com/ssl.html.

Definindo as quotas manualmente

É possível também definir as quotas via linha de comando, usando o comando “edquota”. Ele é uma ferramenta bastante rudimentar, mas funcional, que usa um editor de texto pré-definido para exibir e permitir a alteração das quotas.

O primeiro passo é escolher o editor que será usado, definindo a variável “EDITOR”, que pode conter o nome de qualquer editor de linha de comando (que esteja instalado), como o joe, mcedit, pico, nano ou vi, como em:

# EDITOR=joe

Para editar a quota para um usuário use a opção “-u”, como em:

# edquota -u gdh

Ele exibe um arquivo de texto, usando o editor escolhido, contendo campos com a utilização atual, os limites para blocos e os limites para o número de arquivos:

O que você faz aqui é editar os valores dos campos referentes aos limites, salvar o arquivo e sair do editor. Ao fazer isso, o edquota checa as mudanças feitas e as aplica. Note que os dois primeiros campos “soft” e “hard” da esquerda para a direita contêm os limites de blocos (ou seja, o espaço em disco que pode ser usado), enquanto os campos seguintes indicam os limites para o número de arquivos.

Os únicos valores editáveis dentro do arquivo são os 4 campos com os limites. Os demais (como o número de blocos usados) são exibidos apenas a título de informação. Você até pode alterar estes campos (afinal, trata-se de um arquivo de texto simples), mas as alterações são ignoradas pelo edquota.

Por default, cada bloco corresponde a 1 KB, de forma que o valor “2000000″ corresponde a 2 GB, mas isso pode variar de acordo com as opções usadas ao formatar a partição. Se quiser checar, use o comando “fdisk -l” (como root). Ele mostra detalhes sobre as partições, incluindo o tamanho e o número de blocos.

Continuando, você pode editar também as quotas para os grupos, usando o parâmetro “-g”, como em:

# edquota -g alunos

Para alterar o grace period, use o parâmetro “-t” (sem argumentos), como em:

# edquota -t

Ele exibe outro arquivo de texto, dessa vez oferecendo as opções “Block grace period” (referente ao soft limit para blocos) e o Inode grace period (que se aplica ao soft limit para o número de arquivos, caso usado). O tempo pode ser especificado em dias (days), horas (hours), minutos (minutes), ou segundos (seconds), como em “7days”, “12hours” ou “5minutes” (sempre sem espaço):

Para ver um relatório com as quotas definidas para cada usuário e o espaço atualmente ocupado por cada um, use o comando “repquota”, seguido pela pasta (e não o device) onde as quotas foram ativadas, como em:

# repquota /home

O relatório é exibido no próprio terminal, usando uma formatação simples, com um usuário por linha:

Como pode ver, o webmin facilita bastante a configuração, eliminando parte do trabalho manual, mas é perfeitamente possível se virar com os comandos de modo texto quando ele não estiver disponível.

Both comments and pings are currently closed.

Comments are closed.

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.