Por causa da maneira como o sistema de arquivos é construído. É um pouco confuso e, por padrão, você não pode ter a proporção de até 1/64 MB.
Do documento Ext4 Disk Layout no kernel.org , vemos que os componentes internos do sistema de arquivos são vinculado ao tamanho do bloco (4 kB por padrão), que controla o tamanho de um grupo de blocos e a quantidade de inodes em um grupo de blocos. Um grupo de blocos possui um bitmap de um bloco dos blocos do grupo e um mínimo de um bloco de inodes.
Por causa do bitmap, o tamanho máximo do grupo de blocos é 8 blocks * block size in bytes
, portanto, em um FS com blocos de 4 kB, os grupos de blocos são 32768 blocos ou 128 MB de tamanho. Os inodes recebem um bloco no mínimo, portanto, para blocos de 4 kB, você recebe pelo menos (4096 B/block) / (256 B/inode) = 16 inodes/block
ou 16 inodes por 128 MB ou 1 inode por 8 MB.
A 256 B / inode, isto é 256 B / 8 MB, ou 1 byte por 32 kB, ou cerca de 0,003% do tamanho total, para os inodes.
Diminuir o número de inodes não ajudaria, você só teria um bloco de inodes parcialmente preenchido. Além disso, o tamanho de um inode também não importa, pois a alocação é feita por bloco. É o tamanho do grupo de blocos que é o limite real para os metadados.
Aumentar o tamanho do bloco ajudaria e, em teoria, o tamanho máximo do grupo de blocos aumenta no quadrado do tamanho do bloco (exceto que ele parece limitar um pouco menos que 64k blocos / grupo). Mas você não pode usar um tamanho de bloco maior que o tamanho da página do sistema, assim, no x86, você fica preso em blocos de 4 kB.
No entanto, existe o bigalloc
feature que é exatamente o que você deseja:
for a filesystem of mostly huge files, it is desirable to be able to allocate disk blocks in units of multiple blocks to reduce both fragmentation and metadata overhead. The bigalloc feature provides exactly this ability.
The administrator can set a block cluster size at mkfs time (which is stored in the s_log_cluster_size field in the superblock); from then on, the block bitmaps track clusters, not individual blocks. This means that block groups can be several gigabytes in size (instead of just 128MiB); however, the minimum allocation unit becomes a cluster, not a block, even for directories.
Você pode ativar isso com mkfs.ext4 -Obigalloc
e definir o tamanho do cluster com -C<bytes>
, mas mkfs
observa que:
Warning: the bigalloc feature is still under development
See https://ext4.wiki.kernel.org/index.php/Bigalloc for more information
Há menções de problemas em combinação com a alocação atrasada nessa página e o ext4
man página , e as palavras "risco enorme" também aparecem na página wiki do Bigalloc.
Nada disso tem nada a ver com o limite de 64 MB / inode definido pela opção -i
. Parece ser apenas um limite arbitrário definido no nível da interface. O número de inodes também pode ser definido diretamente com a opção -N
e, quando usado, não há verificações. Além disso, o limite superior baseia-se no máximo tamanho do bloco do sistema de arquivos, não o tamanho do bloco escolhido de fato como os limites estruturais são.
Por causa do limite de 64k blocos / grupo, sem bigalloc
não há como obter tão poucos inodes quanto a proporção de 64 MB / inode implicaria, e com bigalloc
, o número de inodes pode ser muito menor do que isso.