Como posso aumentar o número de inodes em um sistema de arquivos ext4?

56

Eu tive um problema (novo para mim) na semana passada. Eu tenho um sistema de arquivos ext4 (Fedora 15). O aplicativo que é executado no servidor parou de repente. Eu não consegui encontrar o problema à primeira vista.

df mostrou 50% de espaço disponível. Depois de pesquisar por cerca de uma hora, vi um post no fórum em que o cara usava df -i . A opção procura pelo uso de inodes. O sistema estava fora de inodes, um problema simples que eu não percebi. A partição tinha apenas inodes de 3.2M.

Agora, minhas perguntas são: Posso fazer o sistema ter mais inodes? Deve / pode ser definido ao formatar o disco? Com os inodes de 3.2M, quantos arquivos eu poderia ter?

    
por piovisqui 12.12.2011 / 00:46

6 respostas

30

Parece que você tem muito mais arquivos do que a expectativa normal.

Eu não sei se existe uma solução para alterar o tamanho da tabela de inodes dinamicamente. Eu tenho medo que você precise fazer backup de seus dados, criar um novo sistema de arquivos e restaurar seus dados.

Para criar um novo sistema de arquivos com uma enorme tabela de inode, você precisa usar a opção '-N' do mke2fs (8).

Eu recomendaria usar a opção '-n' primeiro (que não cria o fs, mas exibe as informações úteis) para que você possa obter o número estimado de inodes. Então, se você precisar, use '-N' para criar seu sistema de arquivos com números de inode específicos.

    
por 12.12.2011 / 01:28
10

Como outra solução alternativa, eu poderia sugerir considerar empacotar grandes conjuntos de arquivos em um (%) tar archive descompactado e, em seguida, usar archivemount para montá-lo como um sistema de arquivos. Um arquivo tar é melhor para compartilhar do que uma imagem do sistema de arquivos e fornece desempenho semelhante ao fazer backup em uma nuvem ou outro armazenamento.

Se a coleção deve ser somente leitura, squashfs pode ser uma opção, mas requer certas opções ativadas no kernel, e a compactação xz está disponível para tar com o mesmo desempenho.

    
por 29.11.2015 / 10:46
10

Com 3,2 milhões de inodes, você pode ter 3,2 milhões de arquivos e diretórios, total (mas vários hardlinks para um arquivo usam apenas um inode).

Sim, pode ser definido ao criar um sistema de arquivos na partição. As opções -T usage-type , -N number-of-inodes ou -i bytes-per-inode podem definir o número de inodes. Eu geralmente uso -i , depois de comparar a saída de du -s e find | wc -l para uma coleção semelhante de arquivos e permitindo alguma folga.

Não, não pode ser alterado no local em um sistema de arquivos existente. No entanto:

  • Se você estiver executando o LVM ou o sistema de arquivos estiver no LUN de um SAN (seja diretamente no LUN ou como a última partição no LUN) ou se houver espaço vazio no disco após a partição, você poderá aumentar o partição e, em seguida, use resize2fs para expandir o sistema de arquivos. Isso adiciona mais inodes em proporção ao espaço adicionado, aproximadamente. Se você quiser evitar a falta de inodes antes do espaço, supondo que os arquivos futuros tenham, em média, aproximadamente o mesmo tamanho, defina uma porcentagem de bloco reservada alta o suficiente usando tune2fs -m .
  • Se você tiver espaço suficiente e puder colocar o sistema de arquivos offline, coloque-o offline, crie um novo sistema de arquivos com mais inodes e copie todos os arquivos.
  • Se apenas um subconjunto dos arquivos estiver usando muitos inodes e você tiver espaço livre suficiente, crie um sistema de arquivos em um dispositivo de loop apoiado por um arquivo no sistema de arquivos, crie um sistema de arquivos com mais inodes (e talvez blocos menores também), e mova os diretórios ofensivos para ele. Isso é provavelmente um golpe de desempenho e um problema de manutenção, mas é uma alternativa.
  • E, claro, se você puder excluir muitos arquivos desnecessários, isso também deve ajudar.
por 13.01.2016 / 20:30
6

Recentemente, corri para esse problema ao usar o upgrade do apt ou aptitude.

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.3G  70% /

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 521497   2791  100% /

Comando emitido:

du /|sort -k1 -n

A maioria dos arquivos foi revelada em subpastas para várias versões do kernel:

/usr/src/linux-headers

As subpastas removidas e o problema de inode foram corrigidos.

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 104986 419302   21% /
    
por 17.12.2015 / 16:29
5

Eu tenho uma solução alternativa para essa situação. Vamos dizer que você tem 1000 inodes em uma partição de 10G. Mas devido ao limite de inodes, você não deve usar todo o espaço da partição . Mas, nessas soluções, você poderá usar o espaço restante da partição sem formatá-la .

$ df -i  # see list ( I need just one free inode here so move just one file into other PARTITION)
/dev/part1  1000 999 1 99.9%     /data

$ dd if=/dev/zero of=/data/new_data
$ mkfs.ext4 /data/new_data
$ mkdir /data1
$ mount /data/new_data /data1

para montagem permanente

$ echo "/data/new_data /data1 ext4 defaults 0 1" >> /etc/fstab
    
por 25.05.2015 / 06:42
0

tente du -s --inodes * 2>/dev/null |sort -g do cd no último dir na saída e repita.

Divulgação completa: nem todo suporte do SO --inodes flag para du command (meu Mac OS não), mas muitos sistemas operacionais Linux o fazem.

    
por 10.07.2018 / 19:01