Por que as distribuições do Linux não são padronizadas para montar tmpfs com inodes infinitos?

2

De acordo com esta resposta , é possível montar pelo menos tmpfs com inodes "infinitos".

Considere esta situação específica (números escolhidos para fins de exemplo, eu sei que eles não são realísticos):

  • A partição tmpfs é 50% usada pelo volume
  • 90% desses dados são inodes (ou seja, 45% do disco é usado por inodes e 5% são usados por dados "reais")
  • o tmpfs foi montado com nr_inodes=1000
  • todos os 1000 inodes são absorvidos pelos inodes atualmente escritos

Isso significa que o tmpfs está 50% cheio, mas também que qualquer tentativa de gravar nele resultará em um erro de falta de espaço.

Parece-me que definir nr_inodes=0 (aka inodes infinitos) faria com que esta situação desaparecesse.

  • Existe uma razão para que inodes infinitos não sejam o padrão?
  • Quais motivos existem para limitar o número de inodes em um sistema de arquivos?
por quodlibetor 18.07.2013 / 16:35

2 respostas

7

Geralmente (ex: ext2 , ext3 , ext4 , ufs ), o número de inodes que um sistema de arquivos pode conter é definido no momento da criação, portanto, nenhuma opção de montagem pode contorná-lo.

Alguns sistemas de arquivos como xfs têm um rácio de espaço usado por inodes para que possa ser aumentado a qualquer momento.

Sistemas de arquivos modernos, como ZFS ou btrfs , não têm limitação rígida no número de arquivos que um sistema de arquivos pode armazenar, inodes (ou seus equivalentes) são criados sob demanda.

Editar: estreitando a resposta para a pergunta atualizada.

Com tmpfs , o número padrão de inodes é calculado para ser grande o suficiente para a maioria dos casos de uso realistas. A única situação em que essa configuração não seria ideal seria se um grande número de arquivos vazios fosse criado em tmpfs . Se você estiver nesse caso, a melhor prática é ajustar o parâmetro nr_inode para um valor grande o suficiente para todos os arquivos caberem, mas não use 0 (= unlimited). A documentação do tmpfs indica que essa não deve ser a configuração padrão por causa do risco de exaustão de memória por usuários não-root:

if nr_inodes=0, inodes will not be limited.  It is generally unwise to
mount with such options, since it allows any user with write access to
use up all the memory on the machine; but enhances the scalability of
that instance in a system with many cpus making intensive use of it.

No entanto, não está claro como isso pode acontecer, dado que o fato de tmpfs de uso da RAM é limitado por padrão a 50% da RAM:

size:      The limit of allocated bytes for this tmpfs instance. The 
           default is half of your physical RAM without swap. If you
           oversize your tmpfs instances the machine will deadlock
           since the OOM handler will not be able to free that memory.
    
por 18.07.2013 / 17:29
0

Como Madhatter disse, os inodes ocupam algum espaço, e não é uma quantia trivial quando se fala em usar um número infinito deles.

    
por 18.07.2013 / 19:51