Os sistemas de arquivos Unix geralmente têm uma tabela de inode, e o número de entradas nesta tabela é geralmente fixo no momento em que o sistema de arquivos é criado. Às vezes, isso leva as pessoas com muito espaço em disco a receber mensagens de erro confusas sobre falta de espaço livre e, mesmo depois de descobrirem qual é o problema, não há uma solução fácil para o que fazer.
Mas parece (para mim) que seria muito desejável evitar toda essa bagunça alocando inodes sob demanda, de forma totalmente transparente para usuários e administradores de sistema. Se você gosta de hacks fofos, pode até transformar a própria tabela de inode em um arquivo e, assim, reutilizar o código que você já possui que encontra espaço livre no disco. Se você tiver sorte, pode até acabar com os inodes próximos aos arquivos, sem tentar explicitamente alcançar esse resultado.
Mas ninguém (que eu saiba) realmente faz isso, então provavelmente há um problema que estou perdendo. Alguma idéia do que possa ser?
fonte
Respostas:
Digamos que você transformou a tabela de inodes em um arquivo; então a próxima pergunta é ... onde você armazena informações sobre esse arquivo? Assim, você precisaria de inodes "reais" e de inodes "estendidos", como uma tabela de partição do MS-DOS. Dado, você precisaria apenas de um (ou talvez alguns - por exemplo, para que seu diário também seja um arquivo). Mas você teria casos especiais, código diferente. Qualquer corrupção nesse arquivo também seria desastrosa. E considere que, antes do registro no diário, era comum os arquivos que estavam sendo gravados, por exemplo, quando a energia acabava danificada. Suas operações de arquivo teriam que ser muito mais robustas vs. falta de energia / falha / etc. do que eles estavam, por exemplo, ext2.
Os sistemas de arquivos Unix tradicionais encontraram uma solução mais simples (e mais robusta): colocar um bloco de inode (ou grupo de blocos) a cada bloco X. Então você os encontra por aritmética simples. Obviamente, não é possível adicionar mais (sem reestruturar todo o sistema de arquivos). E mesmo que você perca / corrompa o bloco de inodes para o qual estava gravando quando a energia falhou, isso está perdendo apenas alguns inodes - muito melhor do que uma parte substancial do sistema de arquivos.
Projetos mais modernos usam coisas como variantes de árvore B. Sistemas de arquivos modernos como btrfs, XFS e ZFS não sofrem limites de inode.
fonte
df
relata bastante espaço disponível, como também não pode ser corrigido com a exclusão de arquivos, pois a exclusão de um arquivo requer a alocação de espaço de metadados.Muitos sistemas de arquivos têm uma tabela de inodes alocáveis dinamicamente (ou seu equivalente moral) (XFS, BTRFS, ZFS, VxFS ...)
O Unix UFS original, no entanto, tinha inodes que foram corrigidos no momento da criação do sistema de arquivos e os sistemas de arquivos derivados dele (Linux EXT, Solaris UFS) frequentemente continuaram o esquema. É robusto e mais simples de implementar. Tantos casos de uso são adequados, que projetar um novo sistema de arquivos apenas para evitar que um problema não seja fácil de justificar.
fonte
Existem sistemas de arquivos que alocam inodes dinamicamente: pelo menos, o Veritas VxFS (= o sistema de arquivos padrão do HP-UX e uma das opções disponíveis no Solaris) e o XFS (o tipo de sistema de arquivos padrão no RHEL 7) funcionam dessa maneira. Btrfs e JFS da IBM também.
fonte