Tentando agregar quotas do Linux, onde estão armazenados os dados?

3

Todos os tutoriais e documentação do sistema de cotas do Linux me deixaram confuso. Para cada sistema de arquivos com quotas ativadas / on, onde as informações reais da cota são armazenadas? São metadados do sistema de arquivos ou estão em um arquivo?

Digamos que o usuário foo cria um novo arquivo em / home. Como o kernel determina se o usuário foo está abaixo de seu limite rígido? O kernel precisa registrar as informações de quota no sistema de arquivos a cada vez ou está no superbloco ou em outro lugar?

Pelo que entendi, o kernel consulta o arquivo aquota.user para as regras atuais, mas onde estão armazenados os dados atuais de uso da cota? Isso pode ser visto com alguma ferramenta fora do repquota e afins? TIA !!

Atualização:

Obrigado pela ajuda. Eu já tinha lido esse mini-HOWTO. Eu sou bastante claro sobre o uso das ferramentas de espaço do usuário. O que não estava claro é se os dados de uso também estavam no arquivo que armazenava limites por usuário e você respondeu isso com um sim.

Pelo que eu posso dizer, o rc.sysinit executa o quotacheck e o quotaon na inicialização. O programa quotacheck analisa o sistema de arquivos, atualiza os arquivos aquota. *. Em seguida, ele faz uso de quota.h e do syscall quotactl () para informar o kernel sobre as informações de quota.

Deste ponto em diante, o kernel atualiza essa informação e incrementa / decrementa as estatísticas da cota conforme ocorrem as mudanças. Após o encerramento, o script init.d / halt executa o comando quotaoff RIGHT antes que os sistemas de arquivos sejam desmontados. O comando quotaoff não parece atualizar os arquivos aquota. * Com as informações que o kernel tem na memória. Digo isso porque as {a, c, m} vezes para o arquivo aquota.user são atualizadas somente após a reinicialização do sistema ou pela execução manual do comando quotacheck. Parece - até onde posso dizer - que o kernel simplesmente descarta seus dados de uso atualizados no momento do desligamento. Esta informação nunca é usada para atualizar os arquivos * aquota. Eles são atualizados durante a inicialização por quotacheck (rc.sysinit). Parece bobo para mim desde que a informação atualizada já foi coletada pelo kernel. Então ... em conclusão, ainda não estou totalmente claro sobre os métodos. ;)

    
por CarpeNoctem 01.03.2010 / 11:14

2 respostas

3

For each filesystem with quotas enabled/on where is the actual quota information stored?

Ver, por exemplo, o quotaon manpage . Haverá arquivos com o nome .quota * no diretório raiz do sistema de arquivos, que contêm as informações necessárias (.quota.user, .quota.group, .quota.ops.user, .quota.ops.group).

Say user foo creates a new file on /home. How does the kernel determine whether user foo is below their hard limit? Does the kernel have to tally up quota information on that filesystem each time or is it in the superblock or somewhere else?

Não, o kernel continuamente rastreia o uso do fs, portanto, não precisa recalcular isso em cada alocação (o que seria proibitivamente caro). Ele fará o cálculo uma vez quando as cotas estiverem ativadas e, em seguida, atualizará isso. O cálculo inicial é realizado por quotacheck .

As far as I understand, the kernel consults the aquota.user file for the actual rules, but where is the current quota usage data stored? Can this be viewed with any tools outside repquota and the like? TIA!!

As informações de cota são armazenadas em .quota * (veja acima). Não tenho conhecimento de nenhuma ferramenta para gerar relatórios de uso de cotas, além do repquota. Mas você deve ser capaz de gerar a maioria dos relatórios usando o / scripting repquota. Ou você terá que hackear a fonte ...

BTW:

O Quota mini-HOWTO oferece uma boa visão geral sobre o sistema de cotas do Linux. É um pouco datado, mas os fundamentos não mudaram muito.

    
por 01.03.2010 / 11:36
1

Da leitura de sua atualização, parece que você está se perguntando por que todas as informações de cotas que o kernel tem seriam jogadas quando a máquina é desligada, em vez de ser gravada nos arquivos. *.

Bem, o kernel não atualiza o arquivo em tempo real, já que isso seria caro em termos de tempo. Basicamente, uma vez que as cotas estejam habilitadas, o kernel rastreia o uso no caso de um limite hard / hard ser alcançado e ter que fazer alguma coisa, isso significa que ele está rastreando isso toda vez que tiver que alocar blocos fs para qualquer usuário / grupo no sistema. Se ele tivesse que atualizar os arquivos aquota. * Enquanto tentava alocar blocos fs, você poderia ver onde isso iria acabar causando problemas em sistemas moderadamente ocupados, e isso não é necessário, já que o kernel está observando isso por você e registrará quaisquer transgressões para você, então você sabe vir correr o quotacheck. Até mesmo o cálculo da cota pode causar problemas, e é por isso que você tem o ajuste sysctl - dquot - max - e o sysctl - dquot - nr - mais informações podem ser vistas aqui:

link

Quanto à colocação de quotacheck durante o processo de inicialização e não ao processo de parada, é tudo sobre o tempo e como você pensa nas coisas. Normalmente, quando você pára um servidor, você quer que ele desça rápido. Não gaste muito tempo tabulando cotas, estamos muito mais acostumados a que o init demore mais. Além disso, pense nesse processo como init ao configurar as contagens de cota iniciais quando o sistema é iniciado, em vez de limpá-lo quando ele é encerrado. E se os FSs fossem montados em outro sistema sem as cotas ativadas e depois reiniciados normalmente, você desejaria saber de onde você está começando a cada vez, e desde que você vai ao init após cada parada onde está a configuração.

Espero que ajude.

    
por 04.05.2010 / 11:38