Por que é que um elevado número de ficheiros esgota os inodes do NAS doméstico antes do espaço em disco?

Eva Wong é a Redatora Técnica e e entusiasta residente na ZimaSpace. Uma geek de longa data com paixão por homelabs e software de código aberto, ela é especialista em traduzir conceitos técnicos complexos em guias acessíveis e práticos . Eva acredita que o auto-hospedagem deve ser divertida, não intimidante. Através dos seus tutoriais, ela capacita a comunidade adesmistificar configurações de hardware , desde a construção do seu primeiro NAS até dominar os contêineres Docker., from building their first NAS to mastering Docker containers.

Um elevado número de ficheiros pode esgotar o fornecimento de inodes de um NAS doméstico antes de esgotar os blocos de dados. O resultado parece contraditório: um ecrã de capacidade pode mostrar gigabytes ou terabytes livres, mas uma tarefa de upload, backup, container ou indexação já não consegue criar outro ficheiro.

Este é um limite do sistema de ficheiros, não uma propriedade universal de todos os NAS. A falha clássica é mais fácil de ver no ext4 e sistemas de ficheiros semelhantes com uma população de inodes definida, enquanto o XFS e o Btrfs alocam metadados de forma diferente. O tipo de sistema de ficheiros determina, portanto, se “inodes livres” é a métrica correta ou apenas uma parte do diagnóstico.

Um NAS Doméstico Pode Esgotar Slots de Objetos Antes dos Blocos de Dados

A causa direta é que os dados do ficheiro e a identidade do ficheiro consomem recursos diferentes. No ext4, um inode regista metadados como carimbos de data/hora, propriedade, mapeamentos de blocos e atributos estendidos, enquanto uma entrada de diretório associa um nome a um inode. A documentação do inode ext4 do kernel Linux descreve a sua tabela de inodes como um array linear distribuído por grupos de blocos.

Cada novo ficheiro regular normalmente precisa de um inode, mas o tamanho em bytes não determina quantos inodes são necessários. Um vídeo de 100 GB pode ocupar um inode, enquanto um milhão de ficheiros de cache minúsculos pode requerer aproximadamente um milhão de inodes. Diretórios e links simbólicos também são objetos do sistema de ficheiros, enquanto múltiplos links físicos para o mesmo ficheiro partilham um inode.

Blocos livres podem, portanto, permanecer disponíveis depois de o último inode livre ter sido atribuído. Nesse ponto, o NAS ainda tem espaço para mais conteúdo de ficheiros em princípio, mas falta-lhe a identidade de metadados necessária para criar outro objeto. A capacidade e a contagem de objetos são suficientemente independentes para que ambas devam ser observadas.

Por que os Ficheiros Pequenos Aumentam o Uso de Inodes Mais Rápido do que a Capacidade

Ficheiros pequenos criam alta densidade de objetos: são necessárias muitas identidades para relativamente pouco conteúdo. Um ficheiro de zero bytes ainda precisa de metadados, e uma árvore de diretórios adiciona os seus próprios inodes de diretório mesmo antes de contar os ficheiros que contém. É por isso que uma carga de trabalho pode consumir slots de ficheiros muito mais rapidamente do que consome os terabytes anunciados de um NAS.

No ext4, a ferramenta de criação pode calcular a população de inodes a partir de uma razão bytes-por-inode ou aceitar uma contagem explícita de inodes. As opções de alocação de inode do mke2fs indicam que uma razão bytes-por-inode maior cria menos inodes e que a razão não pode ser alterada após a criação do sistema de ficheiros, embora o redimensionamento mantenha a razão configurada adicionando inodes com o novo espaço.

Um modelo simples de planeamento é população aproximada de inodes = tamanho do sistema de ficheiros ÷ razão bytes-por-inode. Com uma razão hipotética de 16 KiB, 1 TiB corresponde a cerca de 67 milhões de slots de inode antes de considerar a sobrecarga de formatação e os limites do sistema de ficheiros. Isto é uma ilustração, não um padrão universal de NAS: perfis de formatação e implementações de sistemas de ficheiros escolhem políticas diferentes.

O Que Muda Quando o Último Inode Livre É Alocado

No caso clássico de exaustão, as operações que precisam de um novo inode começam a falhar. Novos carregamentos, diretórios, ficheiros temporários, membros de arquivos extraídos e ficheiros de estado da aplicação podem ser rejeitados, mesmo que os ficheiros existentes ainda possam ser lidos. Um ficheiro existente também pode crescer se ainda houver blocos de dados livres porque já possui um inode.

As aplicações frequentemente traduzem a falha de alocação numa mensagem genérica “Sem espaço disponível no dispositivo”. Essa mensagem identifica uma falha na alocação de recursos, mas não informa o utilizador se o recurso em falta eram blocos de dados, inodes, uma cota permitida ou espaço de metadados específico do sistema de ficheiros. O erro visível deve ser acompanhado por contadores do sistema de ficheiros.

Quais Cargas de Trabalho de NAS Doméstico Criam Contagens Extremas de Ficheiros

A carga de trabalho arriscada não é simplesmente “dados grandes”. É qualquer carga de trabalho que materialize muitos objetos independentes do sistema de ficheiros, especialmente quando a limpeza ou retenção permite que esses objetos se acumulem durante meses.

Camadas de Contentores, Registos e Árvores de Pacotes

Imagens de contentores, pacotes de software extraídos, árvores de dependências, registos rotativos e caches de aplicações podem colocar um grande número de pequenos objetos sob um serviço hospedado em NAS. A imagem do contentor pode parecer modesta em gigabytes, enquanto as suas camadas descompactadas e estado gravável consomem muito mais identidades de objetos do que um ficheiro multimédia do mesmo tamanho.

Miniaturas de Fotos e Índices de Pesquisa

Um gestor de fotos pode gerar miniaturas, pré-visualizações, sidecars, recortes de rosto ou fragmentos de índice para cada ativo de origem. Algumas aplicações consolidam estes registos em bases de dados, enquanto outras armazenam muitos deles como ficheiros comuns, pelo que o efeito inode depende do design de armazenamento da aplicação e não apenas do tamanho da biblioteca de fotos.

Históricos de Sincronização, Árvores de Backup e Armazenamento de Correio

Sistemas de versionamento que materializam revisões como ficheiros, árvores de backup contendo muitos objetos fonte e armazenamentos de correio com uma mensagem por ficheiro podem todos produzir contagens elevadas de ficheiros. Snapshots copy-on-write e repositórios deduplicados podem representar versões de forma diferente, por isso a contagem de snapshots não deve ser tratada como uma contagem direta de inodes sem verificar a implementação.

Por que um Painel de Capacidade Pode Não Detectar Pressão de Inodes

Muitos painéis enfatizam bytes: capacidade total, blocos usados e blocos livres. A interface padrão de estatísticas do sistema de ficheiros mantém contadores de objetos separadamente como números totais, livres e disponíveis de ficheiros; no Linux estes correspondem a campos como f_files e f_ffree em estatísticas do sistema de ficheiros statvfs. Uma interface que omite esses campos pode parecer saudável durante o esgotamento clássico de inode.

Num NAS baseado em Linux com acesso shell, o uso de blocos e o uso de inodes podem ser comparados para o mesmo caminho montado:

df -h /caminho/no/nas
df -i /caminho/no/nas

O manual GNU df define -i como uso de inode em vez de uso de blocos e expõe campos totais, usados, disponíveis e percentagem. Blocos livres ao lado de inodes disponíveis a zero suportam fortemente o esgotamento clássico de inode; margem em ambas as colunas aponta para um limite diferente.

Sistemas de ficheiros de inode fixo e dinâmico falham de forma diferente

“O NAS ficou sem inodes” é preciso apenas quando o modelo de alocação do sistema de ficheiros e os contadores reportados o suportam. A mesma mensagem de sem espaço pode vir de um limite diferente de metadados noutro sistema de ficheiros.

Modelo de sistema de ficheiros Como os metadados do objeto são provisionados Métrica mais útil em primeiro lugar Limite de interpretação
ext4 As tabelas de inode contêm uma população configurada através dos grupos de blocos df -i ao lado do uso de blocos Inodes livres a zero com blocos livres é o padrão clássico de esgotamento de inode
XFS O espaço pode ser alocado para blocos de inode dentro de uma política de percentagem de espaço de inode Contadores de inode mais dados de alocação e espaço livre do XFS Não assuma uma tabela de inodes no estilo ext4 format-time
Btrfs Dados e metadados ocupam tipos de grupos de blocos separados Relatório de dados, metadados e espaço não alocado do Btrfs O esgotamento de metadados pode assemelhar-se a ENOSPC de capacidade livre sem o clássico esgotamento fixo de inodes

A política de espaço de inode do XFS pode limitar a percentagem do sistema de ficheiros alocada a inodes, enquanto o relatório oficial do sistema de ficheiros Btrfs separa Dados, Sistema, Metadados e Reserva Global. Esses modelos podem produzir limites relacionados com metadados, mas não devem ser explicados como se todos os NAS tivessem a mesma tabela fixa de inodes.

A interface genérica de estatísticas também alerta que nem todos os campos retornados são significativos em todos os sistemas de ficheiros. Identifique primeiro o sistema de ficheiros montado e depois interprete df -i através dessa implementação em vez de tratar um comando como prova universal.

O que o espaço livre de inodes significa para o planeamento da capacidade NAS

Uma previsão de capacidade para uma carga de trabalho com muitos objetos precisa tanto dos bytes esperados como da contagem esperada de objetos. Arquivos de mídia são geralmente densos em bytes, enquanto árvores de dependências, miniaturas, armazenamentos de correio e árvores de backup materializadas podem ser densos em objetos. Duas cargas de trabalho com o mesmo tamanho lógico podem, portanto, necessitar de espaços de metadados muito diferentes.

Para um volume ext4, a relação bytes-por-inode é uma escolha de design feita no momento da formatação, e não um ajuste normal em tempo real. O redimensionamento pode adicionar inodes em conformidade com a relação estabelecida, mas não altera retroativamente para um perfil mais denso. Reformatar apenas para mudar essa relação é uma decisão de migração com consequências de backup e restauração, não um ajuste casual de desempenho.

Uma vez descartada a pressão sobre os inodes, as questões normais de capacidade de blocos permanecem separadas; um plano de capacidade de armazenamento NAS doméstico pode complementar essa decisão, mas a orientação sobre terabytes livres não substitui a contagem de inodes ou metadados.

Por que eliminar um ficheiro grande pode não recuperar inodes suficientes

Eliminar um filme grande pode libertar muitos blocos de dados, mas normalmente liberta apenas um inode. Remover uma árvore de diretórios contendo centenas de milhares de objetos de cache descartáveis pode libertar muitos inodes, mesmo quando a capacidade de bytes recuperada é comparativamente pequena. A limpeza deve corresponder ao recurso que está esgotado.

Um objeto desvinculado nem sempre é recuperado imediatamente. O comportamento unlink do Linux mantém um ficheiro em existência quando um processo ainda tem a sua última ligação aberta, e liberta-o após o último descritor de ficheiro que o referencia ser fechado. A recuperação de inodes pode portanto atrasar-se em relação à eliminação do caminho para registos ativos ou ficheiros de serviço.

Perguntas frequentes

Cada ficheiro usa exatamente um inode?

Um ficheiro normal normalmente tem um inode, e diretórios e ligações simbólicas também têm as suas próprias identidades no sistema de ficheiros. Vários nomes de ligação rígida podem apontar para o mesmo inode, enquanto funcionalidades específicas do sistema de ficheiros podem armazenar metadados adicionais em objetos separados, pelo que a contagem de caminhos e a contagem de inodes estão relacionadas mas nem sempre são idênticas.

Um cache SSD ou uma rede mais rápida podem evitar o esgotamento de inodes?

Não. Meios mais rápidos e redes podem reduzir a latência ou aumentar a taxa de transferência, mas não criam slots adicionais de inode numa população fixa de inodes. Podem fazer com que uma carga de trabalho com muitos ficheiros termine mais rapidamente e atinja o mesmo limite de metadados mais cedo.

Funciona? df -i funciona em todos os sistemas de ficheiros NAS domésticos?

Ele reporta os contadores do tipo inode fornecidos através da interface do sistema de ficheiros montado, mas esses contadores podem não ter o mesmo significado em todos os sistemas de ficheiros. Use-o diretamente para diagnóstico ao estilo ext4 e combine-o com ferramentas de metadados específicas do sistema de ficheiros para XFS, Btrfs, ZFS ou um dispositivo que abstraia o volume subjacente.

Expandir um sistema de ficheiros ext4 pode adicionar mais inodes?

Sim, o redimensionamento ext4 pode adicionar inodes à medida que novo espaço é incorporado, mantendo a relação bytes-por-inode existente. Isso difere de alterar a relação no sistema de ficheiros existente, o que a documentação da ferramenta de criação indica que não é suportado após a formatação.

Será que todos os erros “Sem espaço disponível no dispositivo” são causados por inodes?

Não. Blocos de dados completos, quotas, espaço reservado, alocação de metadados Btrfs, limites de espaço temporário e alguns limites de recursos não relacionados ao armazenamento podem produzir mensagens semelhantes. O esgotamento de inodes é suportado quando a falha envolve a criação de objetos do sistema de ficheiros e o contador de inodes relevante não tem entradas disponíveis.

A contagem de ficheiros é uma dimensão de capacidade por si só

Um NAS doméstico pode manter espaço livre no disco e ainda assim deixar de aceitar novos objetos porque os bytes e os metadados do sistema de ficheiros são dimensões de capacidade separadas. Considere a contagem elevada de ficheiros como uma propriedade da carga de trabalho, confirme o sistema de ficheiros real e compare a margem de blocos com a margem de inodes ou metadados antes de concluir que os discos estão cheios.

Centro de Tecnologia e IA

Mais para Ler

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.