É sabido que os arquivos de texto vazios possuem zero bytes:
No entanto, cada um deles contém metadados , que, de acordo com minha pesquisa, são armazenados em inodes e usam espaço .
Diante disso, parece-me lógico que é possível preencher um disco criando puramente arquivos de texto vazios. Isso está correto? Em caso afirmativo, quantos arquivos de texto vazios eu precisaria preencher em um disco de, por exemplo, 1 GB?
Para fazer algumas verificações, eu corro, df -i
mas isso aparentemente mostra a% de inodes que estão sendo usados (?) E não o quanto eles pesam.
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 947470 556 946914 1% /dev
tmpfs 952593 805 951788 1% /run
/dev/sda2 28786688 667980 28118708 3% /
tmpfs 952593 25 952568 1% /dev/shm
tmpfs 952593 5 952588 1% /run/lock
tmpfs 952593 16 952577 1% /sys/fs/cgroup
/dev/sda1 0 0 0 - /boot/efi
tmpfs 952593 25 952568 1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708 3% /home/lucho
disk-usage
inode
file-metadata
luchonacho
fonte
fonte
Respostas:
Esta saída sugere
28786688
inodes em geral, após o qual a próxima tentativa de criar um arquivo no sistema de arquivos raiz (dispositivo/dev/sda2
) retornaráENOSPC
("Não resta espaço no dispositivo").Explicação: no design original do sistema de arquivos * nix, o número máximo de inodes é definido no momento da criação do sistema de arquivos. Espaço dedicado é alocado para eles. Você pode ficar sem inodes antes de ficar sem espaço para dados ou vice-versa. O sistema de arquivos Linux mais comum
ext4
ainda possui essa limitação. Para obter informações sobre tamanhos de inode no ext4, consulte a página de manual do mkfs.ext4.O Linux suporta outros sistemas de arquivos sem essa limitação. Ativado
btrfs
, o espaço é alocado dinamicamente. "A estrutura do inode é relativamente pequena e não conterá dados de arquivos incorporados ou dados de atributos estendidos." (ext3 / 4 aloca algum espaço dentro de inodes para atributos estendidos ). É claro que você ainda pode ficar sem espaço em disco criando muitas entradas de metadados / diretório.Pensando nisso, o tmpfs é outro exemplo em que os inodes são alocados dinamicamente. É difícil saber o que o número máximo de inodes relatados por
df -i
realmente significaria na prática para esses sistemas de arquivos. Eu não atribuiria nenhum significado ao valor mostrado."O XFS também aloca inodes dinamicamente. O mesmo acontece com o JFS. O mesmo aconteceu com o reiserfs. O F2FS. Os sistemas de arquivos Unix tradicionais alocam os inodes estaticamente no momento do mkfs, e os FSes modernos, como o ext4, que remetem à sua herança, mas atualmente a exceção, não a regra.
"BTW, o XFS permite que você defina um limite para a porcentagem máxima de espaço usada pelos inodes, para que você possa ficar sem inodes antes de chegar ao ponto em que não pode anexar aos arquivos existentes. (O padrão é 25% para FSes abaixo de 1 TB, 5% para sistemas de arquivos de até 50 TB, 1% para maiores que isso.) De qualquer forma, esse uso de espaço em metadados (inodes e mapas de extensão) será refletido regularmente
df -h
"- Peter Cordes em um comentário a esta respostafonte
28786688-667980=28118708
arquivos vazios, ficarei sem inodes e "quebrarei meu sistema"?df -h
@luchonacho regular .Criar arquivos vazios envolve o seguinte:
O número de inodes disponíveis geralmente é determinado quando um sistema de arquivos é criado e não pode ser alterado (alguns sistemas de arquivos como Btrfs ou XFS alocam inodes dinamicamente). Isso é o que é medido
df -i
. Ao ficar sem inodes, não é possível criar novos arquivos ou diretórios, mesmo se houver espaço em disco disponível.As entradas do diretório também ocupam espaço, a partir do espaço em disco disponível. Você pode ver isso observando o tamanho de um diretório: é sempre um múltiplo do tamanho do bloco e, quando um diretório contém muitos arquivos, seu tamanho aumenta. Se você ficar sem espaço em disco, poderá não conseguir criar novos arquivos ou diretórios em um diretório "cheio" ( ou seja , onde a adição de um novo arquivo envolveria a alocação de um novo bloco), mesmo se você tiver inodes disponíveis.
Então, sim, é possível ficar sem espaço em disco usando apenas arquivos vazios.
fonte
Argumento lógico puro:
Um nome de arquivo consiste em uma quantidade diferente de zero de bytes. Mesmo com a compactação máxima teórica em um sistema de arquivos hipotético projetado para permitir a quantidade máxima absoluta de nomes de arquivos, cada nome de arquivo ainda consumirá pelo menos um bit em algum lugar do disco físico. Provavelmente mais, mas "1 bit por arquivo" é o mínimo trivial.
Calcule a quantidade de bits que pode caber nos pratos e esse é o número máximo teórico de arquivos (vazios ou não vazios) que você pode armazenar nele.
Então a resposta é sim. Eventualmente, você ficará sem espaço, independentemente do armazenamento que estiver usando, se continuar adicionando arquivos vazios. Obviamente, você acabará muito mais cedo do que o máximo calculado dessa maneira, mas acabará.
fonte
Simplesmente não, mas você pode ficar sem os inodes no linux, que serão os mesmos que ficar sem espaço.
você pode tentar algo assim no seu shell
n=0; while :; do touch $n; let n=n+1; done
Apenas certifique-se de executá-lo na máquina virtual ou você estará sem inodes muito rápido.
fonte
rm -fr inodetest
para se livrar de todos esses arquivos vazios e trabalhar normalmente novamente. :)Você não pode preencher o disco criando arquivos vazios - o disco ainda terá muito espaço para novos arquivos. Mas sim, você pode esgotar o fornecimento finito de inodes gratuitos do sistema de arquivos - nesse ponto, você não pode criar novos arquivos (mesmo que seu disco - até onde o espaço usado seja usado - esteja praticamente vazio). É apenas a lista de inodes do sistema de arquivos que já foi usada, não o disco ... então o sistema de arquivos está cheio, enquanto o disco está praticamente vazio. A tabela inode usa espaço no disco, mas a tabela não cresce quando você adiciona arquivos - assim como uma folha de papel não cresce quando você escreve nas linhas.
(uma resposta em um comentário de Baard Kopperud)
fonte