Entender os tamanhos de diretório no Azure NetApp Files
Quando um arquivo é criado em um diretório, uma entrada é adicionada a um arquivo de índice oculto dentro do volume do Azure NetApp Files. Esse arquivo de índice ajuda a controlar os inodes existentes em um diretório e ajuda a agilizar solicitações de pesquisa para diretórios com um alto número de arquivos. À medida que as entradas são adicionadas a esse arquivo, o tamanho do arquivo aumenta (mas nunca diminui) a uma taxa de aproximadamente 512 bytes por entrada, dependendo do comprimento do nome do arquivo. Nomes de arquivo mais longos adicionam mais tamanho ao arquivo. Links simbólicos também adicionam entradas a esse arquivo. Esse 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 do Azure NetApp Files. 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. É possível exibir o tamanho de um diretório recém-criado de um cliente do Linux usando o comando de estatística.
# 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 do diretório de 320 MiB em um único volume.
Determinar se um diretório está se aproximando do limite de tamanho
Para um diretório de 320 MiB, o número de blocos é de 655360, sendo que cada tamanho de bloco é de 512 bytes. (Ou seja, 320x1024x1024/512.) Esse número se traduz em um máximo de, aproximadamente, 4 a 5 milhões arquivos para um diretório de 320 MiB. No entanto, o número máximo real de arquivos pode ser menor, dependendo de fatores como o número de arquivos com caracteres que não sejam ASCII no diretório.
É possível usar o comando stat
de um cliente para ver se um diretório está se aproximando do limite de tamanho máximo para metadados de diretório (320 MB). Se você atingir o limite máximo de tamanho para um único diretório do Azure NetApp Files, ocorrerá o erro No space left on device
.
Para um diretório de 320 MB, o número de blocos é de 655.360, sendo que cada tamanho de bloco é de 512 bytes. (ou seja, 320x1024x1024/512). Esse número se traduz em um máximo de, aproximadamente, 4 milhões arquivos para um diretório de 320 MB. No entanto, o número máximo real de arquivos pode ser menor, dependendo de fatores como o número de arquivos com caracteres que não sejam 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 dão suporte a até 320 MiB para tamanhos de diretório. Esse valor não pode ser aumentado.
- Depois que o tamanho do diretório de um volume for excedido, os clientes exibirão um erro fora do 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 a 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.
- Altas contagens de arquivos em um único diretório podem apresentar problemas de desempenho ao pesquisar. Quando possível, limite o tamanho total de um único diretório para 2 MiB (aproximadamente 27.000 arquivos) quando forem necessárias pesquisas frequentes.
- Se mais arquivos forem necessários em um único diretório, ajuste as expectativas de desempenho de pesquisa adequadamente. Embora o Azure NetApp Files indexe as listagens de arquivos de diretório para desempenho, as pesquisas podem levar algum tempo com altas contagens 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 valor maxdirsize
pode criar preocupações ao usar as estruturas de diretório simples, em que uma única pasta contém milhões de arquivos em um único nível. As estruturas de pastas em que arquivos, pastas e subpastas são intercaladas têm um baixo impacto em maxdirsize
. Há várias metodologias de estrutura de diretório.
Uma estrutura de diretório simples é um único diretório com muitos arquivos abaixo do mesmo diretório.
Uma estrutura de diretório ampla contém muitos diretórios de nível superior com arquivos espalhados por todos os diretórios.
Uma estrutura de diretório 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 do caminho do arquivo poderão 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 os comprimentos do caminho do arquivo, consulte Entenda os comprimentos do caminho do arquivo no Azure NetApp Files.
Impacto das estruturas de diretório simples no Azure NetApp Files
Estruturas de diretório simples (muitos arquivos em um ou poucos diretórios) têm um efeito negativo em uma ampla matriz de sistemas de arquivos, volumes do Azure NetApp Files ou outros. Os possíveis problemas incluem:
- Demanda de memória
- Utilização da CPU
- Desempenho/latência de rede (especialmente durante consultas em massa de arquivos, operações
GETATTR
eREADDIR
)
Devido ao design de grandes volumes do Azure NetApp Files, o impacto de maxdirsize
é exclusivo. O grande volume maxdirsize
do Azure NetApp Files é afetado exclusivamente devido ao seu design. Ao contrário de um volume regular, um grande volume usa links rígidos remotos dentro do Azure NetApp Files para ajudar a redirecionar o tráfego em diferentes dispositivos de armazenamento para fornecer mais escala e desempenho. Ao usar diretórios simples, há uma taxa maior de links rígidos remotos internos para arquivos locais. Esses links rígidos remotos contam com relação ao valor total maxdirsize
, portanto, um grande volume pode se aproximar de seu limite maxdirsize
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 rígidos remotos para o sistema de arquivos, você poderá esperar maxdirsize
ser esgotado quase o dobro da quantidade que um volume normal faria.
Para obter melhores resultados com tamanhos de diretório no Azure NetApp Files:
- Evite estruturas de diretório simples no Azure NetApp Files. Estruturas de diretório amplas ou profundas funcionam melhor, desde que o comprimento do caminho do arquivo ou da pasta não exceda os padrões de protocolo do NAS.
- Se as estruturas de diretório simples forem inevitáveis, monitore o
maxdirsize
para os diretórios.
Monitorar maxdirsize
Para um único diretório, use o comando stat
para localizar o tamanho do diretório.
# stat /mnt/dir_11/c5
Embora o comando stat
possa ser usado para verificar o tamanho do diretório de um diretório específico, talvez não seja tão eficiente executá-lo individualmente em um único diretório. Para visualizar uma lista dos maiores tamanhos de diretório classificados de maior para 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
Observação
O tamanho do diretório relatado pelo comando stat está em bytes. O tamanho relatado no comando localizar 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 /mnt/dir_11/c5
é 316.084 KiB (308,6 MiB), que se aproxima do limite de 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.