Cotas do sistema de arquivos

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

O que são cotas de sistema de arquivos?

Com as cotas no Lustre gerenciado, é possível 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 seu sistema de arquivos.

As cotas são aplicadas a diferentes entidades:

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

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

  • Os limites de bloqueio são um limite na quantidade de espaço em disco que pode ser usada.
  • Os limites de inode são um limite no 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 rígido, se houver um, a eles tempo para reduzir o uso antes de serem bloqueados. Quando o período de carência expirar, se o uso ainda estiver acima do limite flexível, ele será aplicado como um limite rígido, bloqueando todas as novas gravações até que o espaço em disco ou a contagem de nós de índice fique abaixo do limite flexível.

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

  • Um limite fixo define o máximo absoluto. Se esse limite for atingido, todas as operações de gravação subsequentes vão falhar, 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 rastrear o uso da cota.

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

Os usuários root 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:

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

Definir cotas

Use o comando lfs setquota para configurar os limites de bloco e inode. É possível especificar apenas limites de bloco, apenas limites de inode ou ambos. Da mesma forma, é possível especificar limites fixos, 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.
  • -g especifica um grupo pelo nome ou GID.
  • -p especifica um projeto por ID do projeto.
  • 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, UID, GID ou ID do projeto. Omita esse valor se estiver especificando cotas padrão de usuário, grupo ou projeto.
  • -b e -B são limites flexíveis e rígidos para o uso de blocos. Os limites flexíveis precisam ser menores que os rígidos. 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 rígidos para o uso de inode. Os limites flexíveis precisam ser menores que os rígidos.
  • MOUNT_DIR é o ponto de montagem do sistema de arquivos Managed Lustre.

Não é possível configurar o período de carência ao mesmo tempo em que se 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 bloqueio flexível de 100 GB, um limite de bloqueio rígido de 120 GB, um limite flexível de inode de 10.000 e um limite rígido de inode 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 bloqueio rígido 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 extra 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.
    • -r aplica o ID do projeto de forma recursiva a todos os diretórios e arquivos filhos.
    • -p informa ao comando para definir o ID do projeto especificado no arquivo ou diretório indicado.
    • PATH/TO/DIR/OR/FILE é o caminho para um diretório ou arquivo em que definir o ID do projeto. Só é possível especificar um caminho ou arquivo.

    Para mais flags e informações, execute man lfs project no seu 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 bloqueio rígido 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 se torne um limite rígido. 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, não para 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:

  • O -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.
  • O -p aplica o período de carência às cotas do projeto.
  • -b e -i especificam os períodos de carência de bloco e inode, respectivamente. A unidade padrão é segundos. Você pode 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 máximo seja atingido.

Por exemplo, para definir um período de carência de bloqueio de sete 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 receber uma notificação quando um limite flexível de bloqueio 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 seu cliente.

Por exemplo, para ver 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 bloqueio suave em kilobytes.
  • blimit: limite de bloqueio rígido em kilobytes.
  • bgrace: período de carência restante se o limite flexível de bloqueio for excedido. Um asterisco (*) indica que o limite flexível foi excedido.
  • files: número de inodes usados.
  • iquota: limite flexível de inode.
  • ilimit: limite rígido de inode.
  • 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 ver os períodos de carência configurados para todas as cotas de usuário:

lfs quota -t -u /mnt/lustre

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 padrão de bloqueio de projetos:

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) para gravação de 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 enquanto os dados ainda estão no cache local do cliente e antes de serem gravados fisicamente no disco. Essa é uma otimização de performance que minimiza a latência.

    O cache concedido apresenta o potencial de estouros 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 máximo.

  • Atribuição incorreta de 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. Se você omitir -s, os novos arquivos e diretórios criados depois não vão herdar o ID do projeto.

  • Várias cotas e "a mais restritiva 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 impõe 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.

  • Substituição da cota de usuário raiz: as gravações de um usuário root substituem a aplicação da cota. Isso pode fazer com que o sistema de arquivos seja preenchido por tarefas administrativas, mesmo quando há cotas para outros usuários.

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