Quota mini-HOWTO Albert M.C. Tam bertie@scn.org, Tradução: Sellaro Tam sellaro@deathsdoor.com, Revisao: Alessandro F. Martins afm@nitnet.com.br v0.0, 8 August 1997 Preâmbulo: Este documento é copylefted de Albert M.C. Tam (bertie@scn.org). A permissão para uso, cópia e distribuição deste documento para propósitos não-comerciais é doravante garantida, desde que o nome do autor / editor e tradutor, além desta nota figurem em todas as cópias e/ou documentos originais; e que este documento não seja modificado. Este documento é distribuído com o intuito de ser útil, mas SEM QUALQUER GARANTIA, seja expressa ou implícita. Embora todo esforço tenha sido empregado para assegurar a precisão das informações aqui contidas, o autor / editor / tradutor não assume QUALQUER RESPONSABILIDADE por erros ou prejuízos resultantes da utilização das informações aqui contidas. Este documento descreve como habilitar a quota do sistema de arquivos de um computador Linux, atribuindo uma quota para usuários e grupos, bem como o uso de comandos diversos de quota. Este documento destina-se a usuários executando kernel versão 2.x (recentemente testado em um RedHat 4.1 executando kernel 2.0.27). Usuários executando kernels mais antigas devem atualizar seus sistemas para uma versão mais nova do kernel de maneira a tirar melhor proveito da quota. Sinta-se à vontade de enviar criticas e comentários para bertie@scn.org caso você encontre um erro, ou considere que alguma informação não esteja presente. 11.. OO qquuee éé QQuuoottaa?? O sistema de quota permite que você especifique limites em dois aspectos relacionados ao armazenamento em disco: o número de inodes que um usuário ou grupo de usuários pode possuir; e o número de blocos do disco que podem ser disponibilizados para um usuário ou grupo de usuários. A idéia por trás da quota é que os usuários são forçados a permanecerem sob seu limite de consumo de disco, tirando deles a habilidade de consumir de forma ilimitada o espaço em disco do sistema. A quota é gerenciada seguindo uma base por usuário e por sistema de arquivo. Se existe mais de um sistema de arquivo onde um usuário pode criar arquivo, então a quota tem de ser estabelecida para cada sistema de arquivo separadamente. 22.. SSttaattuuss AAttuuaall ddaa QQuuoottaa eemm LLiinnuuxx O suporte à quota foi integrado ao kernel desde a versão 1.3.8x. Atualmente, o sistema de quota está presente nas versões 2.0 do kernel Linux. Se o seu sistema não suporta quota, eu sinceramente recomendo uma atualização. O sistema de quota funciona, atualmente, apenas para sistema de arquivos do tipo ext2. 33.. RReeqquuiissiittoo ppaarraa UUttiilliizzaaççããoo ddee QQuuoottaa nnoo LLiinnuuxx 33..11.. KKeerrnneell O código fonte para o kernel 2.x está disponível em ______________________________________________________________________ http://sunsite.unc.edu/pub/Linux/kernel/v2.0 ______________________________________________________________________ 33..22.. SSooffttwwaarree ppaarraa QQuuoottaa Dependendo da distribuição Linux que você possua, você pode ou não ter o software do sistema de quota instalado em seu sistema. Caso você não possua o software, você pode obtê-lo através do seguinte endereço: ______________________________________________________________________ ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz. ______________________________________________________________________ 44.. CCoonnffiigguurraaççããoo ddoo SSiisstteemmaa ddee QQuuoottaa nnoo LLiinnuuxx -- PPaarrttee II:: AA CCoonnffiigguurraaççããoo 44..11.. RReeccoonnffiigguurree sseeuu kkeerrnneell Reconfigure seu kernel e adicione o suporte à quota digitando y em: ______________________________________________________________________ Quota support (CONFIG_QUOTA) [n] y ______________________________________________________________________ 44..22.. CCoommppiillee ee iinnssttaallee oo ssooffttwwaarreess ddee qquuoottaa O software do sistema de quota está disponível em ______________________________________________________________________ ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz ______________________________________________________________________ 44..33.. MMooddiiffiiqquuee sseeuu ssccrriipptt iinniitt ppaarraa vveerriiffiiccaarr aa qquuoottaa ee hhaabbiilliittáá--llaa eemm tteemmppoo ddee iinniicciiaalliizzaaççããoo Segue um exemplo: ______________________________________________________________________ # Verifica a quota e a habilita. if [ -x /usr/sbin/quotacheck ] then echo "Checando quotas. Isto pode levar algum tempo." /usr/sbin/quotacheck -avug echo " Concluído." fi if [ -x /usr/sbin/quotaon ] then echo "Habilitando sistema de quota." /usr/sbin/quotaon -avug fi ______________________________________________________________________ A regra de ouro é sempre habilitar a quota depois que o sus sistema de arquivo especificado em /etc/fstab tenha sido montado, de outra forma o sistema de quota não funcionará. Eu recomendo habilitar o sistema de quota no fim do script init ou, se você preferir, imediatamente depois dos sistemas de arquivos terem sido montados no script init. 44..44.. MMooddiiffiiqquuee oo aarrqquuiivvoo //eettcc//ffssttaabb As partições que você ainda não habilitou o sistema de quota devem parecer com isto: ______________________________________________________________________ /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults 1 1 ______________________________________________________________________ Para habilitar o suporte ao sistema de quota em um sistema de arquivo, adicione "usrquota" ao quarto campo contendo a palavra "defaults" (man fstab para detalhes). ______________________________________________________________________ /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,usrquota 1 1 ______________________________________________________________________ Substitua "usrquota" por "grpquota", caso você necessite de suporte a quota por grupo em um sistema de arquivo. ______________________________________________________________________ /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,grpquota 1 1 ______________________________________________________________________ Você precise de ambos, quota de usuário e de grupo em um sistema de arquivo? ______________________________________________________________________ /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,usrquota,grpquota 1 1 ______________________________________________________________________ 44..55.. CCrriiee oo aarrqquuiivvoo ""qquuoottaa..uusseerr"" ee ""qquuoottaa..ggrroouupp"" Ambos os arquivos de quota, quota.user e quota.group, devem pertencer ao root, e terem permissão de leitura-escrita para root e nenhum para outros usuários. Acesse o sistema como root. Vá para o diretório raiz da partição que você deseja habilitar o sistema de quota e crie o arquivo quota.user e quota.group com os seguintes comandos: ______________________________________________________________________ touch /partition/quota.user touch /partition/quota.group chmod 600 /partition/quota.user chmod 600 /partition/quota.group ______________________________________________________________________ 44..66.. RReeiinniicciiee oo ssiisstteemmaa Agora, reinicie o sistema para as mudanças terem efeitos. Note, também, que caso você queira habilitar quota posteriormente apenas os passos 4, 5, e 6 são necessários. 55.. CCoonnffiigguurraaççããoo ddoo SSiisstteemmaa ddee QQuuoottaa nnoo LLiinnuuxx -- PPaarrttee IIII:: AAttrriibbuuiinnddoo QQuuoottaa ppaarraa UUssuuáárriiooss ee GGrruuppooss Esta operação é executada com o comando edquota (man edquota para detalhes). Eu executaria o comando quotacheck com os parâmetros -avug para obter os dados de utilização do sistema de arquivo de forma mais atualizada antes de editar as quotas. Isto é, entretanto, apenas um hábito pessoal não obrigatório para este passo. 55..11.. AAttrriibbuuiinnddoo qquuoottaa ppaarraa uumm uussuuáárriioo eessppeeccííffiiccoo Eis um exemplo. Tenho um usuário em meu sistema com login id bob. O comando "edquota -u bob" me conduz ao vi (ou outro editor especificado em minha variável de ambiente $EDITOR) para editar a quota para o usuário bob em cada partição que tem o sistema de quota habilitado: ______________________________________________________________________ Quotas for user bob: /dev/hda2: blocks in use: 2594, limits (soft = 5000, hard = 6500) inodes in use: 356, limits (soft = 1000, hard = 1500) ______________________________________________________________________ "blocks in use" é o número de blocos (em quilobytes) que um usuário consumiu em uma partição. "inodes in use" é o número total de arquivos que um usuário possui em uma partição. 55..22.. AAttrriibbuuiinnddoo qquuoottaa ppaarraa uumm ggrruuppoo eemm ppaarrttiiccuullaarr Agora, suponha que eu tenha um grupo chamado jogos em meu sistema. "edquota -g jogos" irá me conduzir ao editor vi novamente para editar a quota para o grupo jogos: ______________________________________________________________________ Quotas for group jogos: /dev/hda4: blocks in use: 5799, limits (soft = 8000, hard = 10000) inodes in use: 1454, limits (soft = 3000, hard = 4000) ______________________________________________________________________ 55..33.. AAttrriibbuuiinnddoo aa mmeessmmaa qquuoottaa ppaarraa uumm ccoonnjjuunnttoo ddee uussuuáárriiooss Para atribuir quotas rapidamente, digamos, para 100 usuários em meu sistema com o mesmo valor atribuído ao usuário bob, teríamos que editar, primeiramente, a quota do usuário bob, e então executar o seguinte comando: ______________________________________________________________________ edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd` ______________________________________________________________________ supondo que você esteja usando o shell csh, e que você atribuiu UID's a partir 500 a seus usuários. Além de edquota, existem 3 termos com que você deve se familiarizar: Soft Limit, Hard Limit, e Grace Period. 55..44.. SSoofftt LLiimmiitt O _Soft limit_ indica a quantidade máxima de utilização do disco que um usuário possui em uma partição. Quando combinado com o grace period, ele funciona como um limite, estabelecendo uma fronteira a um usuário cuja a quota está prestes a ser atingida, enviando avisos constantes a ele. 55..55.. HHaarrdd LLiimmiitt O hard limit funciona apenas quando grace period está configurado. Ele especifica o limite absoluto de utilização de disco que não pode ser ultrapassado por um usuário. 55..66.. GGrraaccee PPeerriioodd Executado com o comando "edquota -t", o grace period é um limite de tempo antes que o soft limit seja imposto em um sistema de arquivo com quota habilitada. Unidades de tempo como segundos (sec), minutos (min), horas(hour), dias (day), semanas(week), e meses (month) podem ser utilizados. Isto é o que você irá ver com o comando "edquota -t": ______________________________________________________________________ Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days, file grace period: 0 days ______________________________________________________________________ Mude o trecho "0 days" para um de qualquer outra duração que você julgue razoável. Pessoalmente, escolheria 7 dias (ou 1 semana). 66.. CCoommaannddooss ddee QQuuoottaa DDiivveerrssooss 66..11.. QQuuoottaacchheecckk O comando quotacheck é usado para verificar a utilização de disco em um sistema de arquivos, além de atualizar os arquivos de quota "quota.user". Eu recomendo a execução do comando quotacheck na inicialização do sistema ou via cronjob periodicamente (digamos, toda semana?). 66..22.. RReeppqquuoottaa O comando repquota produz informações sintetizadas para um sistema de arquivos. Eis um exemplo de saída do comando repquota: ______________________________________________________________________ # repquota -a Block limits File limits User used soft hard grace used soft hard grace root -- 175419 0 0 14679 0 0 bin -- 18000 0 0 735 0 0 uucp -- 729 0 0 23 0 0 man -- 57 0 0 10 0 0 user1 -- 13046 15360 19200 806 1500 2250 user2 -- 2838 5120 6400 377 1000 1500 ______________________________________________________________________ 66..33.. QQuuoottaaoonn ee QQuuoottaaooffff O comando Quotaon é utilizado para iniciar a contabilização de quota; quotaoff para finalizá-la. Atualmente, ambos são similares. Eles são executados na inicialização do sistema e no seu processo de finalização (shutdown).