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

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.

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.

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

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.

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

Fonte: Link

Anúncios

~ por 3c0linux em julho 28, 2010.

 
%d blogueiros gostam disto: