Partilhar via


Compreender os tamanhos de diretório nos Arquivos NetApp do Azure

Quando um arquivo é criado em um diretório, uma entrada é adicionada a um arquivo de índice oculto dentro do volume Arquivos NetApp do Azure. Esse arquivo de índice ajuda a manter o controle dos inodes existentes em um diretório e ajuda a agilizar as solicitações de pesquisa para diretórios com um grande número de arquivos. À medida que as entradas são adicionadas a este ficheiro, o tamanho do ficheiro aumenta (mas nunca diminui) a uma taxa de aproximadamente 512 bytes por entrada, dependendo do comprimento do nome do ficheiro. Nomes de arquivo mais longos adicionam mais tamanho ao arquivo. Links simbólicos também adicionam entradas a esse arquivo. Este conceito é conhecido como o tamanho do diretório, que é um elemento comum em todos os sistemas de arquivos baseados em Linux. O tamanho do diretório não é o número total máximo de arquivos em um único volume de Arquivos NetApp do Azure. Isso é determinado pelo maxfiles valor.

Por padrão, quando um novo diretório é criado, ele consome 4 KiB (4.096 bytes) ou oito blocos de 512 bytes. Você pode visualizar o tamanho de um diretório recém-criado a partir de um cliente Linux usando o comando stat.

# mkdir dirsize 
# stat dirsize 
File: ‘dirsize’ 
Size: 4096            Blocks: 8          IO Block: 32768  directory 

Os tamanhos de diretório são específicos para um único diretório e não combinam em tamanhos. Por exemplo, se houver 10 diretórios em um volume, cada um poderá se aproximar do limite de tamanho de diretório de 320 MiB em um único volume.

Determinar se um diretório está se aproximando do tamanho limite

Para um diretório de 320 MiB, o número de blocos é 655360, com cada tamanho de bloco sendo de 512 bytes. (Ou seja, 320x1024x1024/512.) Esse número se traduz em aproximadamente 4-5 milhões de arquivos no máximo para um diretório de 320 MiB. No entanto, o número real de arquivos máximos pode ser menor, dependendo de fatores como o número de arquivos com caracteres não-ASCII no diretório.

Você pode usar o stat comando de um cliente para ver se um diretório está se aproximando do limite máximo de tamanho para metadados de diretório (320 MB). Se você atingir o limite de tamanho máximo para um único diretório para Arquivos NetApp do Azure, o erro No space left on device ocorrerá.

Para um diretório de 320 MB, o número de blocos é 655.360, com cada tamanho de bloco sendo de 512 bytes. (Ou seja, 320x1024x1024/512.) Esse número se traduz em aproximadamente 4 milhões de arquivos no máximo para um diretório de 320 MB. No entanto, o número real de arquivos máximos pode ser menor, dependendo de fatores como o número de arquivos com caracteres não-ASCII no diretório. Para obter informações sobre como monitorar o maxdirsize, consulte Monitoramento maxdirsize.

Considerações sobre o tamanho do diretório

Ao lidar com um ambiente de alta contagem de arquivos, considere as seguintes recomendações:

  • Os volumes do Azure NetApp Files suportam até 320 MiB para tamanhos de diretório. Este valor não pode ser aumentado.
  • Quando o tamanho do diretório de um volume é excedido, os clientes exibem um erro de falta de espaço, mesmo que haja espaço livre disponível no volume.
  • Para volumes regulares, um tamanho de diretório de 320 MiB equivale a cerca de 4-5 milhões de arquivos em um único diretório. Esse valor depende dos comprimentos do nome do arquivo.
  • Grandes volumes têm uma arquitetura diferente dos volumes regulares.
  • Contagens altas de arquivos em um único diretório podem apresentar problemas de desempenho durante a pesquisa. Sempre que possível, limite o tamanho total de um único diretório a 2 MiB (cerca de 27.000 ficheiros) quando são necessárias pesquisas frequentes.
    • Se forem necessários mais arquivos em um único diretório, ajuste as expectativas de desempenho de pesquisa de acordo. Enquanto os Arquivos NetApp do Azure indexam as listagens de arquivos de diretório quanto ao desempenho, as pesquisas podem levar algum tempo com contagens altas de arquivos.
  • Ao projetar seu sistema de arquivos, evite layouts de diretório simples. Para obter informações sobre diferentes abordagens para layouts de diretório, consulte Sobre layouts de diretório.
  • Para resolver problemas em que o tamanho do diretório foi excedido e novos arquivos não podem ser criados, exclua ou mova arquivos para fora do diretório relevante.

Sobre layouts de diretório

O maxdirsize valor pode criar preocupações quando você estiver usando estruturas de diretório simples, onde uma única pasta contém milhões de arquivos em um único nível. As estruturas de pastas onde os ficheiros, pastas e subpastas são intercalados têm um baixo impacto no maxdirsize. Existem várias metodologias de estrutura de diretórios.

Uma estrutura de diretório simples é um único diretório com muitos arquivos abaixo do mesmo diretório.

Diagrama de uma estrutura de diretórios simples.

Uma ampla estrutura de diretórios contém muitos diretórios de nível superior com arquivos espalhados por todos os diretórios.

Diagrama de uma ampla estrutura de diretórios.

Uma estrutura de diretórios profunda contém menos diretórios de nível superior com muitos subdiretórios. Embora essa estrutura forneça menos arquivos por pasta, os comprimentos dos caminhos de arquivo podem se tornar um problema se os layouts de diretório forem muito profundos e os caminhos de arquivo se tornarem muito longos. Para obter detalhes sobre comprimentos de caminho de arquivo, consulte Compreender comprimentos de caminho de arquivo em Arquivos NetApp do Azure.

Diagrama de uma estrutura de diretórios profunda.

Impacto de estruturas de diretório simples nos Arquivos NetApp do Azure

Estruturas de diretório simples (muitos arquivos em um único ou poucos diretórios) têm um efeito negativo em uma ampla variedade de sistemas de arquivos, volumes de arquivos NetApp do Azure ou outros. Os problemas potenciais incluem:

  • Pressão da memória
  • Utilização da CPU
  • Desempenho/latência da rede (especialmente durante consultas em massa de arquivos, GETATTR operações, READDIR operações)

Devido ao design de grandes volumes dos Arquivos NetApp do Azure, o impacto do maxdirsize é único. O grande volume maxdirsize dos Arquivos NetApp do Azure é afetado exclusivamente devido ao seu design. Ao contrário de um volume normal, um grande volume usa links físicos remotos dentro dos Arquivos NetApp do Azure para ajudar a redirecionar o tráfego entre diferentes dispositivos de armazenamento para fornecer mais escala e desempenho. Ao usar diretórios simples, há uma proporção maior de links físicos remotos internos para arquivos locais. Esses links físicos remotos contam em relação ao valor total maxdirsize , portanto, um grande volume pode se aproximar de seu maxdirsize limite mais rápido do que um volume normal.

Por exemplo, se um único diretório tiver milhões de arquivos e gerar cerca de 85% de links físicos remotos para o sistema de arquivos, você pode esperar maxdirsize esgotar quase o dobro da quantidade de um volume normal.

Para obter melhores resultados com tamanhos de diretório nos Arquivos NetApp do Azure:

  • Evite estruturas de diretório simples nos Arquivos NetApp do Azure. Estruturas de diretório amplas ou profundas funcionam melhor, desde que o comprimento do caminho do arquivo ou pasta não exceda os padrões do protocolo NAS.
  • Se estruturas de diretório simples forem inevitáveis, monitore o maxdirsize para os diretórios.

Monitorização maxdirsize

Para um único diretório, use o stat comando para localizar o tamanho do diretório.

# stat /mnt/dir_11/c5 

Embora o stat comando possa ser usado para verificar o tamanho do diretório de um diretório específico, pode não ser tão eficiente executá-lo individualmente em um único diretório. Para ver uma lista dos maiores tamanhos de diretórios classificados do maior para o menor, o comando a seguir fornece isso ao omitir diretórios de instantâneo da consulta.

# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn 

Nota

O tamanho do diretório relatado pelo comando stat é em bytes. O tamanho relatado no comando find está em KiB.

Exemplo

# stat /mnt/dir_11/c5 

  File: ‘/mnt/dir_11/c5’ 

  Size: 322396160       Blocks: 632168     IO Block: 32768  directory 
 
# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn 
316084 /mnt/dir_11/c5 

3792 /mnt/dir_19 

3792 /mnt/dir_16 

No anterior, o tamanho do diretório é de 316.084 KiB (308,6 MiB), o que se aproxima do limite de /mnt/dir_11/c5 320 MiB. Isso equivale a cerca de 4,1 milhões de arquivos.

# ls /mnt/dir_11/c5 | wc -l
4171624

Nesse caso, considere ações corretivas, como mover ou excluir arquivos.

Mais informações