O que acontece se o limite de 4 bilhões de arquivos for excedido em uma partição ext4?

46

O que acontece se o limite de 4 bilhões de arquivos for excedido em uma partição ext4, com uma transferência de 5 bilhões de arquivos, por exemplo?

Bensuperpc
fonte

Respostas:

79

Presumivelmente, você verá um pouco do erro "Sem espaço restante no dispositivo":

# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device

E, na prática, você atinge esse limite muito antes de "4 bilhões de arquivos". Verifique seus sistemas de arquivos com os dois df -he df -idescubra quanto espaço resta.

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       93M  2.1M   84M   3% /dev/shm/loop
# df -i loop/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop0      25688 25688     0  100% /dev/shm/loop

Neste exemplo, se os arquivos não tiverem tamanho 4K em média, o espaço no inode ficará muito mais cedo que o espaço de armazenamento. É possível especificar outra proporção ( mke2fs -N number-of-inodesou -i bytes-per-inodeou -T usage-typeconforme definido em /etc/mke2fs.conf).

frostschutz
fonte
1
Obrigado pela sua resposta, às vezes estou preocupado, tenho mais de 400 milhões de arquivos na minha partição principal (RAID 50), tenho muitos repositórios git, era por segurança se isso acontecesse
Bensuperpc 02/07/07
5
@ensuperpc: se muitos dos arquivos não são usados ​​regularmente - apenas para fins de backup - você pode considerar colocar cada projeto em seu próprio arquivo tar. Isso reduz consideravelmente o número de arquivos e também o espaço ocupado se você usar uma opção de compactação.
jamesqf 2/07
27
@jamesqf Se você ainda não o fez, tente executar git repackem cada repositório git para combinar todos os objetos separados em um arquivo de pacote.
user253751 2/07
13
+1 Como você está apenas usando touch, não é chique echo, você também mostra um ponto importante e um equívoco frequentemente criado: É possível preencher um disco com arquivos vazios.
rexkogitans
6
O @jamesqf git repacknão perde nenhuma funcionalidade, ainda é funcionalmente o mesmo tarrepositório git, tornando-o ilegível para muitos programas que esperam um projeto ou um repositório git
Ferrybig
52

Quando o limite é atingido, as tentativas subsequentes de criar arquivos falharão ENOSPC, indicando que o sistema de arquivos de destino não tem espaço para novos arquivos.

No cenário que você descreve, isso normalmente resulta no cancelamento da transferência assim que o limite é atingido.

Stephen Kitt
fonte