Cotas do sistema de arquivos

Os sistemas de arquivos do Google Cloud Managed Lustre oferecem suporte a cotas de usuário, grupo e projeto, permitindo que os administradores gerenciem o consumo de armazenamento e garantam a alocação justa de recursos. Este documento explica como configurar, visualizar e gerenciar essas cotas.

O que são cotas de sistema de arquivos?

As cotas no Managed Lustre permitem definir limites para a quantidade de espaço em disco e o número de arquivos que usuários, grupos ou projetos podem consumir no sistema de arquivos.

As cotas são aplicadas a diferentes entidades:

  • Cotas de usuário : limitam o armazenamento consumido por um usuário não raiz individual.
  • Cotas de grupo : limitam o armazenamento consumido por todos os membros não raiz de um grupo específico.
  • Cotas de projeto limitam o armazenamento consumido por arquivos e diretórios associados a um ID do projeto específico. Esse ID do projeto é um identificador do sistema de arquivos do Lustre, definido usando lfs project, e não é o ID doGoogle Cloud projeto. Consulte Definir uma cota de projeto para mais informações.

As cotas são configuradas para dois tipos de recursos:

  • Limites de blocos : um limite para a quantidade de espaço em disco que pode ser usada.
  • Limites de inode : um limite para o número de arquivos e diretórios que podem ser criados.

Cada tipo de recurso pode ter dois níveis de limites:

  • Um limite flexível é um limite de cota que aciona um período de carência configurável quando excedido. Durante esse período, usuários, grupos ou projetos podem exceder temporariamente o limite flexível, até o limite absoluto, se houver um, tempo para reduzir o uso antes de serem bloqueados. Quando o período de carência expira, se o uso ainda estiver acima do limite flexível, ele será aplicado como um limite absoluto, bloqueando todas as novas gravações até que o espaço em disco ou a contagem de inode fique abaixo do limite flexível.

    Por padrão, o período de carência é de uma semana.

  • Um limite absoluto define o máximo absoluto. Se esse limite for atingido, todas as operações de gravação adicionais falharão, retornando um erro "Cota de disco excedida".

Administrar usuários e grupos

O Lustre depende dos atributos POSIX do cliente para nomes e IDs de usuários e grupos.

Quando um cliente faz uma solicitação de sistema de arquivos, ele envia o UID e o GID locais para os servidores do Lustre. Os servidores usam esses atributos POSIX para aplicar permissões de arquivo padrão e acompanhar o uso da cota.

Para um comportamento consistente em um ambiente multiusuário, todos os clientes que ativam o sistema de arquivos do Lustre precisam ter mapeamentos de UID e GID sincronizados, normalmente gerenciados por um serviço centralizado, como LDAP ou NIS.

Os usuários raiz não estão sujeitos a cotas. Os comandos executados com sudo também ignoram as verificações de cota.

Antes de começar

Para gerenciar cotas do Lustre, você precisa de:

  • Acesso do cliente a um sistema de arquivos ativo do Google Cloud Managed Lustre.
  • Privilégios sudo ou raiz no sistema cliente para executar comandos lfs.

Definir cotas

Use o comando lfs setquota para configurar limites de blocos e inodes. É possível especificar apenas limites de blocos, apenas limites de inodes ou ambos. Da mesma forma, é possível especificar limites absolutos, limites flexíveis ou ambos.

sudo lfs setquota -u | g | p | U | G | P UGP_VALUE \
      -b SOFT_BLOCK_LIMIT -B HARD_BLOCK_LIMIT \
      -i SOFT_INODE_LIMIT -I HARD_INODE_LIMIT \
      MOUNT_DIR

Em que:

  • -u especifica um usuário por nome de usuário ou UID. O Lustre resolve nomes de usuário usando os atributos POSIX do cliente.
  • -g especifica um grupo por nome de grupo ou GID. O Lustre resolve nomes de grupos usando os atributos POSIX do cliente.
  • -p especifica um projeto por nome ou ID do projeto. Se você especificar um nome de projeto, ele precisará ser mapeado para um ID do projeto usando um arquivo de mapeamento, como /etc/projid no cliente.
  • U, G e P definem a cota padrão para usuários, grupos ou projetos que não têm uma cota específica definida.
  • UGP_VALUE é o nome de usuário, nome do grupo, nome do projeto, UID, GID ou ID do projeto. Os IDs precisam ser números inteiros entre 0 e 4294967295. Omita esse valor se estiver especificando cotas de usuário, grupo ou projeto padrão.
  • -b e -B são limites flexíveis e absolutos para uso de blocos, respectivamente. Os limites flexíveis precisam ser menores que os limites absolutos. Os valores podem ser especificados em bytes (B), kilobytes (K), megabytes (M), gigabytes (G) ou terabytes (T). A unidade padrão é kilobytes.
  • -i e -I são limites flexíveis e absolutos para uso de inode. Os limites flexíveis precisam ser menores que os limites absolutos.
  • MOUNT_DIR é o ponto de montagem do sistema de arquivos do Managed Lustre.

Observe que não é possível configurar o período de carência ao mesmo tempo em que cria uma cota. O período de carência padrão para limites flexíveis é de uma semana. Para atualizar o período de carência, consulte Configurar períodos de carência.

Exemplos

Definir uma cota de usuário

Defina um limite de bloco flexível de 100 GB, um limite de bloco absoluto de 120 GB, um limite de inode flexível de 10.000 e um limite de inode absoluto de 12.000 para user1 em /mnt/lustre:

sudo lfs setquota -u user1 -b 100G -B 120G -i 10000 -I 12000 /mnt/lustre

Definir uma cota de grupo

Defina um limite de bloco absoluto de 50 TB para groupA em /mnt/lustre:

sudo lfs setquota -g groupA -B 50T /mnt/lustre

Definir uma cota de projeto

As cotas de projeto exigem uma etapa adicional para associar diretórios e arquivos a um ID do projeto:

  1. Use o comando lfs project para atribuir um ID do projeto. Esse ID é um número inteiro arbitrário que identifica o projeto.

    sudo lfs project -spr LFS_PROJECT_ID PATH/TO/DIR/OR/FILE
    

    Em que:

    • -s define a herança, para que novos arquivos e diretórios criados no diretório especificado herdem o ID do projeto.
    • -p informa ao comando para definir o ID do projeto fornecido no arquivo ou diretório especificado.
    • -r aplica o ID do projeto de forma recursiva a todos os arquivos e diretórios filhos.
    • PATH/TO/DIR/OR/FILE é o caminho para um diretório ou arquivo em que o ID do projeto será definido. Só é possível especificar um caminho ou arquivo.

    Para mais informações e flags, execute man lfs project no cliente.

    Por exemplo, para atribuir o projeto 101 a /mnt/lustre/my-project e todos os filhos novos e atuais:

    sudo lfs project -spr 101 /mnt/lustre/my-project
    
  2. Defina a cota usando lfs setquota:

    sudo lfs setquota -p LFS_PROJECT_ID \
      -b SOFT_BLOCK_LIMIT -B HARD_BLOCK_LIMIT \
      -i SOFT_INODE_LIMIT -I HARD_INODE_LIMIT \
      MOUNT_DIR
    

Definir uma cota padrão

Defina um limite de bloco absoluto de 50 TB para todos os usuários sem uma configuração de cota específica:

sudo lfs setquota -U -B 50T /mnt/lustre

Modificar cotas

Para modificar uma cota, execute lfs setquota novamente com os novos valores. O comando substitui as configurações anteriores do usuário, grupo ou projeto especificado.

Configurar períodos de carência

Os períodos de carência definem por quanto tempo um usuário, grupo ou projeto pode exceder um limite flexível antes que ele atue como um limite absoluto. Por padrão, esse valor é de uma semana. Os períodos de carência são definidos para todos os usuários, grupos ou projetos. Eles não podem ser definidos em IDs específicos.

Para atualizar um período de carência, use o comando lfs setquota -t:

sudo lfs setquota -t -u | g | p \
  -b BLOCK_GRACE_PERIOD -i INODE_GRACE_PERIOD \
  MOUNT_DIR

Em que:

  • -u aplica o período de carência às cotas de usuário.
  • -g aplica o período de carência às cotas de grupo.
  • -p aplica o período de carência às cotas de projeto.
  • -b e -i especificam os períodos de carência de blocos e inodes, respectivamente. A unidade padrão é segundos. É possível usar outras unidades com o formato: XwXdXhXmXs (semanas, dias, horas, minutos, segundos). É possível definir limites para um ou ambos os tipos de cota.

    Especifique 'notify' em vez de um valor de tempo para marcar a saída de lfs quota com um asterisco quando o limite flexível for excedido. Novas gravações não são bloqueadas quando 'notify' é especificado até que o limite absoluto seja atingido.

Por exemplo, para definir um período de carência de blocos de 7 dias para todas as cotas de usuário:

sudo lfs setquota -t -u -b 7d /mnt/lustre

Para definir um período de carência de inode de 24 horas para cotas de projeto:

sudo lfs setquota -t -p -i 24h /mnt/lustre

Para notificar quando um limite flexível de bloco for excedido:

sudo lfs setquota -t -u -b 'notify' /mnt/lustre

Conferir cotas

O comando lfs quota mostra o uso e os limites do usuário atual:

lfs quota MOUNT_DIR

Para uma lista completa de opções, execute man lfs quota no cliente.

Por exemplo, para conferir a cota de user1 em /mnt/lustre:

sudo lfs quota -u user1 /mnt/lustre

Para conferir a cota e o uso de outro usuário, execute o comando com sudo.

A saída mostra:

  • Filesystem: o ponto de montagem do Lustre.
  • kbytes: uso atual do disco em kilobytes.
  • bquota: limite de bloco flexível em kilobytes.
  • blimit: limite de bloco absoluto em kilobytes.
  • bgrace: período de carência restante se o limite flexível de bloco for excedido. Um asterisco (*) indica que o limite flexível foi excedido.
  • files: número de inodes usados.
  • iquota: limite de inode flexível.
  • ilimit: limite de inode absoluto.
  • igrace: período de carência restante se o limite flexível de inode for excedido. Um asterisco (*) indica que o limite flexível foi excedido.

Para conferir os períodos de carência configurados para todas as cotas de usuário:

lfs quota -t -u /mnt/lustre

Monitorar cotas no Cloud Monitoring

Além de usar o comando lfs quota em um cliente, é possível conferir o uso e os limites da cota do sistema de arquivos pelo Cloud Monitoring. Isso permite monitorar o consumo de armazenamento por usuário, grupo ou projeto no Google Cloud console.

As métricas de cota estão associadas ao recurso monitorado Entidade de cota do Lustre. Estas são algumas das métricas disponíveis:

  • Bytes:bytes usados, limite flexível e limite absoluto.
  • Inodes:inodes usados, limite flexível e limite absoluto.

Para visualizar essas métricas:

  1. No Google Cloud console, acesse a página Monitoring > Metrics Explorer.

    Acessar o Metrics Explorer

  2. No campo Selecionar uma métrica, pesquise e selecione o recurso Entidade de cota do Lustre.

  3. Selecione a métrica de cota específica que você quer conferir (por exemplo, Bytes usados da cota ou Inodes de limite absoluto da cota).

  4. Opcionalmente, use as opções de Filtro para conferir entidades específicas filtrando pelo rótulo accounting_type (por exemplo, user, group, project) ou pelo rótulo id (por exemplo, o UID, GID ou ID do projeto específico).

Remover cotas

Para remover uma cota, defina os limites flexíveis e absolutos como 0.

sudo lfs setquota -u | g | p | U | G | P UGP_VALUE -b 0 -B 0 -i 0 -I 0 MOUNT_DIR

Por exemplo, para remover as cotas de bloco e inode de user1:

sudo lfs setquota -u user1 -b 0 -B 0 -i 0 -I 0 /mnt/lustre

Para remover o limite de bloco do projeto padrão:

sudo lfs setquota -P -b 0 -B 0 /mnt/lustre

Problemas comuns

Ao trabalhar com cotas do Lustre, esteja ciente dos seguintes problemas comuns:

  • Cache concedido: o cache concedido é um recurso do Lustre que permite que os clientes recebam um bloco de armazenamento como uma "concessão" do destino de armazenamento de objetos (OST, na sigla em inglês) para gravar dados. Quando um cliente tem esse cache concedido, ele pode retornar imediatamente uma mensagem de sucesso ao usuário para uma operação de gravação, mesmo que os dados ainda estejam no cache local do cliente e antes que os dados sejam gravados fisicamente no disco. Essa é uma otimização de desempenho que minimiza a latência.

    O cache concedido introduz o potencial de estouro de cota. Como o cache concedido permite que os clientes continuem gravando dados no cache, mesmo que a cota do lado do servidor tenha sido esgotada, é possível que um usuário exceda o limite absoluto.

  • Atribuição incorreta do ID do projeto: para que as cotas de projeto funcionem, os diretórios e arquivos precisam receber um ID de projeto correto usando lfs project -spr. Omitir -r significa que o ID do projeto não é aplicado a arquivos e subdiretórios atuais. Omitir -s significa que novos arquivos e diretórios criados posteriormente não herdarão o ID do projeto.

  • Várias cotas e "o mais restritivo vence": um usuário pode estar sujeito a uma cota de usuário, uma ou mais cotas de grupo e uma ou mais cotas de projeto simultaneamente. O Lustre aplica o mais restritivo desses limites. Isso significa que um usuário pode ter uma cota pessoal grande, mas ser restrito por uma cota de projeto menor para arquivos no diretório desse projeto.

  • Ignorar a cota do usuário raiz: as gravações de um usuário root ignoram a aplicação da cota. Isso pode levar ao preenchimento do sistema de arquivos por tarefas administrativas, mesmo quando as cotas estão em vigor para outros usuários.

  • fallocate não respeita cotas: os usuários podem usar fallocate para reservar espaço no sistema de arquivos que exceda o limite absoluto.