Como usar todos os inodes

5

Sem criar um arquivo, posso usar qualquer inode que seja gratuito? Eu quero escrever um script que irá usar todos os inodes livres no sistema. é possível?

    
por ashok 30.10.2014 / 17:56

3 respostas

8

Sim, você pode consumir todos os inodes de um sistema. Eles são um recurso limitado, assim como o espaço em disco, e são pré-alocados quando você executa um mkfs.ext4 , por exemplo.

Você pode usar ferramentas como tune2fs -l <device> ou df -i <path> para ver quantas são alocadas e usadas.

Exemplo

$ df -i /
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355850 2920950   11% /

Portanto, este sistema de arquivos tem 2920950 inodes livres. Se eu começasse a criar arquivos, diretórios ou links no sistema de arquivos, isso seria tudo o que eu precisava fazer para consumir todos eles. Percebi que eu poderia consumir todos esses inodes com pequenos arquivos ou links, e ainda ter praticamente todo o espaço em disco ainda disponível para mim.

Consumindo inodes sem arquivos?

Não tenho certeza do que você está obtendo aqui, mas a única maneira que conheço, onde você pode consumir inodes é criar arquivos, diretórios ou links. Eu não estou familiarizado com nenhuma outra maneira de consumi-los.

Exemplo

Aqui você pode ver que estou consumindo 1 inodes ao criar um diretório vazio.

$ df -i /
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355850 2920950   11% /

$ sudo mkdir /somedir

$ df -i /
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355851 2920949   11% /

A maneira mais fácil de consumir os inodes provavelmente criará uma árvore de diretórios de diretórios.

$ sudo mkdir /somedir/1
$ df -i /
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355852 2920948   11% /

$ sudo mkdir /somedir/2
$ df -i /
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355853 2920947   11% /

$ sudo mkdir /somedir/3
$ df -i /
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355854 2920946   11% /

Aqui está outro exemplo em que estou consumindo inodes criando vários links usando ln para o mesmo arquivo.

$ ln -s afile ln1
$ df -i .
Filesystem                          Inodes   IUsed    IFree IUse% Mounted on
/dev/mapper/fedora_greeneggs-home 26722304 1153662 25568642    5% /home

$ ln -s afile ln2
$ df -i .
Filesystem                          Inodes   IUsed    IFree IUse% Mounted on
/dev/mapper/fedora_greeneggs-home 26722304 1153663 25568641    5% /home

$ ln -s afile ln3
$ df -i .
Filesystem                          Inodes   IUsed    IFree IUse% Mounted on
/dev/mapper/fedora_greeneggs-home 26722304 1153664 25568640    5% /home
    
por 30.10.2014 / 18:09
7

Este script criará quantos arquivos você tiver disponíveis no seu sistema de arquivos / :

while [ $(df --output=iavail / | tail -n1) -gt 0 ]; do 
    touch $((i++)); 
done

Até onde eu sei, não há como usar inodes sem usar arquivos ou diretórios, afinal são para eles. Nó que os inodes permanecerão em uso após o script ser concluído. Você terá que excluir os arquivos criados para liberá-los.

    
por 30.10.2014 / 18:46
5

Os arquivos são inodes.

No entanto, você pode criar arquivos que não estejam vinculados a nenhum diretório e ainda usar um inode. Por exemplo:

zsh -c 'repeat 1000 ((repeat 1000 {exec {fd}> file; rm file}
          exec sleep 1000 >&-) | cat)'

(eventualmente) usaria 1.000.000 inodes. Esses inodes seriam de arquivos excluídos que ainda não foram recuperados, uma vez que esses sleep processos os abriram.

O número de arquivos que você pode criar dessa maneira é limitado pelo número de processos que você pode gerar e pelo número máximo de arquivos que você pode abrir por processo.

    
por 31.10.2014 / 11:31