Cosa succede se il limite di 4 miliardi di file è stato superato in una partizione ext4?


46

Cosa succede se il limite di 4 miliardi di file è stato superato in una partizione ext4, ad esempio con un trasferimento di 5 miliardi di file?

Risposte:


79

Presumibilmente, vedrai un po 'di errore "Errore di spazio sul 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 in pratica raggiungi questo limite molto prima di "4 miliardi di file". Controlla il tuo filesystem con entrambi df -he df -iper scoprire quanto spazio rimane.

# 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

In questo esempio, se i tuoi file non hanno dimensioni 4K in media, esaurisci lo spazio inode molto prima dello spazio di archiviazione. E 'possibile specificare un altro rapporto ( mke2fs -N number-of-inodeso -i bytes-per-inodeo -T usage-typecome definito /etc/mke2fs.conf).


1
Grazie per la tua risposta, a volte sono preoccupato, ho oltre 400 milioni di file nella mia partizione principale (RAID 50), ho molti repository git, era per sicurezza se ciò dovesse accadere
Bensuperpc

5
@ensuperpc: se molti dei file non vengono utilizzati regolarmente - solo lì per scopi di backup - potresti considerare di mettere ogni progetto nel suo file tar. Ciò riduce considerevolmente il numero di file e anche lo spazio occupato se si utilizza un'opzione di compressione.
jamesqf,

27
@jamesqf Se non l'hai già fatto, prova a eseguire git repackin ogni repository git per combinare tutti gli oggetti separati in un file pack.
user253751

13
+1 Dato che stai solo usando touch, niente di speciale echo, mostri anche un punto importante e un malinteso spesso fatto: è possibile riempire un disco con file vuoti.
rexkogitans,

6
@jamesqf git repacknon perde alcuna funzionalità, è ancora funzionalmente lo stesso repository git, lo tarrende illeggibile per molti programmi che prevedono un progetto o un repository git
Ferrybig

52

Una volta raggiunto il limite, i successivi tentativi di creazione dei file falliranno ENOSPC, indicando che il file system di destinazione non ha spazio per i nuovi file.

Nello scenario che descrivi, questo in genere comporta l'interruzione del trasferimento una volta raggiunto il limite.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.